Amazon CloudWatch
Create metric alarms, change their recorded state and write metric data through the tested Query path.
Plan: Pro46 of 55 operations implemented10Known differences
In Vera 1.2.0 preview, metric reads returned no datapoints, and newer CLI versions using CBOR failed some writes that work over Query.
Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.
Connect
Section titled “Connect”Activate your license key and start the emulator with the Vera launcher, as in Activate Pro, then run this in a terminal of its own, from an empty scratch directory. It gives the official AWS CLI dummy credentials and a config file of its own, so no AWS account is needed and your own AWS profile isn't touched.
export VERA_ENDPOINT="http://localhost:5003"export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=testexport AWS_REGION=us-east-1 AWS_DEFAULT_REGION=us-east-1export AWS_SHARED_CREDENTIALS_FILE=/dev/nullexport AWS_EC2_METADATA_DISABLED=trueexport AWS_PAGER="" AWS_CLI_AUTO_PROMPT=offunset AWS_PROFILE AWS_DEFAULT_PROFILEunset AWS_SESSION_TOKEN AWS_SECURITY_TOKENunset AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN AWS_ROLE_SESSION_NAMEunset AWS_CONTAINER_CREDENTIALS_FULL_URIunset AWS_CONTAINER_CREDENTIALS_RELATIVE_URIcat > vera-aws-config <<'EOF'[default]region = us-east-1output = jsoncli_binary_format = base64s3 = addressing_style = pathEOFexport AWS_CONFIG_FILE="$PWD/vera-aws-config"When you've finished every example in this terminal, close it and delete vera-aws-config, not before.
Use the AWS CLI’s cloudwatch commands. The emulator serves the 2010-08-01 API. Log groups and events are a separate service: see CloudWatch Logs.
Check which protocol your AWS CLI uses. A CloudWatch operation can work over one protocol and fail over another, so which one your client sends matters:
- AWS Query works. The example was checked with the official AWS CLI 2.31.35, which sends CloudWatch requests over AWS Query. Query accepted every request on this page.
- Smithy RPC v2 CBOR failed some writes. The official AWS CLI 2.39.5 sends CloudWatch requests over CBOR instead. With it, in testing of Vera 1.2.0 preview, simple reads such as
ListMetricsworked, but a validPutMetricDatafailed withMissingParameterforNamespace, and the example’sPutMetricAlarmfailed withMissingParameterforAlarmName.
Other CLI versions weren’t checked. aws --version shows yours. With a CLI that uses CBOR, don’t downgrade your main installation: install the tested version separately, or write metric data with the Query request at the end of the example, which needs only curl.
Example
Section titled “Example”Create an alarm on a metric with an Environment dimension, and read it back:
aws --endpoint-url "$VERA_ENDPOINT" cloudwatch put-metric-alarm \ --alarm-name vera-docs-requests --namespace Docs/Audit --metric-name Requests \ --statistic Sum --period 60 --evaluation-periods 1 --threshold 2 \ --comparison-operator GreaterThanThreshold \ --dimensions Name=Environment,Value=docsaws --endpoint-url "$VERA_ENDPOINT" cloudwatch describe-alarms --alarm-names vera-docs-requestsA new alarm is in INSUFFICIENT_DATA, with the reason Unchecked: Initial alarm creation. Set its state, and read it again:
aws --endpoint-url "$VERA_ENDPOINT" cloudwatch set-alarm-state --alarm-name vera-docs-requests \ --state-value ALARM --state-reason 'Documentation state example'aws --endpoint-url "$VERA_ENDPOINT" cloudwatch describe-alarms --alarm-names vera-docs-requestsThe alarm’s record is now ALARM, with the reason you gave, and it keeps its dimension. That’s a manual state change: the alarm wasn’t evaluated against metric data, and no action ran. These are selected fields:
{ "MetricAlarms": [ { "AlarmName": "vera-docs-requests", "StateValue": "ALARM", "StateReason": "Documentation state example", "MetricName": "Requests", "Namespace": "Docs/Audit", "Dimensions": [ { "Name": "Environment", "Value": "docs" } ] } ]}To clean up, delete the alarm:
aws --endpoint-url "$VERA_ENDPOINT" cloudwatch delete-alarms --alarm-names vera-docs-requestsTo write metric data without depending on your CLI’s protocol, send an AWS Query request with curl. This writes a value of 7 to the same metric, with its dimension:
curl --fail-with-body --silent --show-error "$VERA_ENDPOINT/" \ --data-urlencode 'Action=PutMetricData' \ --data-urlencode 'Version=2010-08-01' \ --data-urlencode 'Namespace=Docs/Audit' \ --data-urlencode 'MetricData.member.1.MetricName=Requests' \ --data-urlencode 'MetricData.member.1.Value=7' \ --data-urlencode 'MetricData.member.1.Unit=Count' \ --data-urlencode 'MetricData.member.1.Dimensions.member.1.Name=Environment' \ --data-urlencode 'MetricData.member.1.Dimensions.member.1.Value=docs'It returns XML with an empty PutMetricDataResult. The emulator accepted this request without an Authorization header; AWS itself doesn’t accept unsigned requests. A successful write doesn’t mean statistics return the data: see Limitations. There’s no operation to delete metric data, so for a clean metric state, start a fresh emulator as in Stop and start again.
Supported features
Section titled “Supported features”- Metric alarms, with dimensions, created, described, set to a state with
SetAlarmStateand deleted. In earlier recorded comparisons, thePutMetricAlarmandDeleteAlarmsresponses matched AWS’s. - Metric data over AWS Query:
PutMetricDataaccepted valid writes with and without dimensions, from boto3 1.40.72 and fromcurl. - Listing metrics:
ListMetricsanswered. What it lists wasn’t checked in detail. - Metric streams and tags, on errors only: in earlier recorded comparisons,
GetMetricStream,TagResource,UntagResourceandListTagsForResourcematched AWS’s error responses. Successful metric streaming and complete tag lifecycles weren’t verified. - Also served, not checked in Vera 1.2.0 preview or Vera 1.2.0-rc.3: alarm history, and mute rules and actions. Dashboards, composite alarms, anomaly detectors, Contributor Insights rules and
GetMetricDataare served too; earlier recorded comparisons on the requests their notes describe found differences.
Limitations
Section titled “Limitations”The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.
- No statistics were returned. In Vera 1.2.0 preview, right after valid writes with and without dimensions,
GetMetricStatisticsreturned an emptyDatapointslist. Later reads weren’t tested, so don’t rely on aggregation, percentiles or retention. - CBOR writes from newer CLIs failed. Over Smithy RPC v2 CBOR, in Vera 1.2.0 preview, the official AWS CLI 2.39.5’s valid
PutMetricDataandPutMetricAlarmrequests failed withMissingParameter, though the same operations work over AWS Query: see Connect. - Alarms weren’t evaluated. Testing changed an alarm’s state only with
SetAlarmState. Evaluation against metric data and alarm actions, such as notifications, weren’t tested. - Some validation differs. In earlier recorded comparisons,
PutCompositeAlarmaccepted a rule naming missing alarms andPutInsightRulea rule withoutFilters, both of which AWS rejected, and a few error codes differ from AWS’s. An earlier build also rejected aGetMetricDatarequest with nestedDimensionsthat AWS accepted; that wasn’t checked again in Vera 1.2.0 preview or Vera 1.2.0-rc.3.
API coverage
Section titled “API coverage”Every operation in AWS's published 2010-08-01 API (SDK model, botocore 1.43.105), and whether the emulator implements it. Availability combines the earlier implementation inventory with the dated observations below; checking a page's example does not verify every operation. Each note names its evidence first; an observation given without a build or date comes from earlier testing, on 3 November 2026. What the statuses mean
No operation matches .
Try part of a name, such as AssociateDatasetKmsKey, or .
| Operation | Status | Notes |
|---|---|---|
| Associate | Not implemented | |
| Create | Not implemented | |
| Delete | Implemented | |
| Delete | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Deleted the example's alarm. |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Not implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Known difference | Recorded comparison: Earlier build, 3 November 2026 — Adds fields AWS leaves out, set to 0 or empty, such as DatapointsToAlarm, EvaluationInterval, ExtendedStatistic, Metrics and Unit. Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned the example's alarm with its dimension, first in INSUFFICIENT_DATA with the reason Unchecked: Initial alarm creation, then in ALARM with the reason SetAlarmState supplied. |
| Describe | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Disable | Implemented | |
| Disable | Implemented | |
| Disassociate | Not implemented | |
| Enable | Implemented | |
| Enable | Implemented | |
| Get | Implemented | |
| Get | Known difference | Recorded comparison: For the tested missing dashboard, the emulator returns DashboardNotFoundError; the AWS recording returns ResourceNotFound. This comparison covers the missing-resource error only. |
| Get | Not implemented | |
| Get | Known difference | Recorded comparison: For the tested missing insight rule, the emulator returns ResourceNotFoundException; the AWS recording returns InvalidParameterValue. Successful report generation was not established by this comparison. |
| Get | Known difference | Recorded comparison: Earlier build, 3 November 2026 — The tested request containing nested Dimensions succeeds in the AWS recording but was rejected by the emulator with InvalidParameterValue. Not checked again in Vera 1.2.0 preview. |
| Get | Known difference | Recorded comparison: Earlier build, 3 November 2026 — For the tested request exceeding the 1,440-data-point range limit, the emulator returns InvalidParameterValue; the AWS recording returns InvalidParameterCombination. This is an error-code difference. Local observation: Vera 1.2.0 preview, 5 November 2026 — Returned an empty Datapoints list right after valid Query writes with and without dimensions; later reads weren't tested. |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Not implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Answered, including from official CLI 2.39.5 over CBOR. What it lists wasn't checked in detail. |
| List | Implemented | |
| Put | Implemented | |
| Put | Known difference | Recorded comparison: The tested successful AWS response includes AnomalyDetectorId; the emulator response omits it. This compares the response shape and does not verify anomaly-detection execution. |
| Put | Known difference | Recorded comparison: The emulator accepts the tested composite alarm rule with missing referenced alarms; the AWS recording rejects it. This is reference validation, not an IAM authorization comparison. |
| Put | Implemented | |
| Put | Known difference | Recorded comparison: The emulator accepts the tested rule definition without the required Filters key; the AWS recording rejects it with InvalidParameterValue. |
| Put | Not implemented | |
| Put | Implemented | |
| Put | Known difference | Local observation: Vera 1.2.0 preview, 5 November 2026 — The tested official CLI 2.31.35's Query request created the example's alarm with its dimension. Official CLI 2.39.5's CBOR request for the same valid alarm failed with MissingParameter AlarmName. Compatibility depends on the transport. |
| Put | Known difference | Local observation: Vera 1.2.0 preview, 5 November 2026 — Query accepted the tested metric with dimensions. Official CLI 2.39.5's CBOR request failed with MissingParameter Namespace; the tested official CLI 2.31.35 Query request succeeded. Valid Query writes with and without dimensions also succeeded from boto3 1.40.72 and a direct curl request. This replaces an earlier observation that dimensions were rejected over every protocol. Compatibility depends on the transport. |
| Put | Implemented | |
| Set | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — Changed the alarm's recorded state to ALARM with the supplied reason. A manual state change, not metric evaluation or alarm actions. |
| Start | Implemented | |
| Start | Implemented | |
| Stop | Implemented | |
| Stop | Implemented | |
| Tag | Implemented | |
| Untag | Implemented | |
| Update | Not implemented | |
| Update | Not implemented |