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

如何在Terraform中为ECS目标追踪的App Auto Scaling策略附加SNS通知

如何为AWS自动创建的ECS Target Tracking告警附加CloudWatch SNS通知

当然可以!不过因为这些告警是AWS自动为Target Tracking扩缩容策略生成的,没法直接在aws_appautoscaling_policy资源里配置通知,我们需要用Terraform的数据源先定位到这些自动创建的告警,再通过专门的资源给它们添加SNS通知动作。下面是具体的实现方案:

具体实现步骤

1. 用数据源定位自动生成的告警

AWS自动创建的告警命名遵循固定格式:TargetTracking-service/<集群名>/<服务名>-AlarmHigh-<随机GUID>(扩容触发)和TargetTracking-service/<集群名>/<服务名>-AlarmLow-<随机GUID>(缩容触发)。我们可以通过name_prefix匹配规则来获取这两个告警:

# 获取触发扩容的高阈值告警
data "aws_cloudwatch_metric_alarm" "ecs_scale_up_alarm" {
  name_prefix = "TargetTracking-service/${var.clustername}/${var.servicename}-AlarmHigh-"
  depends_on  = [aws_appautoscaling_policy.ecs_scale-memory]
}

# 获取触发缩容的低阈值告警
data "aws_cloudwatch_metric_alarm" "ecs_scale_down_alarm" {
  name_prefix = "TargetTracking-service/${var.clustername}/${var.servicename}-AlarmLow-"
  depends_on  = [aws_appautoscaling_policy.ecs_scale-memory]
}

添加depends_on是为了确保Terraform在App Autoscaling策略创建完成、AWS生成告警之后,再去查询这些告警资源。

2. 为告警绑定SNS通知动作

使用aws_cloudwatch_alarm_action资源,将你的SNS主题ARN关联到这两个告警上,当告警触发时就会自动发送通知:

# 为扩容告警添加SNS通知
resource "aws_cloudwatch_alarm_action" "ecs_scale_up_alarm_sns" {
  alarm_name    = data.aws_cloudwatch_metric_alarm.ecs_scale_up_alarm.name
  alarm_actions = [var.sns_topic_arn]
}

# 为缩容告警添加SNS通知
resource "aws_cloudwatch_alarm_action" "ecs_scale_down_alarm_sns" {
  alarm_name    = data.aws_cloudwatch_metric_alarm.ecs_scale_down_alarm.name
  alarm_actions = [var.sns_topic_arn]
}

3. 权限注意事项

确保执行Terraform的IAM角色具备以下权限:

  • cloudwatch:DescribeAlarms:用于查询自动生成的告警信息
  • cloudwatch:PutAlarmActions:用于给告警添加SNS通知动作

把这些代码整合到你现有的Terraform配置中,执行terraform apply就能完成配置,之后当ECS服务触发扩缩容告警时,就会自动向你的SNS主题发送通知了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:57:07