411 votes

Comment obtenir l'identifiant de l'instance à partir d'une instance ec2 ?

Comment puis-je trouver le instance id d'une instance ec2 depuis l'intérieur de l'instance ec2 ?

562voto

vladr Points 34562

Voir la documentation EC2 sur le sujet .

Cours :

wget -q -O - http://169.254.169.254/latest/meta-data/instance-id

Si vous avez besoin d'un accès programmatique à l'ID de l'instance à partir d'un script,

die() { status=$1; shift; echo "FATAL: $*"; exit $status; }
EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"

Voici un exemple d'utilisation plus avancée (récupérer l'ID de l'instance ainsi que la zone de disponibilité et la région, etc :)

EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"

Vous pouvez également utiliser curl au lieu de wget en fonction de ce qui est installé sur votre plate-forme.

0 votes

@Leopd, vous en savez manifestement plus que les gens d'Amazon qui ont mis en place EC2 et rédigé la documentation. Incidemment, personne ne vous empêche de créer un alias pour 169.254.169.254 en /etc/hosts si cela vous fait vous sentir plus en sécurité, vous devriez... vous en soucier.

0 votes

@leopd Et s'ils changent leur serveur DNS et que vous ne pouvez plus obtenir de DNS ? N'est-ce pas aussi probable que de changer leur adresse IP pour la recherche de ressources ?

2 votes

Qu'en est-il dans le SDK Java ? Y a-t-il un moyen de l'obtenir sans avoir à faire un GET sur cette url ? Cela semble étrange si ce n'est pas dans le SDK.

154voto

James Points 11054

Sur les AMIs Amazon Linux, vous pouvez le faire :

$ ec2-metadata -i
instance-id: i-1234567890abcdef0

Ou, sur Ubuntu et quelques autres saveurs de linux, ec2metadata --instance-id (Cette commande peut ne pas être installée par défaut sur ubuntu, mais vous pouvez l'ajouter avec sudo apt-get install cloud-utils )

Comme son nom l'indique, vous pouvez utiliser cette commande pour obtenir d'autres métadonnées utiles.

3 votes

Si vous pensez à utiliser ça, cet article vaut la peine d'être lu (tldr : tous les outils en ligne de commande sont en java, et java a un long temps de démarrage)

0 votes

La meilleure réponse

0 votes

@Marc Nope. Non - après ec2 . Il est ec2metadata --instance-id

75voto

rhunwicks Points 827

Sur Ubuntu, vous pouvez :

sudo apt-get install cloud-utils

Et puis tu peux :

EC2_INSTANCE_ID=$(ec2metadata --instance-id)

Vous pouvez obtenir la plupart des métadonnées associées à l'instance de cette façon :

ec2metadata --help
Syntax: /usr/bin/ec2metadata \[options\]

Query and display EC2 metadata.

If no options are provided, all options will be displayed

Options:
    -h --help               show this help

    --kernel-id             display the kernel id
    --ramdisk-id            display the ramdisk id
    --reservation-id        display the reservation id

    --ami-id                display the ami id
    --ami-launch-index      display the ami launch index
    --ami-manifest-path     display the ami manifest path
    --ancestor-ami-ids      display the ami ancestor id
    --product-codes         display the ami associated product codes
    --availability-zone     display the ami placement zone

    --instance-id           display the instance id
    --instance-type         display the instance type

    --local-hostname        display the local hostname
    --public-hostname       display the public hostname

    --local-ipv4            display the local ipv4 ip address
    --public-ipv4           display the public ipv4 ip address

    --block-device-mapping  display the block device id
    --security-groups       display the security groups

    --mac                   display the instance mac address
    --profile               display the instance profile
    --instance-action       display the instance-action

    --public-keys           display the openssh public keys
    --user-data             display the user data (not actually metadata)

0 votes

Sous Ubuntu lucide apt-get install récupère la version 0.11-0ubuntu1 qui ne contient pas cet utilitaire. Il a été ajouté au paquet juste après .

7 votes

Le paquet cloud-utils est inclus par défaut dans l'AMI Ubuntu 12.04.1 LTS Cluster Compute.

2 votes

Cloud-utils semble être dans RHEL/CentOS aussi

27voto

Mehdi LAMRANI Points 3961

Para .NET Personnes :

string instanceId = new StreamReader(
      HttpWebRequest.Create("http://169.254.169.254/latest/meta-data/instance-id")
      .GetResponse().GetResponseStream())
    .ReadToEnd();

23voto

benlast Points 131

Pour Python :

import boto.utils
region=boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]

qui se résume à une seule phrase :

python -c "import boto.utils; print boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]"

Au lieu de local_hostname, vous pouvez également utiliser public_hostname, ou :

boto.utils.get_instance_metadata()['placement']['availability-zone'][:-1]

0 votes

Toutes les nouvelles versions de boto que je vois vous permettent d'appeler la clé "instance_id" directement. J'ai fait les modifications suggérées.

8 votes

Inst_id = boto.utils.get_instance_metadata()['instance-id']

0 votes

Vous réalisez que cela permet d'obtenir la région dans laquelle se trouve l'instance, et non l'identifiant de l'instance comme le demandait la question, n'est-ce pas ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X