如何使用boto设置终止EC2实例的警报?

时间:2014-02-18 19:43:50

标签: amazon-ec2 alarm boto terminate amazon-cloudwatch

我无法找到一个简单的示例,它向我展示了如何使用boto终止使用警报的Amazon EC2实例(不使用AutoScaling)。我希望在10分钟内终止CPU使用率低于1%的特定实例。

这是我到目前为止所尝试的内容:

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 ()得到了一个意外的关键字参数'alarm_actions'

我确信这很简单,我很遗憾。

另外,我没有使用CloudFormation,因此我无法使用AutoScaling功能。这是因为我不希望警报在整个组中使用度量标准,而只是针对特定实例,并且只终止该特定实例(而不是该组中的任何实例)。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分: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