Могу ли я использовать boto, чтобы добавить "ok_action" к существующему будильнику cloudwatch без создания нового будильника?
У меня есть 700 предупреждений CloudWatch, которые мои пользователи создали без действий в "OKActions", что означает, что они не разрешаются самостоятельно.
Они уже в продукт, поэтому я не решаюсь удалить \ переместить \ и т.д.
В консоли AWS я могу просто добавить новое действие. Однако я не могу найти такое действие в документах для Бото:
can_paginate()
delete_alarms()
delete_dashboards()
describe_alarm_history()
describe_alarms()
describe_alarms_for_metric()
disable_alarm_actions()
enable_alarm_actions()
generate_presigned_url()
get_dashboard()
get_metric_data()
get_metric_statistics()
get_metric_widget_image()
get_paginator()
get_waiter()
list_dashboards()
list_metrics()
put_dashboard()
put_metric_alarm()
put_metric_data()
set_alarm_state()
Могу ли я использовать boto, чтобы добавить "ok_action" к существующему будильнику cloudwatch без создания нового будильника?
AWS cli? Какие-то другие средства автоматизации?
3 ответа
Ответ Амазонки:
tl; dr: нет хорошего способа сделать это.
Привет,
Благодарим Вас за обращение в службу поддержки AWS Premium. Меня зовут Сонал, и я буду помогать вам с этим делом.
Я понимаю, что вы хотели бы добавить действие OK к существующим аварийным сигналам, не изменяя ничего в конфигурации аварийных сигналов. Поскольку вам нужно добавить это действие ко всем вашим сигналам тревоги, вы ищете способ сделать этот пользовательский сценарий.
"PutMetricAlarm" - единственный API, используемый как для создания, так и для обновления тревоги. Обратите внимание, что при обновлении существующего сигнала тревоги с использованием API "PutMetricAlarm" обновление полностью перезаписывает предыдущую конфигурацию сигнала тревоги. Это означает, что вы должны указать все параметры существующего аварийного сигнала вместе с параметрами, которые вы хотите изменить.
Таким образом, чтобы изменить существующие сигналы тревоги, ваш пользовательский сценарий должен будет сделать следующее: -> Получить список всех сигналов тревоги, которые будут обновлены. Вы можете использовать API "DescribeAlarms" [1] -> Вы можете проанализировать список аварийных сигналов, извлечь необходимые параметры -> Используйте вышеупомянутые параметры, чтобы сделать вызов API "PutMetricAlarm" [2] вместе с параметром OKActions.
Обратите внимание, что предоставление фактического кода для развертывания этих решений для вашей конкретной среды выходит за рамки поддержки AWS, но, конечно, мы сможем помочь вам в этом процессе, если у вас возникнут какие-либо проблемы.
Поэтому мне пришлось сделать что-то подобное с параметром «AlarmActions» в boto3. Я изменю свой код на вымышленный параметр OKActions. Приведенная ниже функция — это не совсем то, что я написал, но я упростил ее для ясности.
def change_alarm_ok_action(cloudwatch_client, alarm):
new_ok_action = 'arn:aws-us-east-1:blah:blah:new_ok_action'
new_alarm_dict = alarm
new_alarm_dict['OKActions'] = [new_ok_action]
#when I ran the code, it gave me an error that a bunch of parameters I had in my alarm
#were not allowed,
#so I went down the list of the parameters it told me to remove and popped them.
#you may need to do the same.
new_alarm_dict.pop('AlarmArn', None)
new_alarm_dict.pop('StateValue', None)
new_alarm_dict.pop('StateReason', None)
new_alarm_dict.pop('StateReasonData', None)
new_alarm_dict.pop('StateUpdatedTimestamp', None)
new_alarm_dict.pop('AlarmConfigurationUpdatedTimestamp', None)
#here is where I then used the put_metric_alarm() command
#because the command only takes kwargs, I had to change my dict into kwargs
#luckily python has an easy way to do this
cloudwatch_client.put_metric_alarm(**new_alarm_dict)
если вы вернетесь и распечатаете свой будильник, вы получите новый OKAction.
{'ActionsEnabled': True,
'AlarmActions': ['arn:us-east-1:blah:blah'],
'AlarmDescription': 'CPU_Utilization_instance:blah',
'AlarmName': 'CPU_Utilization_instance:blah',
'ComparisonOperator': 'GreaterThanOrEqualToThreshold',
'DatapointsToAlarm': 3,
'Dimensions': [{'Name': 'InstanceId', 'Value': 'blah'}],
'EvaluationPeriods': 3,
'InsufficientDataActions': [],
'MetricName': 'CPUUtilization',
'Namespace': 'AWS/EC2',
'OKActions': ['arn:aws-us-east-1:blah:blah:new_ok_action'],
'Period': 300,
'Statistic': 'Average',
'Threshold': 80.0,
'TreatMissingData': 'missing'}
Использовать put_metric_alarm
с бото3. Я добавлю пример кода, когда у меня будет несколько минут, ниже приведена ссылка на CLI.
НОТА!!
Когда вы обновляете существующий сигнал тревоги, его состояние остается неизменным, но обновление полностью перезаписывает предыдущую конфигурацию сигнала тревоги.
Я подтвердил, что это то же самое действие при использовании инструментов командной строки.
До:
{
"AlarmName": "CPU_High",
"AlarmArn": "arn:aws:cloudwatch:us-east-1:<redacted>:alarm:CPU_High",
"AlarmDescription": "Check for High CPU usage",
"AlarmConfigurationUpdatedTimestamp": "2019-02-04T17:53:54.236Z",
"ActionsEnabled": true,
"OKActions": [],
"AlarmActions": [
"arn:aws:sns:us-east-1:<redacted>:<redacted>"
],
<deleted non-pertinent info>
}
Команда CLI:
aws cloudwatch put-metric-alarm --alarm-name "CPU_High" --metric-name "CPUUtilization" --period 300 --ok-actions "arn:aws:sns:us-east-1:<redacted>:<redacted>" --evaluation-periods 1 --threshold 99.0 --comparison-operator "GreaterThanOrEqualToThreshold" --namespace "AWS/EC2" --statistic "Average"
После:
{
"AlarmName": "CPU_High",
"AlarmArn": "arn:aws:cloudwatch:us-east-1:<redacted>:alarm:CPU_High",
"AlarmConfigurationUpdatedTimestamp": "2019-02-04T18:05:02.592Z",
"ActionsEnabled": true,
"OKActions": [
"arn:aws:sns:us-east-1:<redacted>:<redacted>"
],
"AlarmActions": [],
<deleted non-pertinent info>
}
От поддержки AWS
Привет,
Благодарим Вас за обращение в службу поддержки AWS Premium. Меня зовут Сонал, и я буду помогать вам с этим делом.
Я понимаю, что вы хотели бы добавить действие OK к существующим аварийным сигналам, не изменяя ничего в конфигурации аварийных сигналов. Поскольку вам нужно добавить это действие ко всем вашим сигналам тревоги, вы ищете способ сделать этот пользовательский сценарий.
"PutMetricAlarm" - единственный API, используемый как для создания, так и для обновления тревоги. Обратите внимание, что при обновлении существующего сигнала тревоги с использованием API "PutMetricAlarm" обновление полностью перезаписывает предыдущую конфигурацию сигнала тревоги. Это означает, что вы должны указать все параметры существующего аварийного сигнала вместе с параметрами, которые вы хотите изменить.
Таким образом, чтобы изменить существующие сигналы тревоги, ваш пользовательский сценарий должен будет сделать следующее: -> Получить список всех сигналов тревоги, которые будут обновлены. Вы можете использовать API "DescribeAlarms" 1 -> Вы можете анализировать список аварийных сигналов, извлекать необходимые параметры -> Используйте вышеупомянутые параметры, чтобы вызвать API "PutMetricAlarm" [2] вместе с параметром OKActions.
Обратите внимание, что предоставление фактического кода для развертывания этих решений для вашей конкретной среды выходит за рамки поддержки AWS, но, конечно, мы сможем помочь вам в этом процессе, если у вас возникнут какие-либо проблемы.
Ссылка:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudwatch.html