1

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

这是我迄今为止尝试过的:

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)

不幸的是,它给了我这个错误:

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

我敢肯定这是我想念的简单的东西。

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

在此先感谢您的帮助!

4

1 回答 1

3

警报操作不会通过维度传递,而是作为属性添加到您正在使用的 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

于 2014-02-18T21:35:08.057 回答