Cor*_*iew 4 amazon-web-services amazon-sns amazon-route53 cloudwatch-alarms
我有一个 AWS bitnami 实例,当网站不可用时,我创建了 Route 53 运行状况检查警报。第一个操作成功触发并向我发送了一封电子邮件。但是,我还希望重新启动实例,尽管“添加 EC2”操作显示为灰色,并且显示为:“此操作仅适用于 EC2 每个实例指标”。我怎样才能添加这个?
是否与此相关:我的 EC2 实例位于爱尔兰可用区,但是当我在 Route 53 中的运行状况检查上创建警报和 SNS 主题时,它会自动在弗吉尼亚北部可用区创建它们。而且我似乎无权改变它的去向。
原解决方案:
您最好的做法是使用 CloudWatch Events。
您可以创建一条与 CloudWatch 警报状态更改事件上的警报相匹配的规则,并运行 EC2 实例重启 API 调用:
事件模式如下所示:
{
"source": [
"aws.cloudwatch"
],
"detail-type": [
"CloudWatch Alarm State Change"
],
"detail": {
"alarmName": ["YOUR_ROUTE53_ALARM_NAME"],
"previousState": {
"value": ["OK"]
},
"state": {
"value": ["ALARM"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
模式语法有点奇怪,您必须将单个字符串包装到数组中。YOUR_ROUTE53_ALARM_NAME此模式将匹配先前状态为OK且当前状态为 的警报的警报状态更改ALARM。
我将之前的状态添加到匹配中,因为我不知道警报是否会触发多次。没有它,你可能会陷入无限重启的循环恕我直言。
关于目标,我会让 CloudWatch Events 为您创建新角色。
更新的解决方案:(提问者由于原因需要单独的停止和开始调用)
您仍将使用 CloudWatch Events (CWE) 来检测警报中的更改。
那么你有两个选择:
使用 lambda 来处理单独的停止/启动,我建议:
stopInstances您的实例,实例状态将更改为stoppingwaitFor监听实例状态更改为stoppedstartInstances以再次启动您需要确保您的 Lambda 具有必要的 IAM 权限才能重新启动 EC2 实例。创建两个 CWE 规则
第二条规则匹配该实例状态更改并针对 EC2 StartInstances API 调用。
状态更改通知如下所示:
{
"id":"7bf73129-1428-4cd3-a780-95db273d1602",
"detail-type":"EC2 Instance State-change Notification",
"source":"aws.ec2",
"account":"123456789012",
"time":"2015-11-11T21:29:54Z",
"region":"us-east-1",
"resources":[
"arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"
],
"detail":{
"instance-id":"i-abcd1111",
"state":"stopped"
}
}
Run Code Online (Sandbox Code Playgroud)
state此解决方案的问题是状态更改通知除了和之外没有任何其他字段instance-id。您无法区分第一规则触发的关闭和正常关闭。每次关闭都会触发此规则并再次启动实例。
如果您想手动关闭实例,则必须禁用第二个 CWE 规则(可以启用/禁用规则),这样它就不会触发启动。这对您来说可能是一个合理的权衡。
顺便说一句,我想说,如果 EC2 重新启动还不够,那么您的实例就会出现问题。
| 归档时间: |
|
| 查看次数: |
1746 次 |
| 最近记录: |