2014-02-18 2 views
1

Мне не удалось найти простой пример, который показывает мне, как использовать boto для завершения экземпляра Amazon EC2 с помощью будильника (без использования AutoScaling). Я хочу прервать конкретный экземпляр с загрузкой процессора менее 1% в течение 10 минут.Как установить будильник для завершения экземпляра EC2 с помощью boto?

Вот что я пытался до сих пор:

import boto.ec2 
import boto.ec2.cloudwatch 
from boto.ec2.cloudwatch import MetricAlarm 

conn = boto.ec2.connect_to_region("us-east-1", aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY) 
cw = boto.ec2.cloudwatch.connect_to_region("us-east-1", aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY) 

reservations = conn.get_all_instances() 
for r in reservations: 
    for inst in r.instances: 
     alarm = boto.ec2.cloudwatch.MetricAlarm(name='TestAlarm', description='This is a test alarm.', namespace='AWS/EC2', metric='CPUUtilization', statistic='Average', comparison='<=', threshold=1, period=300, evaluation_periods=2, dimensions={'InstanceId':[inst.id]}, alarm_actions=['arn:aws:automate:us-east-1:ec2:terminate']) 
     cw.put_metric_alarm(alarm) 

К сожалению, это дает мне эту ошибку:

dimensions={'InstanceId':[inst.id]}, alarm_actions=['arn:aws:automate:us-east-1:ec2:terminate']) TypeError: init() got an unexpected keyword argument 'alarm_actions'

я уверен, что это что-то простое, что я пропускаю.

Кроме того, я не использую CloudFormation, поэтому я не могу использовать функцию AutoScaling. Это связано с тем, что я не хочу, чтобы будильник использовал метрику по всей группе, а только для конкретного экземпляра, и только завершал этот конкретный экземпляр (а не какой-либо экземпляр в этой группе).

Заранее благодарим за вашу помощь!

ответ

1

Действия тревоги не передаются по измерениям, а скорее добавляются как атрибут объекта MetricAlarm, который вы используете. В вашем коде, вам нужно сделать следующее:

alarm = boto.ec2.cloudwatch.MetricAlarm(name='TestAlarm', description='This is a test alarm.', namespace='AWS/EC2', metric='CPUUtilization', statistic='Average', comparison='<=', threshold=1, period=300, evaluation_periods=2, dimensions={'InstanceId':[inst.id]}) 
alarm.add_alarm_action('arn:aws:automate:us-east-1:ec2:terminate') 
cw.put_metric_alarm(alarm) 

Вы также можете увидеть в Boto документации здесь:

http://docs.pythonboto.org/en/latest/ref/cloudwatch.html#module-boto.ec2.cloudwatch.alarm

+0

Сейчас я получаю сообщение об ошибке: 'cw.put_metric_alarm (сигнализация) Файл "/usr/lib/python2.6/site-packages/boto-2.0-py2.6.egg/boto/ec2/cloudwatch/__init__.py", строка 545, в put_metric_alarm 'Dimensions.member.% S .% s ') Файл «/usr/lib/python2.6/site-packages/boto-2.0-py2.6.egg/boto/ec2/cloudwatch/__init__.py», строка 237, в файле build_list_params params [label% i] = item TypeError: недостаточно аргументов для строки формата' – Chewy734

+0

Оказывается, я использовал boto 2.0, которая не является последней версией. Как только я обновился до версии 2.25.0, он отлично работал, используя то, как я это сделал. Спасибо хоть! – Chewy734

+0

Итак, работает ли мой ответ? – Rico