我有几个EC2竞价请求,可以在价格合适时启动EC2实例。我希望将生成的实例标记为Name
和,Role
以便我的配置管理工具知道它是哪种机器。
更新:
我接受了Hyper Anthony的建议并将其实施-因为轮询将容易出错并且占用大量资源,所以我向AMI添加了一个启动脚本,该脚本在实例启动时会更新标签,这是我采取的步骤:
确保在您正在使用的任何AMI上安装Boto
pip install boto
将IAM角色分配给EC2实例
您正在启动的实例必须具有某种方式来访问有关竞价请求的信息。使用IAM角色,或者使访问密钥可用于您的实例。我对使用的IAM角色附加的策略是:
{
"Statement": [
{
"Action": [
"ec2:CreateTags",
"ec2:DescribeTags",
"ec2:DescribeInstances"
],
"Effect": "Allow",
"Resource": [
"*"
],
"Sid": "Stmt1432737176000"
}
],
"Version": "2012-10-17"
}
在启动时运行脚本以更新标签
def get_tags_from_spot_request():
instance_id = boto.utils.get_instance_identity()['document']['instanceId']
region = boto.utils.get_instance_identity()['document']['region']
conn = boto.ec2.connect_to_region(region)
inst = boto.ec2.instance.Instance(connection=conn)
inst.id = instance_id
inst.update()
spot_id = inst.spot_instance_request_id
tags = conn.get_all_tags(filters={'resource-type': 'spot-instances-request', 'resource-id': spot_id})
for tag in tags:
inst.add_tag(tag.name, tag.value)