Boto / Cloudwatch восстанавливает аварийный сигнал экземпляра

Я бился головой о стену, пытаясь заставить это работать. Я пытаюсь использовать python/boto для создания сигнала тревоги cloutwatch, который восстанавливает неисправный экземпляр ec2. У меня возникли трудности с работой действия ec2:RecoverInstance. Я подозреваю, что моя тема настроена неправильно.

topics = sns_conn.get_all_topics()

topic = topics[u'ListTopicsResponse']['ListTopicsResult']['Topics'][0]['TopicArn']

# arn:aws:sns:us-east-1:*********:CloudWatch

status_check_failed_alarm = boto.ec2.cloudwatch.alarm.MetricAlarm(
         connection=cw_conn,
         name=_INSTANCE_NAME + "RECOVERY-High-Status-Check-Failed-Any",
         metric='StatusCheckFailed',
         namespace='AWS/EC2',
         statistic='Average',
         comparison='>=',
         description='status check for %s %s' % (_INSTANCE, _INSTANCE_NAME),
         threshold=1.0,
         period=60,
         evaluation_periods=5,
         dimensions={'InstanceId': _INSTANCE},
         # alarm_actions = [topic],
         ok_actions=[topic],
         insufficient_data_actions=[topic])

# status_check_failed_alarm.add_alarm_action('arn:aws:sns:us-east-1:<acct#>:ec2:recover')
# status_check_failed_alarm.add_alarm_action('arn:aws:sns:us-east-1:<acct#>:ec2:RecoverInstances')
status_check_failed_alarm.add_alarm_action('ec2:RecoverInstances')

cw_conn.put_metric_alarm(status_check_failed_alarm)

Любые предложения будут высоко оценены.

Спасибо.

--Майк


person Michael Bogucki    schedule 06.12.2016    source источник
comment
Где определяется topic. Вы можете запросить все темы, например. sns = connect_to_region(...); topics = sns.get_all_topics() или просто найдите SNS ARN в консоли управления AWS. Это должно выглядеть как arn:aws:sns:<region>:<account>:<name>.   -  person AChampion    schedule 06.12.2016
comment
Привет, AChampion. Я обновил свой код, чтобы показать часть поиска тем.   -  person Michael Bogucki    schedule 06.12.2016


Ответы (1)


Я думаю, проблема в том, что эти действия по тревоге не имеют <acct> в arn. ссылка на cli документирует действительный arnс:

Допустимые значения: arn:aws:automate:region:ec2:stop | arn:aws:automate:регион:ec2:terminate | arn:aws:automate:регион:ec2:recover

Я думаю, что проще взять метрику из AWS и создать на ее основе сигнал тревоги, чем пытаться создать ее с нуля, например. (непроверенный код):

topics = sns_conn.get_all_topics()
topic = topics[u'ListTopicsResponse']['ListTopicsResult']['Topics'][0]['TopicArn']

metric = cloudwatch_conn.list_metrics(dimensions={'InstanceId': _INSTANCE},
                                      metric_name="StatusCheckFailed")[0]
alarm = metric.create_alarm(name=_INSTANCE_NAME + "RECOVERY-High-Status-Check-Failed-Any",
                            description='status check for {} {}'.format(_INSTANCE, _INSTANCE_NAME),
                            alarm_actions=[topic, 'arn:aws:automate:us-east-1:ec2:recover'],
                            ok_actions=[topic],
                            insufficient_data_actions=[topic],
                            statistic='Average',
                            comparison='>=',
                            threshold=1.0,
                            period=60,
                            evaluation_periods=5)
person AChampion    schedule 06.12.2016
comment
Привет, AChampion! Большое спасибо.... Это, безусловно, намного проще и отлично работает. - person Michael Bogucki; 07.12.2016