如何在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
相关产品推荐
相关产品推荐

