J'essaie de configurer un moyen d'enregistrer automatiquement une instance dans route53 lors de sa création, en utilisant salt et cet article: http://cantina.co/2012/01/25/automated-dns-for- aws-instances-using-route-53/
L'article utilise ec2-metadata
pour obtenir l'ID d'instance et le nom d'hôte. Je me demande s'il existe un moyen, en utilisant bash dans l'instance, d'obtenir le nom d'instance à la place. ec2-metadata
semble seulement montrer l'instance-id. Merci d'avance.
Tout d’abord, le Amazon EC2 Service de métadonnées d’instance fournit également un certain nombre d’autres Noms en plus du instance-id
, s’il s’agit peut-être de ce que vous recherchez - voir Instance Catégories de métadonnées :
hostname
- Nom d'hôte privé de l'instance. Dans les cas où plusieurs interfaces réseau sont présentes, il s'agit du périphérique eth0 (le périphérique pour lequel le numéro de périphérique est 0). local-hostname
- Nom d'hôte DNS privé de l'instance. Dans les cas où plusieurs interfaces réseau sont présentes, il s'agit du périphérique eth0 (le périphérique pour lequel le numéro de périphérique est 0). public-hostname
- DNS public de l'instance. Si l'instance est dans un VPC, cette catégorie n'est renvoyée que si l'attribut enableDnsHostnames est défini sur true. Si vous recherchez le Nom exposé dans la AWS Management Console bien, vous devrez en fait recourir à l'un des Outils pour Amazon Web Services pour le récupérer - que Name est en fait juste une balise standard avec la clé Name (voir Balisage de vos ressources Amazon EC2 ), qui est utilisé par la plupart des services AWS pour l'évidence objectif.
Voici comment l'obtenir avec l'interface de ligne de commande AWS par exemple (région ignorée et informations d'identification):
aws ec2 describe-tags \
--filters Name=resource-id,Values=i-abcd1234 Name=key,Values=Name \
--query Tags[].Value --output text
Pour un traitement de sortie JSON CLI plus avancé que ce qui est possible avec l'option --query
intégrée, vous pouvez recourir à jq ( un processeur JSON de ligne de commande léger et flexible ).
La réponse d'Overthink fournit un exemple basé sur le désormais hérité Outils de l'API d'Amazon EC2 (veuillez noter les commentaires, qui indiquent correctement que vous devez maintenant traiter les informations d'identification différemment, voir Indiquez aux outils de la CLI qui Vous êtes et Rôles IAM pour les instances EC2 pour plus de détails).
Tout d’abord, vous devez obtenir le instance-id
.
AWS_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
Alors vous pouvez obtenir le ec2 instance name
en utilisant la commande ci-dessous.
EC2_NAME=$(aws ec2 describe-tags --region $REGION --filters "Name=resource-id,Values=$AWS_INSTANCE_ID" "Name=key,Values=Name" --output text | cut -f5)
Veuillez vous assurer que vous avez AWS Cli Installed.
J'espère que cela aide. Merci!
Vous ne savez pas à quoi cela ressemble avec bash, mais vous pouvez utiliser un SDK à partir de l'instance elle-même si vous pouvez obtenir l'ID d'instance. Vous interrogez le recours ec2 et transmettez l'ID d'instance ec2. En utilisant le sdk Ruby, cela ressemblerait à:
i = ec2.instances["i-12345678"]
puts i.dns_name