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

Terraform配置AWS Canary告警无邮件通知问题求助

解决AWS Canary失败时CloudWatch告警不触发的问题

你的核心问题出在CloudWatch告警的指标命名空间配置错误,另外还有指标选择、周期匹配的细节需要调整,以下是具体修正方案:

1. 核心错误:错误的CloudWatch指标命名空间

你当前配置的namespace = "AWS/Lambda"是错误的,Synthetics Canary的监控指标属于AWS/Synthetics命名空间,这直接导致告警无法找到对应指标,自然不会触发。

2. 修正后的CloudWatch告警配置

结合Canary的调度频率(5分钟一次),调整指标名称、周期等参数,确保告警逻辑匹配实际场景:

resource "aws_cloudwatch_metric_alarm" "my-alarm" {
  alarm_name                = "my-canary-alarm"
  comparison_operator       = "GreaterThanOrEqualToThreshold"
  evaluation_periods        = 1  # 连续1次失败即触发告警,可按需调整
  metric_name               = "Failed"  # 使用Canary原生的Failed指标,统计失败次数
  namespace                 = "AWS/Synthetics"  # 修正为正确的命名空间
  period                    = 300  # 和Canary的5分钟调度周期保持一致
  statistic                 = "Sum"
  threshold                 = 1
  alarm_description         = "This alarm fires if the canary fails"
  insufficient_data_actions = []
  alarm_actions             = [aws_sns_topic.my-topic.arn]

  dimensions = {
    CanaryName = aws_synthetics_canary.my-api-canary.name  # 引用资源属性,避免硬编码
  }
}

3. 补充必要的SNS主题权限

需要确保CloudWatch有权限向你的SNS主题发送告警消息,添加以下SNS主题策略:

resource "aws_sns_topic_policy" "my-topic-policy" {
  arn    = aws_sns_topic.my-topic.arn
  policy = jsonencode({
    Version = "2012-10-17"
    Id      = "AllowCloudWatchAlarmsPublish"
    Statement = [
      {
        Effect    = "Allow"
        Principal = {
          Service = "cloudwatch.amazonaws.com"
        }
        Action   = "sns:Publish"
        Resource = aws_sns_topic.my-topic.arn
      }
    ]
  })
}

4. 额外验证步骤

  • 登录CloudWatch控制台,进入AWS/Synthetics命名空间,查看你的Canary的Failed指标是否在失败时产生数值;
  • 确认Canary执行角色包含cloudwatch:PutMetricData权限(确保指标能正常上报);
  • 测试告警:手动触发Canary失败,观察CloudWatch告警状态是否切换为ALARM,同时检查SNS主题的消息记录。

内容的提问来源于stack exchange,提问作者Jaco Van Niekerk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:12:20