多次执行 CloudWatch 自动删除报警
CloudWatch auto alarm deletion executing multiple times
我在 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 警报创建了大量事件。
请帮助我修复此代码。
看看这些行:
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
是一个字符串,包含一个Instance ID,打印时可以看到GetAlarmNamePrefix
。
因此,您可以删除 for
循环。
可能有多个事件被传递到 Lambda 函数。但是,您的代码中提取 event
的部分未显示,因此我无法评论是否应更改它。
我在 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 警报创建了大量事件。
请帮助我修复此代码。
看看这些行:
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
是一个字符串,包含一个Instance ID,打印时可以看到GetAlarmNamePrefix
。
因此,您可以删除 for
循环。
可能有多个事件被传递到 Lambda 函数。但是,您的代码中提取 event
的部分未显示,因此我无法评论是否应更改它。