CloudFormation部署Route53健康检查报Invalid Request报错排查
问题根因
部署失败由三个配置错误共同导致:
- 参数传值类型不匹配:
AWS::Route53::HealthCheck资源的AlarmIdentifier.Name字段要求传入CloudWatch告警的名称字符串,但模板中使用!Ref rEventBusCwAlarm引用告警资源时,AWS::CloudWatch::Alarm类型资源的Ref返回值是告警的完整ARN,而非告警名称,传入ARN会被Route53直接判定为参数非法。 - 告警周期不满足服务约束:关联Route53健康检查的CloudWatch告警,周期必须为60秒及以上且为60的整数倍,模板中配置的
Period: 10不符合该要求。 - 告警缺少必填指标维度:
AWS/Events命名空间下的FailedInvocations指标必须携带EventBusName维度才能匹配到对应的监控数据,模板未配置维度,即使资源创建成功也无法正常工作。
修复后的参考模板
rEventBusCwAlarm: Type: AWS::CloudWatch::Alarm Properties: ActionsEnabled: FALSE AlarmDescription: Alarm that monitors the health of event busses in current region by counting Failed Invocations ComparisonOperator: GreaterThanThreshold EvaluationPeriods: 5 MetricName: FailedInvocations Namespace: AWS/Events Threshold: 10 Statistic: Sum Period: 60 # 调整为符合Route53要求的60秒周期 Dimensions: # 补充指标必填维度 - Name: EventBusName Value: default # 可替换为你实际需要监控的自定义事件总线名称 rEventBusHealthCheck: Type: AWS::Route53::HealthCheck Properties: HealthCheckConfig: Type: CLOUDWATCH_METRIC InsufficientDataHealthStatus: Healthy AlarmIdentifier: Name: !GetAtt rEventBusCwAlarm.AlarmName # 通过GetAtt获取告警名称,而非Ref返回的ARN Region: !Ref AWS::Region # 直接使用CloudFormation内置区域变量,保证和告警部署区域一致
内容的提问来源于stack exchange,提问作者Wilveren
相关产品推荐
相关产品推荐

