Skip to content

aws.cloudwatch-metric-alarm resource

Description

MetricAlarm is a CloudWatch metric alarm, modeling AWS::CloudWatch::Alarm. A single PutMetricAlarm upsert reconciles every writable property for both create and update; the alarm name is fixed at creation and is the identity, so a change to it replaces the alarm, while every other property is rewritten in place. The alarm watches either a single metric (metric-name with a namespace, statistic or extended-statistic, dimensions, period, and unit) or the result of a metric-math expression (the metric-query array); the two forms are mutually exclusive. Tags are reconciled separately by ARN.

Several rules cannot be expressed as constraints and are checked in code: alarm-name is 1-255 and alarm-description 0-1024 characters (the length function counts bytes, not characters); a namespace is 1-255 characters and cannot contain a colon; an extended-statistic and a metric-query stat must match a percentile or statistic pattern; a period is 10, 20, or 30 seconds or a multiple of 60 (a metric-query period also allows 1 and 5); and an action ARN must be an ordinary ARN or an EC2-automate ARN.

Source: internal/service/cloudwatch/metric_alarm_rsrc.go:78

Example usage:

imports: {
  aws: 'github.com/cloudboss/unobin-library-aws'
}

resources: {
  example: aws.cloudwatch-metric-alarm {
    # Set input fields here.
  }
}

Inputs

alarm-name

string

required

actions-enabled

optional(boolean)

alarm-actions

list(string)

ok-actions

list(string)

insufficient-data-actions

list(string)

alarm-description

optional(string)

comparison-operator

optional(string)

datapoints-to-alarm

optional(integer)

dimensions

map(string)

evaluate-low-sample-count-percentile

optional(string)

evaluation-periods

optional(integer)

extended-statistic

optional(string)

metric-name

optional(string)

metric-query

list(object)
list(
  object({
    id: string
    account-id: optional(string)
    expression: optional(string)
    label: optional(string)
    metric: optional(
      object({
        metric-name: optional(string)
        namespace: optional(string)
        dimensions: optional(map(string))
        stat: optional(string)
        period: optional(integer)
        unit: optional(string)
      })
    )
    period: optional(integer)
    return-data: optional(boolean)
  })
)

namespace

optional(string)

period

optional(integer)

statistic

optional(string)

threshold

optional(number)

threshold-metric-id

optional(string)

treat-missing-data

optional(string)

unit

optional(string)

tags

map(string)

Input Constraints

Field combinations

Exactly one of metric-name or metric-query.

Forbidden together: metric-query, namespace, dimensions, period, unit, statistic, and extended-statistic.

At most one of statistic or extended-statistic.

Exactly one of threshold or threshold-metric-id.

Metric name rules

comparison-operator and evaluation-periods are required when metric-name is set.

Rule logic
When
input.metric-name != null
Require
input.comparison-operator != null
&& input.evaluation-periods != null

exactly one of statistic or extended-statistic is required when metric-name is set.

Rule logic
When
input.metric-name != null
Require
((input.statistic != null) && (input.extended-statistic == null))
|| ((input.statistic == null) && (input.extended-statistic != null))

Metric query rules

comparison-operator and evaluation-periods are required when metric-query is set.

Rule logic
When
input.metric-query != null
&& @core.length(input.metric-query) >= 1
Require
input.comparison-operator != null
&& input.evaluation-periods != null

At most one of metric-query[*].expression or metric-query[*].metric.

Comparison operator rules

comparison-operator must be a valid CloudWatch comparison operator.

Rule logic
When
input.comparison-operator != null
Require
input.comparison-operator == 'GreaterThanOrEqualToThreshold'
|| input.comparison-operator == 'GreaterThanThreshold'
|| input.comparison-operator == 'LessThanThreshold'
|| input.comparison-operator == 'LessThanOrEqualToThreshold'
|| input.comparison-operator == 'LessThanLowerOrGreaterThanUpperThreshold'
|| input.comparison-operator == 'LessThanLowerThreshold'
|| input.comparison-operator == 'GreaterThanUpperThreshold'

Statistic rules

statistic must be SampleCount, Average, Sum, Minimum, or Maximum.

Rule logic
When
input.statistic != null
Require
input.statistic == 'SampleCount'
|| input.statistic == 'Average'
|| input.statistic == 'Sum'
|| input.statistic == 'Minimum'
|| input.statistic == 'Maximum'

Unit rules

unit must be a valid CloudWatch standard unit.

Rule logic
When
input.unit != null
Require
input.unit == 'Seconds'
|| input.unit == 'Microseconds'
|| input.unit == 'Milliseconds'
|| input.unit == 'Bytes'
|| input.unit == 'Kilobytes'
|| input.unit == 'Megabytes'
|| input.unit == 'Gigabytes'
|| input.unit == 'Terabytes'
|| input.unit == 'Bits'
|| input.unit == 'Kilobits'
|| input.unit == 'Megabits'
|| input.unit == 'Gigabits'
|| input.unit == 'Terabits'
|| input.unit == 'Percent'
|| input.unit == 'Count'
|| input.unit == 'Bytes/Second'
|| input.unit == 'Kilobytes/Second'
|| input.unit == 'Megabytes/Second'
|| input.unit == 'Gigabytes/Second'
|| input.unit == 'Terabytes/Second'
|| input.unit == 'Bits/Second'
|| input.unit == 'Kilobits/Second'
|| input.unit == 'Megabits/Second'
|| input.unit == 'Gigabits/Second'
|| input.unit == 'Terabits/Second'
|| input.unit == 'Count/Second'
|| input.unit == 'None'

Treat missing data rules

treat-missing-data must be breaching, notBreaching, ignore, or missing.

Rule logic
When
input.treat-missing-data != null
Require
input.treat-missing-data == 'breaching'
|| input.treat-missing-data == 'notBreaching'
|| input.treat-missing-data == 'ignore'
|| input.treat-missing-data == 'missing'

Evaluate low sample count percentile rules

evaluate-low-sample-count-percentile must be evaluate or ignore.

Rule logic
When
input.evaluate-low-sample-count-percentile != null
Require
input.evaluate-low-sample-count-percentile == 'evaluate'
|| input.evaluate-low-sample-count-percentile == 'ignore'

Datapoints to alarm rules

datapoints-to-alarm must be at least 1.

Rule logic
When
input.datapoints-to-alarm != null
Require
input.datapoints-to-alarm == null
|| input.datapoints-to-alarm >= 1

Evaluation periods rules

evaluation-periods must be at least 1.

Rule logic
When
input.evaluation-periods != null
Require
input.evaluation-periods == null
|| input.evaluation-periods >= 1

Ok actions rules

ok-actions allows at most 5 actions.

Rule logic
When
input.ok-actions != null
&& @core.length(input.ok-actions) >= 1
Require
input.ok-actions == null
|| @core.length(input.ok-actions) <= 5

Insufficient data actions rules

insufficient-data-actions allows at most 5 actions.

Rule logic
When
input.insufficient-data-actions != null
&& @core.length(input.insufficient-data-actions) >= 1
Require
input.insufficient-data-actions == null
|| @core.length(input.insufficient-data-actions) <= 5

Outputs

arn

string

alarm-name

string

evaluate-low-sample-count-percentile

string