Overcast is alpha — behaviour and APIs may change between releases. Pin your version and read the changelog before upgrading.

overcast

CloudWatch limitations

Which alarm configurations Overcast evaluates, which it accepts without evaluating, which it refuses, and the defaults PutMetricAlarm applies.

What the alarm evaluator does and does not decide, and the input rules around it. The working set is on CloudWatch.

Created, but not evaluated

An alarm whose configuration the evaluator cannot decide is created and says so, rather than being refused.

ConfigurationWhy
Metrics — metric math and multi-metric alarmsNo expression evaluator
ThresholdMetricId — anomaly detectionNo model to compare against
ExtendedStatisticp99, tm99, …Percentiles are not computed
LessThanLowerOrGreaterThanUpperThreshold, LessThanLowerThreshold, GreaterThanUpperThresholdAnomaly-band operators, with no band

Such an alarm is never left silent. It declares itself in three places:

  • StateValue stays INSUFFICIENT_DATA, and StateReason says the state is not computed.
  • The PutMetricAlarm response carries x-overcast-emulation-limitation, naming what is not emulated. Ordinary alarms carry no such header.
  • ResourceStatusReason on the CloudFormation event, when the alarm came from a template, so it appears as the deploy goes past.

Refused

ConfigurationResponse
EvaluationCriteria — PromQL alarms501 NotImplemented from PutMetricAlarm
Any modelled CloudWatch operation Overcast does not implement — PutCompositeAlarm, PutAnomalyDetector, PutDashboard and the rest of the dashboard, metric-stream and Contributor Insights calls501 NotImplemented
An action ARN with no sink — EC2 instance actions, Systems Manager OpsItemsThe transition still happens and is still published; the undelivered action is logged and recorded as an Action history item saying it was NOT executed

Values AWS itself rejects still get AWS’s 400 ValidationError, not a 501: an unknown Statistic or ComparisonOperator, an invalid TreatMissingData, a Period that is not 10, 20, 30 or a multiple of 60, or DatapointsToAlarm greater than EvaluationPeriods. A metric-math alarm that also names a top-level Namespace/MetricName is one AWS rejects, and so does Overcast.

Defaults

PutMetricAlarm marks almost everything Required: No, which is not the same as having a default. Three parameters AWS documents a default for, and Overcast applies the same one:

ParameterDefault when omitted
ActionsEnabledtrue
DatapointsToAlarmEvaluationPeriods — “N out of N”
TreatMissingDatamissing

Five more are optional only because a PromQL alarm carries them inside EvaluationCriteria. For an alarm on a metric they are required, and omitting one gets a 400 ValidationError rather than a substituted value: Statistic (or ExtendedStatistic), ComparisonOperator, Period, EvaluationPeriods and Threshold.

AlarmName is required by PutMetricAlarm and optional on AWS::CloudWatch::Alarm: CloudFormation generates {StackName}-{LogicalID}-{RANDOM} when a template leaves it out, which is what CDK relies on.

Deliberate divergences

AreaOn AWSOvercast
SetAlarmStateReverts at the next evaluation, which can be almost immediatelyProtected for one full evaluation range (Period × EvaluationPeriods), so a forced state reaches its actions
Look-backMay reach further back to fill a range short of datapointsExactly the configured range; gaps resolve through TreatMissingData
Alarm historyBounded by age — 14 daysBounded by count — 100 items per alarm
A datapoint published with no unitFiled under None, so an alarm naming a unit never sees it and sits in INSUFFICIENT_DATACounts towards an alarm that names a unit
EvaluationWindowDefault sliding windowAccepted and ignored; the period-aligned window is always used

A datapoint that does name a unit is still held to it.

Tagging

AWS tags four CloudWatch resource types — alarms, dashboards, metric streams and Contributor Insights rules. Overcast emulates alarms only, so the alarm is the whole taggable surface.

ResourceTag on createTag after create
Alarm (arn:aws:cloudwatch:<region>:<account>:alarm:<name>)PutMetricAlarm TagsTagResource / UntagResource / ListTagsForResource
Dashboard, metric stream, Contributor Insights ruleNot emulatedNot emulated — ResourceNotFoundException
  • Tags apply at creation only. PutMetricAlarm ignores Tags when the call updates an existing alarm, as on AWS.
  • Tags are deleted with the alarm. An alarm recreated under the same name starts untagged.
  • An unknown resource is an error, not an empty tag set. All three operations return 404 ResourceNotFoundException for an ARN whose alarm does not exist, and 400 InvalidParameterValue for a ResourceARN that is not a CloudWatch ARN, including an empty one.
  • Tag sets are validated on both entry points. At most 50 tags, keys 1–128 characters not starting aws:, values at most 256 characters. A rejected set is not written, and a create carrying an invalid one fails outright rather than leaving an untagged alarm behind.

The Query protocol’s flattened member list ends at the first missing Key, so an empty tag key can only be expressed — and only be rejected — over the JSON protocol.