Identificación de las instancias inicializadas en una sola solicitud - Amazon Elastic Compute Cloud

Identificación de las instancias inicializadas en una sola solicitud

En este ejemplo se demuestra cómo se pueden usar los datos de usuario y los metadatos de instancia para configurar las instancias de Amazon EC2.

nota

En los ejemplos de esta sección, se utiliza la dirección IPv4 de IMDS: 169.254.169.254. Si recupera metadatos de instancia para las instancias de EC2 a través de la dirección IPv6, asegúrese de habilitar y utilizar la dirección IPv6 en su lugar: [fd00:ec2::254]. La dirección IPv6 de IMDS es compatible con los comandos de IMDSv2. Solo se puede acceder a la dirección IPv6 con instancias basadas en Nitro en subredes compatibles con IPv6 (de doble pila o solo IPv6).

Alice desea iniciar cuatro instancias de su AMI de base de datos favorita, de modo que la primera sea la instancia original y las tres restantes actúen como réplicas. Al iniciarlas, desea agregar datos de usuario acerca de la estrategia de replicación para cada réplica. Es consciente de que estos datos estarán disponibles para las cuatro instancias, por lo que debe estructurar los datos de usuario de modo que cada instancia pueda reconocer qué partes se aplican a cada una. Lo puede hacer con el valor de metadato de instancia ami-launch-index, que será exclusivo para cada instancia. Si ha iniciado más de una instancia al mismo tiempo, ami-launch-index indica el orden en el que se ha iniciado la instancia. El valor de la primera instancia iniciada es 0.

Estos son los datos de usuario que ha creado Alice.

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

Los datos de replicate-every=1min definen la configuración de la primera réplica, replicate-every=5min define la configuración de la segunda réplica y así sucesivamente. Alice decide facilitar estos datos como una cadena ASCII con un símbolo de barra vertical (|) que delimita los datos de las distintas instancias.

Alice inicia cuatro instancias con el comando run-instances y especifica los datos de usuario.

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"

Una vez iniciadas, todas las instancias tienen una copia de los datos de usuario y los metadatos comunes se muestran aquí:

  • ID de la AMI: ami-0abcdef1234567890

  • ID de reserva: r-1234567890abcabc0

  • Claves públicas: ninguna

  • Nombre de grupo de seguridad: predeterminado

  • Tipo de instancia: t2.micro

Sin embargo, cada instancia tiene metadatos únicos, tal como se muestra en las tablas siguientes.

Metadatos Valor
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
Metadatos Valor
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
Metadatos Valor
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
Metadatos Valor
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 puede utilizar el valor ami-launch-index para determinar la parte de los datos de usuario que se aplican a una instancia en concreto.

  1. Se conecta a una de las instancias y recupera ami-launch-index de esa instancia para asegurarse de que es una de las 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" http://169.254.169.254/latest/meta-data/ami-launch-index 2

    Para los siguientes pasos, las solicitudes de IMDSv2 usan el token almacenado del comando IMDSv2 precedente, siempre y cuando el token no haya caducado.

    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-launch-index 2
  2. Guarda ami-launch-index como variable.

    IMDSv2
    [ec2-user ~]$ ami_launch_index=`curl -H "X-aws-ec2-metadata-token: $TOKEN" 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. Guarda los datos de usuario como variable.

    IMDSv2
    [ec2-user ~]$ user_data=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data`
    IMDSv1
    [ec2-user ~]$ user_data=`curl http://169.254.169.254/latest/user-data`
  4. Por último, Alice utiliza el comando cut para extraer la parte de los datos de usuario que se aplican a esa instancia.

    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