web-dev-qa-db-fra.com

Comment obtenir le nom d'instance à partir de l'instance dans AWS?

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.

12
numb3rs1x

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
11
Steffen Opel

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!

7
Jayesh Dhandha

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
0
BrianJakovich