Попытка отключить все тревоги Cloud Watch за один раз

Моя организация планирует период обслуживания в течение следующих 5 часов. В течение этого времени я не хочу, чтобы Cloud Watch запускал сигналы тревоги и отправлял уведомления.

Ранее, когда мне пришлось отключить 4 сигнала тревоги, я написал следующий код в AWS Lambda. Это работало нормально.

import boto3
import collections

client = boto3.client('cloudwatch')

def lambda_handler(event, context):
    response = client.disable_alarm_actions(
    AlarmNames=[
        'CRITICAL - StatusCheckFailed for Instance 456',
        'CRITICAL - StatusCheckFailed for Instance 345',
        'CRITICAL - StatusCheckFailed for Instance 234',
        'CRITICAL - StatusCheckFailed for Instance 123'
    ]
)

Но теперь меня попросили отключить все тревоги, число которых 361. Таким образом, включение всех этих имен заняло бы много времени.

Пожалуйста, дайте мне знать, что я должен делать сейчас?

2 ответа

Использование describe_alarms() чтобы получить их список, затем выполните итерацию и отключите их:

import boto3
client = boto3.client('cloudwatch')

response = client.describe_alarms()

names = [[alarm['AlarmName'] for alarm in response['MetricAlarms']]]
disable_response = client.disable_alarm_actions(names)

Возможно, вы захотите, чтобы какая-то логика вокруг имени тревоги отключала только определенные тревоги.

Если у вас нет конкретных сигналов тревоги, вы можете использовать логику из предыдущего ответа. Если у вас есть определенный список арнов, которые вы хотите отключить, вы можете получить имена, используя это:

      def get_alarm_names(alarm_arns):
    names = []
    response = client.describe_alarms()
    for i in response['MetricAlarms']:
      if i['AlarmArn'] in alarm_arns:
        names.append(i['AlarmName'])
    return names

Вот полное руководство: https://medium.com/geekculture/terraform-structure-for-enabling-disabling-alarms-in-batches-5c4f165a8db7 .

Другие вопросы по тегам