多次执行 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 的部分未显示,因此我无法评论是否应更改它。