2016-12-06 5 views
0

나는이 일을하려고 벽에 머리를 세게 치고있었습니다. python/boto를 사용하여 실패한 ec2 인스턴스를 복구하는 cloutwatch 경보를 생성하려고합니다. ec2 : RecoverInstance 작업을 수행하는 데 문제가 있습니다. 내 주제가 올바르게 설정되지 않은 것 같습니다.Boto/Cloudwatch 인스턴스 알람 복구

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) 

모든 의견을 보내 주시면 감사하겠습니다.

감사합니다. --MIke

+1

여기서'topic'은 정의되어 있습니다. 모든 주제를 쿼리 할 수 ​​있습니다 (예 : 'sns = connect_to_region (...); topics = sns.get_all_topics()'또는 AWS 관리 콘솔에서 SNS ARN을 찾으십시오. 'arn : aws : sns : : : '과 같이 보일 것입니다. – AChampion

+0

안녕하세요 AChampion - 주제 검색 부분을 표시하도록 코드를 업데이트했습니다. –

답변

0

나는 문제가이 알람 행동이 arn<acct>이없는 생각합니다.

유효한 값 : ARN : AWS : 자동화 : 지역 : EC2 다음 cli reference은 유효 arn들 문서화 중지 | arn : aws : 자동화 : 영역 : ec2 : 종료 | ARN : AWS는 : 지역 : EC2를 : 자동화

내가이, 예를 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) 
+0

안녕하세요, AChampion 대단히 감사합니다 .... 확실히 훨씬 쉽고 완벽하게 작동합니다. –