如何使用 CF 正确配置 Route53 HealthCheck 警报(在悉尼)
How to correctly configure Route53 HealthCheck Alarm with CF (in Sydney)
我已经为 Route53 健康检查配置了一个与 CloudFormation 关联的警报,但生成的健康检查显示没有配置任何警报,并且 CloudWatch 控制台中的警报仍然无效。如果我在 HealthChecks 中手动创建警报,一切正常。
更糟糕的是,如果我从悉尼/ap-southeast-2
切换到北弗吉尼亚/us-east-1
并创建相同的云形成堆栈,则警报与健康检查正确关联并且一切正常!
另一个数据点:在 Route53 HealthChecks 中手动创建警报时,警报是在 us-east-1
中创建的,尽管 Route53 是全局的并且 ap-southeast-1
是所有其他控制台中的默认值。
我的简化堆栈如下所示:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "healthcheck alarm test",
"Resources": {
"StatusHealthCheck": {
"Type": "AWS::Route53::HealthCheck",
"Properties": {
"HealthCheckConfig": {
"Port": "80",
"Type": "HTTP",
"ResourcePath": "/status",
"FullyQualifiedDomainName": "testdomain.com",
"RequestInterval": "30",
"FailureThreshold": "1"
},
"HealthCheckTags": [
{
"Key": "Name",
"Value": "status reachability check"
}
]
}
},
"StatusHealthCheckFailedAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"ActionsEnabled": "true",
"AlarmDescription": "alarmed when status doesn't respond",
"ComparisonOperator": "LessThanThreshold",
"EvaluationPeriods": "1",
"MetricName": "HealthCheckStatus",
"Namespace": "AWS/Route53",
"Period": "60",
"Statistic": "Minimum",
"Threshold": "1.0",
"Dimensions": [
{
"Name": "HealthCheckId",
"Value": {
"Ref": "StatusHealthCheck"
}
}
]
}
}
}
}
有什么理由它应该在北弗吉尼亚州工作而不是在悉尼吗?
HealthCheck 生成的 CloudWatch 指标仅在美国东部地区可见,如本页底部所述http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-monitor-view-status.html。这就是为什么您的堆栈在 us-east-1 中创建时可以正常工作的原因。
该任务只能使用 lamba 函数来实现,因为:
- 只能在地区创建健康检查警报:us-east-1
- CloudFormation 堆栈管理的资源只能驻留在与堆栈本身相同的区域中
这意味着,仅使用纯 CloudFormation 语法是不可能的。
您可以像这样使用 lambda 函数创建警报:
https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/cloudwatch-examples-creating-alarms.html#cloudwatch-examples-creating-alarms-putmetricalarm
我已经为 Route53 健康检查配置了一个与 CloudFormation 关联的警报,但生成的健康检查显示没有配置任何警报,并且 CloudWatch 控制台中的警报仍然无效。如果我在 HealthChecks 中手动创建警报,一切正常。
更糟糕的是,如果我从悉尼/ap-southeast-2
切换到北弗吉尼亚/us-east-1
并创建相同的云形成堆栈,则警报与健康检查正确关联并且一切正常!
另一个数据点:在 Route53 HealthChecks 中手动创建警报时,警报是在 us-east-1
中创建的,尽管 Route53 是全局的并且 ap-southeast-1
是所有其他控制台中的默认值。
我的简化堆栈如下所示:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "healthcheck alarm test",
"Resources": {
"StatusHealthCheck": {
"Type": "AWS::Route53::HealthCheck",
"Properties": {
"HealthCheckConfig": {
"Port": "80",
"Type": "HTTP",
"ResourcePath": "/status",
"FullyQualifiedDomainName": "testdomain.com",
"RequestInterval": "30",
"FailureThreshold": "1"
},
"HealthCheckTags": [
{
"Key": "Name",
"Value": "status reachability check"
}
]
}
},
"StatusHealthCheckFailedAlarm": {
"Type": "AWS::CloudWatch::Alarm",
"Properties": {
"ActionsEnabled": "true",
"AlarmDescription": "alarmed when status doesn't respond",
"ComparisonOperator": "LessThanThreshold",
"EvaluationPeriods": "1",
"MetricName": "HealthCheckStatus",
"Namespace": "AWS/Route53",
"Period": "60",
"Statistic": "Minimum",
"Threshold": "1.0",
"Dimensions": [
{
"Name": "HealthCheckId",
"Value": {
"Ref": "StatusHealthCheck"
}
}
]
}
}
}
}
有什么理由它应该在北弗吉尼亚州工作而不是在悉尼吗?
HealthCheck 生成的 CloudWatch 指标仅在美国东部地区可见,如本页底部所述http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-monitor-view-status.html。这就是为什么您的堆栈在 us-east-1 中创建时可以正常工作的原因。
该任务只能使用 lamba 函数来实现,因为:
- 只能在地区创建健康检查警报:us-east-1
- CloudFormation 堆栈管理的资源只能驻留在与堆栈本身相同的区域中
这意味着,仅使用纯 CloudFormation 语法是不可能的。
您可以像这样使用 lambda 函数创建警报: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/cloudwatch-examples-creating-alarms.html#cloudwatch-examples-creating-alarms-putmetricalarm