You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中如何为Cloudwatch Synthetics Canary创建关联的Cloudwatch Metric Alarm

问题

我已经用Terraform创建了一个Synthetics Canary资源,代码如下:

resource "aws_synthetics_canary" "some" {
  name                = "some-canary"
  artifact_s3_location = "s3://some-bucket/"
  execution_role_arn  = "some-role"
  handler             = "exports.handler"
  zip_file            = "test-fixtures/lambdatest.zip"
  runtime_version     = "syn-1.0"
  schedule {
    expression = "rate(0 minute)"
  }
}

现在想给这个Canary配置CloudWatch告警,但在aws_cloudwatch_metric_alarm资源里找不到类似AWS控制台里的CanaryName直接关联参数,当前我的告警配置是针对EC2的,显然不对:

resource "aws_cloudwatch_metric_alarm" "foobar" {
  alarm_name          = "terraform-test-foobar5"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods  = "2"
  metric_name         = "CPUUtilization"
  namespace           = "AWS/EC2"
  period              = "120"
  statistic           = "Average"
  threshold           = "80"
  alarm_description   = "This metric monitors ec2 cpu utilization"
  insufficient_data_actions = []
}

我已经确认CloudWatchSynthetics命名空间可用,请问该怎么配置才能关联到我的Canary?


解决方案

其实Terraform的aws_cloudwatch_metric_alarm是通过**维度(dimensions)**来关联特定Canary的,不需要专门的CanaryName参数,你只需要调整几个配置项就行:

1. 切换到正确的指标命名空间

把namespace从AWS/EC2改成CloudWatchSynthetics,这是Synthetics Canary指标所属的专属命名空间。

2. 添加Canary关联维度

在告警资源里加上dimensions块,指定CanaryName为你的Canary名称,推荐直接引用Terraform资源的属性,避免硬编码带来的维护问题:

dimensions = {
  CanaryName = aws_synthetics_canary.some.name
}

3. 选择合适的Synthetics指标

Canary的核心监控指标不是CPUUtilization,而是比如SuccessPercent(执行成功率)、Failed(失败次数)、Duration(单次执行时长)这类业务相关指标,你可以根据监控需求选择。比如要监控Canary执行成功率过低的情况,就用SuccessPercent。

完整的告警配置示例

这里给你一个关联到上述Canary的告警示例,当Canary成功率低于90%且持续2个周期时触发告警:

resource "aws_cloudwatch_metric_alarm" "canary_success_alarm" {
  alarm_name          = "some-canary-success-alarm"
  comparison_operator = "LessThanThreshold"
  evaluation_periods  = 2
  metric_name         = "SuccessPercent"
  namespace           = "CloudWatchSynthetics"
  period              = 60
  statistic           = "Average"
  threshold           = 90
  alarm_description   = "告警:Canary执行成功率低于90%"
  insufficient_data_actions = []

  # 关联到你的Canary资源
  dimensions = {
    CanaryName = aws_synthetics_canary.some.name
  }
}

这样配置后,这个告警就会精准关联到你创建的some-canary资源,和控制台里选择CanaryName的效果完全一致。


内容的提问来源于stack exchange,提问作者Sandro_V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:07:35