Попытка отключить все тревоги 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 .