Amazon a récemment ajouté la merveilleuse fonctionnalité de balisage des instances EC2 avec des paires clé-valeur pour faciliter la gestion d'un grand nombre de machines virtuelles.
Existe-t-il un moyen d'interroger ces balises de la même manière que certaines des autres données définies par l'utilisateur? Par exemple:
$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
us-east-1d
Existe-t-il un moyen similaire d'interroger les balises?
amazon-web-services
amazon-ec2
Josh Lindsey
la source
la source
ec2metadata --instance-id
--out = json | jq '.Tags [] | select (.Key == "role") | .Value 'ec2metadata
outil est obsolète. Maintenant, vous interrogez l'URL «magique» à 169.254.169.254/latest/meta-data - appuyez dessus avec cURL et cela vous donne des points de terminaison magiques que vous pouvez utiliser pour obtenir divers bits de données. Dans ce cascurl http://169.254.169.254/latest/meta-data/instance-id
Le script bash suivant renvoie le nom de votre instance ec2 actuelle (la valeur de la balise "Name"). Modifiez TAG_NAME selon votre cas spécifique.
Pour installer le aws cli
Si vous utilisez IAM au lieu d'informations d'identification explicites, utilisez ces autorisations IAM:
la source
aws ec2 describe-tags
. J'avais besoin d'ajouter cet IAM aux stratégies en ligne de mon rôle IAM. Merci!| cut -f5
par--query="Tags[0].Value"
.Une fois que vous avez
ec2-metadata
etec2-describe-tags
installé (comme mentionné dans la réponse de Ranieri ci-dessus ), voici un exemple de commande shell pour obtenir le "nom" de l'instance actuelle, en supposant que vous ayez une balise "Name = Foo" dessus.Suppose que les variables d'environnement EC2_PRIVATE_KEY et EC2_CERT sont définies.
Cela revient
Foo
.la source
ec2-describe-tags
défaut estus-east-2
. Veuillez passer le--region
drapeau pour utiliser une région différente.Vous pouvez ajouter ce script à vos données utilisateur cloud-init pour télécharger les balises EC2 dans un fichier local:
Vous avez besoin des outils AWS CLI installés sur votre système: vous pouvez les installer avec une
packages
section dans un fichier de configuration cloud avant le script, utiliser une AMI qui les inclut déjà, ou ajouter unapt
ouyum
commande au début du script.Pour accéder aux balises EC2, vous avez besoin d'une stratégie comme celle-ci dans le rôle IAM de votre instance:
Les balises EC2 de l'instance seront disponibles
/etc/ec2-tags
dans ce format:Vous pouvez inclure le fichier tel quel dans un script shell en utilisant
. /etc/ec2-tags
, par exemple:Les balises sont téléchargées lors de l'initialisation de l'instance, elles ne refléteront donc pas les modifications ultérieures.
Le script et la stratégie IAM sont basés sur la réponse d'itaifrenkel.
la source
aws:autoscaling:groupName
aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/EC2_TAG_\1="\2"/' |sed -r 's/aws:autoscaling:/aws_autoscaling_/' > /etc/ec2-tags
Si vous n'êtes pas dans la zone de disponibilité par défaut, les résultats de la réflexion excessive reviendraient vides.
Si vous souhaitez ajouter un filtre pour obtenir une balise spécifique (élastiquebeanstalk: nom d'environnement dans mon cas), vous pouvez le faire.
Et pour obtenir uniquement la valeur de la balise sur laquelle j'ai filtré, nous faisons un tuyau pour couper et obtenir le cinquième champ.
la source
elasticbeanstalk:environment-name
parName
Pour Python:
la source
instance_metadata = utils.get_instance_metadata(timeout=0.5, num_retries=1)
Vous pouvez également utiliser l'
describe-instances
appel cli plutôt quedescribe-tags
:Cet exemple montre comment obtenir la valeur de la balise 'my-tag-name' pour l'instance:
Changez la région en fonction de vos circonstances locales. Cela peut être utile lorsque votre instance dispose du privilège describe-instances mais pas de balises describe-tags dans la stratégie de profil d'instance
la source
En utilisant les API AWS 'user data' et 'meta data', il est possible d'écrire un script qui enveloppe la marionnette pour démarrer une exécution de marionnette avec un nom de certificat personnalisé.
Commencez par démarrer une instance aws avec des données utilisateur personnalisées: 'role: webserver'
Cela appelle marionnette avec un nom de certificat comme «webserver.i-hfg453.aws», vous pouvez ensuite créer un manifeste de nœud appelé «serveur Web» et les marionnettes «correspondance de nœud flou» signifieront qu'il est utilisé pour provisionner tous les serveurs Web.
Cet exemple suppose que vous construisez sur une image de base avec la marionnette installée, etc.
Avantages:
1) Vous n'avez pas à passer vos informations d'identification
2) Vous pouvez être aussi précis que vous le souhaitez avec les configurations de rôle.
la source
J'ai rassemblé ce qui suit qui, espérons-le, est plus simple et plus propre que certaines des réponses existantes et utilise uniquement l'AWS CLI et aucun outil supplémentaire.
Cet exemple de code montre comment obtenir la valeur de la balise 'myTag' pour l'instance EC2 actuelle:
Utilisation des balises describe :
Ou, alternativement, en utilisant des instances de description :
la source
Une variante de certaines des réponses ci-dessus, mais c'est ainsi que j'ai obtenu la valeur d'une balise spécifique à partir du script de données utilisateur sur une instance
la source
Installez l'AWS CLI:
Récupérez les balises de l'instance actuelle:
Les sorties:
Utilisez un peu de perl pour extraire les balises:
Retour:
la source
ec2metadata
n'est pas dans aws-cli, mais il peut être remplacé parcurl --silent http://169.254.169.254/latest/meta-data/instance-id
. aussi,jq
peut analyser le json plus facilement, ou un format de sortie différent est encore plus facile.sudo apt-get -y install python
etexport AWS_DEFAULT_REGION=us-west-1
instance-id: i-07f59f3564618f148
Téléchargez et exécutez un exécutable autonome pour ce faire.
Parfois, on ne peut pas installer awscli qui dépend de python. docker pourrait également être hors de propos.
Voici mon implémentation en golang: https://github.com/hmalphettes/go-ec2-describe-tags
la source
Jq + ec2metadata le rend un peu plus agréable. J'utilise cf et ai accès à la région. Sinon, vous pouvez l'attraper en bash.
la source
Pour ceux qui sont assez fous pour utiliser Fish shell sur EC2, voici un extrait pratique pour votre /home/ec2-user/.config/fish/config.fish. La commande hostdata listera maintenant toutes vos balises ainsi que l'adresse IP publique et le nom d'hôte.
la source