Exemple : Valeur d'index de lancement AMI - Amazon Elastic Compute Cloud

Exemple : Valeur d'index de lancement AMI

Cet exemple illustre comment vous pouvez utiliser à la fois les données utilisateur et les métadonnées d'instance pour configurer vos instances.

Note

Les exemples de cette section utilisent l'adresse IPv4 du service de métadonnées d'instance : 169.254.169.254. Si vous récupérez des métadonnées d'instance pour les instances EC2 sur l'adresse IPv6, assurez-vous d'activer et d'utiliser l'adresse IPv6 à la place : fd00:ec2::254. L'adresse IPv6 du service de métadonnées d'instance est compatible avec les commandes IMDSv2. L'adresse IPv6 est uniquement accessible sur instances reposant sur le système Nitro.

Alice souhaite lancer quatre instances de son AMI de base de données préférée ; la première instance servant d'instance initiale et les trois autres de réplicas. Lorsqu'elle les lance, elle souhaite ajouter des données utilisateur portant sur la stratégie de réplication pour chaque réplica. Elle sait que ces données seront disponibles pour les quatre instances. Elle a donc besoin de structurer les données utilisateur de sorte que chaque instance reconnaisse quelles parties la concernent. Pour ce faire, elle peut utiliser la valeur de métadonnées d'instance ami-launch-index qui sera unique pour chaque instance. Si elle démarre plus d'une instance à la fois, la valeur ami-launch-index indique l'ordre dans lequel les instances ont été lancées. La valeur de la première instance lancée est 0.

Voici les données utilisateur construites par Alice.

replicate-every=1min | replicate-every=5min | replicate-every=10min

La donnée replicate-every=1min définit la configuration du premier réplica, replicate-every=5min définit la configuration du deuxième réplica, et ainsi de suite. Alice décide de fournir ces données sous la forme d'une chaîne ASCII avec un symbole barre verticale (|) délimitant les données pour les différentes instances.

Alice lance quatre instances à l'aide de la commande run-instances, en spécifiant les données utilisateur.

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --count 4 \ --instance-type t2.micro \ --user-data "replicate-every=1min | replicate-every=5min | replicate-every=10min"

Après leur lancement, toutes les instances ont une copie des données utilisateur et des métadonnées communes présentées ici :

  • ID d'AMI : ami-0abcdef1234567890

  • ID de réservation : r-1234567890abcabc0

  • Clés publiques : aucune

  • Nom du groupe de sécurité : par défaut

  • Type d'instance : t2.micro

Toutefois, chaque instance possède certaines métadonnées uniques.

Instance 1
Metadonnées Valeur
instance-id i-1234567890abcdef0
ami-launch-index 0
public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
public-ipv4 67.202.51.223
local-hostname ip-10-251-50-12.ec2.internal
local-ipv4 10.251.50.35
Instance 2
Metadonnées Valeur
instance-id i-0598c7d356eba48d7
ami-launch-index 1
public-hostname ec2-67-202-51-224.compute-1.amazonaws.com
public-ipv4 67.202.51.224
local-hostname ip-10-251-50-36.ec2.internal
local-ipv4 10.251.50.36
Instance 3
Metadonnées Valeur
instance-id i-0ee992212549ce0e7
ami-launch-index 2
public-hostname ec2-67-202-51-225.compute-1.amazonaws.com
public-ipv4 67.202.51.225
local-hostname ip-10-251-50-37.ec2.internal
local-ipv4 10.251.50.37
Instance 4
Metadonnées Valeur
instance-id i-1234567890abcdef0
ami-launch-index 3
public-hostname ec2-67-202-51-226.compute-1.amazonaws.com
public-ipv4 67.202.51.226
local-hostname ip-10-251-50-38.ec2.internal
local-ipv4 10.251.50.38

Alice peut utiliser la valeur ami-launch-index pour déterminer quelle portion des données utilisateur est applicable à une instance particulière.

  1. Elle se connecte à l'une des instances et récupère ami-launch-index pour cette instance afin de s'assurer qu'il s'agit de l'un des réplicas :

    IMDSv2
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/meta-data/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-launch-index 2

    Pour les étapes suivantes, les demandes IMDSv2 utilisent le jeton stocké provenant de la commande IMDSv2 précédente, à condition que le jeton ne soit pas arrivé à expiration.

    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-launch-index 2
  2. Elle enregistre les données ami-launch-index sous forme de variable.

    IMDSv2
    [ec2-user ~]$ ami_launch_index=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-launch-index`
    IMDSv1
    [ec2-user ~]$ ami_launch_index=`curl http://169.254.169.254/latest/meta-data/ami-launch-index`
  3. Elle enregistre les données utilisateur sous forme de variable.

    IMDSv2
    [ec2-user ~]$ user_data=`curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/user-data`
    IMDSv1
    [ec2-user ~]$ user_data=`curl http://169.254.169.254/latest/user-data`
  4. Enfin, Alice utilise la commande cut pour extraire la portion de données utilisateur applicable à cette instance.

    IMDSv2
    [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index" replicate-every=5min
    IMDSv1
    [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index" replicate-every=5min