Ich habe ein paar EC2-Spot-Anfragen, die EC2-Instanzen starten, wenn der Preis stimmt. Ich möchte, dass die resultierenden Instanzen mit einem Name
und einem Role
Tag versehen werden, damit mein Konfigurationsverwaltungstool weiß, um welchen Maschinentyp es sich handelt.
UPDATE :
Ich habe den Rat von Hyper Anthony befolgt und implementiert. Da das Abrufen fehleranfällig und ressourcenintensiv sein würde, habe ich meinem AMI ein Startskript hinzugefügt, das die Tags beim Start einer Instanz aktualisiert. Dies sind die Schritte, die ich unternommen habe:
Stellen Sie sicher, dass Boto auf dem von Ihnen verwendeten AMI installiert ist
pip install boto
Weisen Sie der EC2-Instanz eine IAM-Rolle zu
Die Instanz, die Sie starten, muss über eine Möglichkeit verfügen, auf Informationen zur Spot-Anfrage zuzugreifen. Verwenden Sie eine IAM-Rolle oder stellen Sie Ihrer Instanz alternativ Zugriffsschlüssel zur Verfügung. Die Richtlinie, die ich an die von mir verwendete IAM-Rolle angehängt habe, lautet:
{
"Statement": [
{
"Action": [
"ec2:CreateTags",
"ec2:DescribeTags",
"ec2:DescribeInstances"
],
"Effect": "Allow",
"Resource": [
"*"
],
"Sid": "Stmt1432737176000"
}
],
"Version": "2012-10-17"
}
Führen Sie beim Start ein Skript aus, um die Tags zu aktualisieren
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)