J'ai quelques demandes ponctuelles EC2 qui lancent des instances EC2 lorsque le prix est correct. J'aimerais que les instances résultantes soient étiquetées avec une balise Name
et Role
afin que mon outil de gestion de configuration sache de quel type de machine il s'agit.
MISE À JOUR :
J'ai suivi les conseils d'Hyper Anthony et les ai mis en œuvre - parce que l'interrogation allait être source d'erreurs et gourmande en ressources, j'ai ajouté un script de démarrage à mon AMI qui met à jour les balises lors du lancement d'une instance, voici les étapes que j'ai suivies:
Assurez-vous que Boto est installé sur l'AMI que vous utilisez
pip install boto
Attribuer un rôle IAM à l'instance EC2
L'instance que vous lancez doit avoir un moyen d'accéder aux informations sur la demande spot. Utilisez un rôle IAM ou mettez les clés d'accès à la disposition de votre instance. La stratégie que j'ai attachée au rôle IAM que j'ai utilisé est la suivante:
{
"Statement": [
{
"Action": [
"ec2:CreateTags",
"ec2:DescribeTags",
"ec2:DescribeInstances"
],
"Effect": "Allow",
"Resource": [
"*"
],
"Sid": "Stmt1432737176000"
}
],
"Version": "2012-10-17"
}
Exécutez un script au démarrage pour mettre à jour les balises
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)