aws_cloudwatch_metric_alarm cost estimation
Alarm that triggers actions when a metric breaches a threshold. $0.10/alarm-month for standard resolution. High-resolution alarms (10s) cost $0.30/month. Composite alarms are free per logical condition.
An aws_cloudwatch_metric_alarm watches a CloudWatch metric and triggers actions (SNS notify, Auto Scaling, EC2 action) when it crosses a threshold. Pricing is per alarm per month, regardless of how often the alarm evaluates or fires.
Three pricing tiers exist: - Standard resolution (60-second evaluation): $0.10/alarm-month - High resolution (10-second evaluation): $0.30/alarm-month - Composite alarms (combine multiple alarms with AND/OR): $0.50/alarm-month
The catch with composite alarms: while a composite alarm itself is $0.50, each underlying alarm it references is also billed. A composite of 5 alarms = $0.50 + 5 × $0.10 = $1.00/month.
For most fleets, the alarm count grows organically. A service with auto-scaling alarms (4), error rate alarms (2), latency alarms (2), and per-dependency alarms (5+) hits 13 alarms = $1.30/month per service. Multiply by 50 services and you're at $65/month — small but adds up.
Anomaly Detection alarms cost the same as standard alarms ($0.10) but also include $0.30/month for the anomaly detection model. Useful for traffic patterns where a static threshold doesn't work.
c3x estimates CloudWatch alarms based on declared aws_cloudwatch_metric_alarm and aws_cloudwatch_composite_alarm resources, factoring in resolution tier.
Terraform example
A minimal but realistic configuration that C3X can estimate.
resource "aws_cloudwatch_metric_alarm" "high_cpu" {
alarm_name = "api-high-cpu"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 2
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = 60
statistic = "Average"
threshold = 80
dimensions = {
InstanceId = aws_instance.api.id
}
alarm_actions = [aws_sns_topic.alerts.arn]
}Pricing dimensions
What you actually pay for when you provision aws_cloudwatch_metric_alarm.
| Dimension | Unit | What's being charged |
|---|---|---|
| Standard resolution alarm | per alarm-month | Standard metric resolution alarms that evaluate every 60 seconds. $0.10/alarm-month |
| High resolution alarm | per alarm-month | Alarms on metrics published at 1-second resolution, evaluating every 10 seconds. Used for low-latency response requirements. $0.30/alarm-month |
| Composite alarm | per alarm-month | Alarm combining multiple underlying alarms via Boolean logic. Underlying alarms billed separately. $0.50/alarm-month plus underlying alarms |
| Anomaly detection model | per metric-month | ML-based anomaly detection that learns the metric's normal range. Charged separately from the alarm itself. $0.30/metric-month |
Optimization tips
Common ways to reduce aws_cloudwatch_metric_alarm cost without changing the workload.
Use composite alarms to reduce duplicate notifications
Instead of 10 alarms each paging on different sub-conditions, combine into a composite alarm that fires only when the overall service is unhealthy. Reduces alert fatigue more than cost, but does cut alarms when properly designed.
Avoid high-resolution alarms unless needed
$0.20/alarm-monthHigh-resolution alarms cost 3x standard. Use only where 60-second detection isn't fast enough (e.g. tight SLAs). Most operational alarms work fine at 60-second.
Audit and remove dead alarms
$0.10-$0.30 per removed alarmAlarms for retired services persist. Periodically (quarterly) audit alarms via aws cloudwatch describe-alarms and remove anything pointing at resources that no longer exist or services that have been decommissioned.
FAQ
Are alarms billed per evaluation or per month?
Per month. An alarm costs the same whether it evaluates once a minute or never breaches. The number of times it triggers also doesn't affect cost. Only the existence of the alarm bills.
Do CloudWatch alarms have a free tier?
Yes, 10 standard alarms per month are free in the AWS Free Tier (for new accounts). Beyond that, billing starts. The free tier is per account, not per region.
What's an anomaly detection alarm?
An alarm that uses ML to learn the normal range of a metric and triggers when actual values fall outside. Useful for metrics with daily/weekly patterns where a static threshold would either miss anomalies or false-alarm. Costs $0.30/month for the model on top of the $0.10 alarm fee.
Are SNS notifications billed separately?
Yes. When an alarm triggers, it sends to SNS or other targets. SNS billing is per-notification: $0.50 per 1M SMS, $0.075 per 1M email, varies for HTTPS endpoints. For an alarm that triggers 100 times/month with one SNS subscriber, the SNS cost is negligible.
Related resources
Estimate this resource in your own Terraform
Free, open source, no API key. C3X parses your Terraform and shows line-item cost for every resource, including aws_cloudwatch_metric_alarm.