CloudWatch 自动警报删除执行多次
Posted
技术标签:
【中文标题】CloudWatch 自动警报删除执行多次【英文标题】:CloudWatch auto alarm deletion executing multiple times 【发布时间】:2022-01-13 16:20:22 【问题描述】:我有一段在 AWS Lambda 函数中运行的 python 脚本,当 EC2 实例进入停止状态时删除 CloudWatch 警报。
elif 'source' in event and event['source'] == 'aws.ec2' and event['detail']['state'] == 'stopped':
instanceID = event['detail']['instance-id']
GetAlarmNamePrefix = "AutoAlarm-" + instanceID
print(GetAlarmNamePrefix)
for instance in instanceID:
print("deleting alarms for instance :" + instanceID)
AlarmNamePrefix = GetAlarmNamePrefix
response = cloudwatch.describe_alarms(AlarmNamePrefix=AlarmNamePrefix,)
alarm_list = []
if 'MetricAlarms' in response:
for alarm in response['MetricAlarms']:
alarm_name = alarm['AlarmName']
alarm_list.append(alarm_name)
print(alarm_list)
cloudwatch.delete_alarms(AlarmNames=alarm_list)
这段代码可以很好地删除警报,但是当我查看 CloudWatch 日志组中 Lambda 函数的执行日志时,我可以看到为同一个 CloudWatch 警报多次创建了大量事件。
请帮我修复此代码。
【问题讨论】:
【参考方案1】:看看这些行:
instanceID = event['detail']['instance-id']
GetAlarmNamePrefix = "AutoAlarm-" + instanceID
print(GetAlarmNamePrefix)
for instance in instanceID:
print("deleting alarms for instance :" + instanceID)
理论上,它会循环遍历每个实例。然而:
print()
语句正在打印 instanceID
而不是 instance
循环中的任何内容实际上都没有引用instance
事实上,instanceID
是一个包含一个实例 ID 的字符串,正如在打印 GetAlarmNamePrefix
时可以看到的那样。
因此,您可以删除for
循环。
可能会将多个事件传递给 Lambda 函数。但是,提取event
的代码部分未显示,因此我无法评论是否应该更改。
【讨论】:
感谢约翰的帮助。以上是关于CloudWatch 自动警报删除执行多次的主要内容,如果未能解决你的问题,请参考以下文章
通过 CDK 从 CfnDeliveryStream 获取 cloudwatch 警报的指标
我可以在不向 CloudWatch 仪表板添加警报的情况下定义具有扩展策略的 EC2 自动扩展组吗?
AWS Cloudwatch - 在 15 分钟的 lambda 超时时不发送警报邮件