无法创建关联CloudWatch告警的Route 53健康检查问题咨询
问题场景
尝试创建Route53健康检查并关联CloudWatch告警,使用以下AWS CLI命令和配置:
CLI命令
aws route53 create-health-check --caller-reference cw-20240607 \ --health-check-config file://health_check_config.json
健康检查配置(health_check_config.json)
{ "Type": "HTTPS_STR_MATCH", "FullyQualifiedDomainName": "https://api.dev.somedomain.dev", "Port": 443, "ResourcePath": "/health", "SearchString": "\"status\":\"ok\"", "EnableSNI": true, "AlarmIdentifier": { "Name": "regen-api-health-check", "Region": "us-east-1" } }
遇到的错误
- 执行命令后触发的错误:
调用CreateHealthCheck操作时发生错误(InvalidInput):
无效参数:基础健康检查不得指定指标区域。
- 移除
AlarmIdentifier中的Region参数后触发的新错误:
参数验证失败:
HealthCheckConfig.AlarmIdentifier中缺少必填参数: "Region"
- 最初用CloudFormation实现时的模糊错误:
资源处理程序返回消息: "提供的请求无效: AWS::Route53::HealthCheck"
核心问题
- 基础健康检查与非基础健康检查的具体区别是什么?
- 如何配置健康检查以关联告警标识符,从而触发CloudWatch告警?
解答
1. 基础健康检查与非基础健康检查的区别
Route53健康检查分为两类:
- 基础健康检查:指仅由Route53自身探测节点执行的常规检查,涵盖HTTP/HTTPS/TCP/HTTP_STR_MATCH/HTTPS_STR_MATCH等标准类型。这类检查无法关联CloudWatch告警标识符,因为它不生成可联动的CloudWatch指标,完全依赖Route53的自有探测逻辑。
- 非基础健康检查:即基于CloudWatch告警的健康检查,这类检查不依赖Route53的直接探测,而是将CloudWatch告警的状态作为健康检查的判断依据,只有这类检查才能配置
AlarmIdentifier。
2. 配置可关联CloudWatch告警的健康检查
要实现健康检查状态联动CloudWatch告警,需遵循先建CloudWatch告警,再建对应Route53健康检查的逻辑,具体步骤如下:
步骤1:创建CloudWatch告警
先针对目标服务的可用性指标(比如自定义健康指标、EC2/ELB的系统指标)创建CloudWatch告警,设置触发阈值(如健康接口返回非200状态时),当指标触发阈值时,告警状态转为ALARM。
步骤2:创建基于CloudWatch告警的Route53健康检查
此时健康检查的Type必须设为CLOUDWATCH_METRIC,并正确配置AlarmIdentifier。示例配置如下:
{ "Type": "CLOUDWATCH_METRIC", "AlarmIdentifier": { "Name": "regen-api-health-check", "Region": "us-east-1" }, "InsufficientDataHealthStatus": "Unhealthy" }
说明:
InsufficientDataHealthStatus用于指定当CloudWatch告警处于INSUFFICIENT_DATA状态时,Route53应将该健康检查标记为何种状态,可选值为Healthy/Unhealthy/LastKnownStatus。
替代方案:常规健康检查触发CloudWatch告警
如果需要保留Route53自身的探测逻辑(比如HTTPS_STR_MATCH内容检查),同时在探测失败时触发CloudWatch告警,可按以下方式操作:
- 创建常规Route53健康检查(不含
AlarmIdentifier); - 在CloudWatch中找到该健康检查对应的指标(命名空间为
AWS/Route53,指标名为HealthCheckStatus); - 基于该指标创建CloudWatch告警,当指标值为
0(代表健康检查失败)时触发告警。
CloudFormation模糊错误排查方向
出现Invalid request provided: AWS::Route53::HealthCheck错误时,可从以下几点排查:
- 检查是否混用了基础健康检查参数与
AlarmIdentifier; - 确认
Type为CLOUDWATCH_METRIC时,是否正确填写了AlarmIdentifier的Name和Region; - 修正参数格式错误,比如
FullyQualifiedDomainName不应包含协议前缀(你的配置中写了https://api.dev.somedomain.dev,正确写法应为api.dev.somedomain.dev)。
内容的提问来源于stack exchange,提问作者Clark

