我无法找到一个简单的示例,它向我展示了如何使用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功能。这是因为我不希望警报在整个组中使用度量标准,而只是针对特定实例,并且只终止该特定实例(而不是该组中的任何实例)。
提前感谢您的帮助!
答案 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