

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial: Uso del script de datos y los metadatos de la instancia para recuperar el estado del ciclo de vida
<a name="tutorial-lifecycle-hook-instance-metadata"></a>

Una forma habitual de crear acciones personalizadas para los enlaces del ciclo de vida consiste en utilizar las notificaciones que Amazon EC2 Auto Scaling envía a otros servicios, como Amazon EventBridge. No obstante, puede evitar tener que crear infraestructura adicional si, en lugar de eso, utiliza un script de datos de usuario para trasladar el código que configura las instancias y completa la acción de ciclo de vida a las propias instancias. 

En el siguiente tutorial, se muestran los primeros pasos para utilizar un script de datos de usuario y los metadatos de instancia. Puede crear una configuración de grupo de Auto Scaling básica con un script de datos de usuario que lea el [estado de ciclo de vida de destino](retrieving-target-lifecycle-state-through-imds.md) de las instancias de un grupo y realice una acción de devolución de llamada en una fase específica del ciclo de vida de una instancia para continuar con el proceso de lanzamiento.

En la siguiente ilustración se resume el flujo de un evento de escalado horizontal cuando utilice un script de datos de usuario para realizar una acción personalizada. Después de la inicialización de una instancia, el ciclo de vida de la instancia se detiene hasta que se complete el enlace de ciclo de vida, ya sea porque se agota el tiempo de espera o porque Amazon EC2 Auto Scaling recibe una señal para continuar. 

![\[El flujo para un evento de escalado horizontal cuando utilice un script de datos de usuario para realizar una acción personalizada.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/lifecycle-hook-user-data-script.png)


**Topics**
+ [Paso 1: Crear un rol de IAM con permisos para completar acciones de ciclo de vida](#instance-metadata-create-iam-role)
+ [Paso 2: Crear una plantilla de lanzamiento e incluir el rol de IAM y un script de datos de usuario](#instance-metadata-create-hello-world-function)
+ [Paso 3: Crear un grupo de Auto Scaling](#instance-metadata-create-auto-scaling-group)
+ [Paso 4: agregar un enlace de ciclo de vida](#instance-metadata-add-lifecycle-hook)
+ [Paso 5: Probar y verificar la funcionalidad](#instance-metadata-testing-hook)
+ [Paso 6: limpiar](#instance-metadata-lifecycle-hooks-tutorial-cleanup)
+ [Recursos relacionados](#instance-metadata-lifecycle-hooks-tutorial-related-resources)

## Paso 1: Crear un rol de IAM con permisos para completar acciones de ciclo de vida
<a name="instance-metadata-create-iam-role"></a>

Cuando utilice el SDK AWS CLI o un AWS SDK para enviar una llamada para completar las acciones del ciclo de vida, debe utilizar un rol de IAM con permisos para completar las acciones del ciclo de vida. 

**Para crear la política de**

1. En la consola de IAM, abra la página [Policies (Políticas)](https://console.aws.amazon.com/iam/home?#/policies), y, a continuación, elija **Create policy (Crear política)**.

1. Seleccione la pestaña **JSON**.

1. En el cuadro **Policy Document** (Documento de política), copie y pegue el siguiente documento de política. Sustituya el **sample text**por su número de cuenta y el nombre del grupo de Auto Scaling que desee crear (**TestAutoScalingEvent-group**).

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "autoscaling:CompleteLifecycleAction"
         ],
         "Resource": "arn:aws:autoscaling:*:123456789012:autoScalingGroup:*:autoScalingGroupName/TestAutoScalingEvent-group"
       }
     ]
   }
   ```

------

1. Elija **Siguiente**. 

1. Para **Nombre de la política**, introduzca **TestAutoScalingEvent-policy**. Elija **Crear política**.

Cuando termine de crear la política, podrá crear un rol que la utilice.

**Para crear el rol.**

1. En el panel de navegación de la izquierda, seleccione **Roles**.

1. Elija **Crear rol**.

1. En **Select trusted entity** (Seleccionar entidad de confianza), elija **AWS service** (Servicio de ).

1. Para el caso de uso, elija **EC2** y, luego, **Next** (Siguiente). 

1. En **Agregar permisos**, elija la política que creó (**TestAutoScalingEvent-policy**). A continuación, elija **Siguiente**. 

1. En la página **Name, review and create** (Asignar nombre, revisar y crear), para **Role name** (Nombre del rol), ingrese **TestAutoScalingEvent-role** y seleccione **Create role** (Crear rol). 

## Paso 2: Crear una plantilla de lanzamiento e incluir el rol de IAM y un script de datos de usuario
<a name="instance-metadata-create-hello-world-function"></a>

Cree una plantilla de lanzamiento para usarla con un grupo de Auto Scaling. Incluya el rol de IAM que ha creado y el script de datos de usuario de ejemplo proporcionado.

**Para crear una plantilla de lanzamiento**

1. Abra la página [Launch templates (Plantillas de lanzamiento)](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) de la consola de Amazon EC2.

1. Elija **Crear plantilla de inicialización**.

1. Para **Launch template name (Nombre de plantilla de lanzamiento)**, ingrese **TestAutoScalingEvent-template**.

1. En **Auto Scaling guidance (Guía de Auto Scaling)**, seleccione la casilla de verificación. 

1. En **Application and OS Images (Amazon Machine Image)** (Imágenes de aplicaciones y SO [imagen de máquina de Amazon]), elija Amazon Linux 2 (HVM), SSD Volume Type, 64-bit (x86) (Amazon Linux 2 [HVM], tipo de volumen SSD, 64 bits [x86]) en la lista de **Quick Start** (Inicio rápido). 

1. En **Instance type** (Tipo de instancia), elija un tipo de instancia de Amazon EC2 (por ejemplo, “t2.micro”).

1. Para **Advanced details (Detalles avanzados)**, expanda la sección para ver los campos. 

1. **Para el **perfil de instancia de IAM**, elija el nombre del perfil de instancia de IAM de su función de IAM (-role). TestAutoScalingEvent** Un perfil de instancias es un contenedor de un rol de IAM que permite que Amazon EC2 transfiera el rol de IAM a una instancia cuando esta se lanza.

   Cuando se utilizaba la consola de IAM para crear un rol de IAM, esta creaba automáticamente un perfil de instancia con el mismo nombre que el rol correspondiente.

1. Copie y pegue el siguiente script de datos de usuario de ejemplo en el campo **User data** (Datos de usuario). Sustituya el texto de ejemplo por `group_name` el nombre del grupo de Auto Scaling que desee crear y `region` por el que Región de AWS desee que utilice su grupo de Auto Scaling.

   ```
   #!/bin/bash
   
   function token {
       echo "X-aws-ec2-metadata-token: $(curl -X PUT 'http://169.254.169.254/latest/api/token' -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600')"
   }
   
   function get_target_state {
       echo $(curl -H "$(token)" -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state)
   }
   
   function get_instance_id {
       echo $(curl -H "$(token)" -s http://169.254.169.254/latest/meta-data/instance-id)
   }
   
   function complete_lifecycle_action {
       instance_id=$(get_instance_id)
       group_name='TestAutoScalingEvent-group'
       region='us-west-2'
    
       echo $instance_id
       echo $region
       echo $(aws autoscaling complete-lifecycle-action \
         --lifecycle-hook-name TestAutoScalingEvent-hook \
         --auto-scaling-group-name $group_name \
         --lifecycle-action-result CONTINUE \
         --instance-id $instance_id \
         --region $region)
   }
   
   function main {
       while true
       do
           target_state=$(get_target_state)
           if [ \"$target_state\" = \"InService\" ]; then
               # Change hostname
               export new_hostname="${group_name}-$instance_id"
               hostname $new_hostname
               # Send callback
               complete_lifecycle_action
               break
           fi
           echo $target_state
           sleep 5
       done
   }
   
   main
   ```

   Este sencillo script de datos de usuario hace lo siguiente:
   + Llama a los metadatos de instancia para recuperar el estado de ciclo de vida de destino y el ID de instancia de los metadatos de instancia.
   + Recupera el estado de ciclo de vida de destino reiteradamente hasta que cambia a `InService`.
   + Cambia el nombre de host de la instancia por el ID de instancia precedido del nombre del grupo de Auto Scaling, si el estado de ciclo de vida de destino es `InService`.
   + Envía una devolución de llamada llamando al comando **complete-lifecycle-action** de la CLI para indicar a Amazon EC2 Auto Scaling que debe `CONTINUE` (continuar) con el proceso de lanzamiento de EC2.

1. Elija **Crear plantilla de inicialización**.

1. En la página de confirmación, seleccione **Create Auto Scaling group (Crear grupo de Auto Scaling**.

**nota**  
Para ver otros ejemplos que puede utilizar como referencia para desarrollar su script de datos de usuario, consulte el [GitHub repositorio](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) de Amazon EC2 Auto Scaling.

## Paso 3: Crear un grupo de Auto Scaling
<a name="instance-metadata-create-auto-scaling-group"></a>

Después de crear la plantilla de lanzamiento, cree un grupo de Auto Scaling.

**Para crear un grupo de Auto Scaling**

1. En la página **Choose launch template or configuration** (Elegir configuración o plantilla de lanzamiento), en **Auto Scaling group name**, ingrese un nombre para el grupo de Auto Scaling (**TestAutoScalingEvent-group**).

1. Elija **Next** (Siguiente) para ir a la página **Choose instance launch options** (Elegir opciones de lanzamiento de la instancia). 

1. En **Network** (Red), elija una VPC.

1. En **Availability Zones and subnets** (Zonas de disponibilidad y subredes), elija una o varias subredes de una o varias zonas de disponibilidad.

1. En la sección **Instance type requirements** (Requisitos del tipo de instancia), utilice la configuración predeterminada para simplificar este paso. (No anule la plantilla de lanzamiento). En este tutorial, solo lanzará una instancia bajo demanda con el tipo de instancia especificado en la plantilla de lanzamiento. 

1. Elija **Skip to review** (Omitir para revisar) en la parte inferior de la pantalla. 

1. En la página **Review** (Revisión), revise los detalles del grupo de Auto Scaling, y luego elija **Create Auto Scaling group** (Crear grupo de Auto Scaling).

## Paso 4: agregar un enlace de ciclo de vida
<a name="instance-metadata-add-lifecycle-hook"></a>

Agregue un enlace de ciclo de vida para mantener la instancia en estado de espera hasta que se complete la acción de ciclo de vida.

**Para agregar un enlace de ciclo de vida**

1. Abra la página [grupos de escalado automático](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) en la consola de Amazon EC2.

1. Seleccione la casilla situada junto al grupo de escalado automático. Se abre un panel dividido en la parte inferior de la página. 

1. En el panel inferior, en la pestaña **Instance management (Administración de instancias)**, en **Lifecycle hooks (Enlaces de ciclo de vida)**, elija **Create lifecycle hook (Crear enlace de ciclo de vida)**.

1. Para definir un enlace de ciclo de vida para escalar horizontalmente (lanzamiento de instancias), haga lo siguiente:

   1. En **Lifecycle hook name (Nombre de enlace de ciclo de vida)**, ingrese **TestAutoScalingEvent-hook**.

   1. En **Lifecycle transition (Transición del ciclo de vida)**, elija **Instance launch (Lanzamiento de instancia)**.

   1. En **Heartbeat timeout** (Tiempo de espera de latido), ingrese **300** como número de segundos que se debe esperar una devolución de llamada desde el script de datos de usuario.

   1. En **Default result (Resultado predeterminado)**, elija **ABANDON (Abandonar)**. Si el enlace agota el tiempo de espera sin recibir una devolución de llamada del script de datos de usuario, el grupo de Auto Scaling termina la nueva instancia.

   1. (Opcional) Mantenga **Notification metadata** (Metadatos de notificación) en blanco.

1. Seleccione **Crear**.

## Paso 5: Probar y verificar la funcionalidad
<a name="instance-metadata-testing-hook"></a>

Para probar la funcionalidad, actualice el grupo de Auto Scaling aumentando la capacidad deseada del grupo de Auto Scaling en 1. El script de datos de usuario se ejecuta y comienza a comprobar el estado de ciclo de vida de destino de la instancia poco después del lanzamiento de la instancia. El script cambia el nombre de host y envía una acción de devolución de llamada cuando el estado de ciclo de vida de destino es `InService`. Este proceso suele tardar solo unos segundos en finalizar.

**Para aumentar el tamaño del grupo de Auto Scaling**

1. Abra la página [grupos de escalado automático](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) en la consola de Amazon EC2.

1. Seleccione la casilla situada junto al grupo de escalado automático. Vea los detalles en un panel inferior mientras sigue viendo las filas superiores del panel superior. 

1. En el panel inferior, en la pestaña **Details (Detalles)**, elija **Group details (Detalles de grupo)**, **Edit (Editar)**.

1. En **Desired capacity (Capacidad deseada)**, aumente el valor actual en 1.

1. Elija **Actualizar**. Mientras se está iniciando la instancia, la columna **Status (Estado)** del panel superior muestra el estado *Updating capacity (Actualizando capacidad)*. 

Después de aumentar la capacidad deseada, puede verificar que la instancia se ha lanzado correctamente y que no se ha terminado en la descripción de las actividades de escalado. 

**Para ver la actividad de escalado**

1. Vuelva a la página **Auto Scaling groups (Grupos de Auto Scaling)** y seleccione su grupo.

1. En la pestaña **Activity (Actividad)**, en **Activity history (Historial de actividad)**, la columna **Status (Estado)** muestra si su grupo de Auto Scaling ha lanzado una instancia. 

1. Si el script de datos de usuario falla una vez que ha transcurrido el periodo de tiempo de espera, verá una actividad de escalado con el estado `Canceled` y el mensaje de estado `Instance failed to complete user's Lifecycle Action: Lifecycle Action with token e85eb647-4fe0-4909-b341-a6c42EXAMPLE was abandoned: Lifecycle Action Completed with ABANDON Result`.

## Paso 6: limpiar
<a name="instance-metadata-lifecycle-hooks-tutorial-cleanup"></a>

Si ha terminado de trabajar con los recursos que ha creado para este tutorial, siga los pasos que figuran a continuación para eliminarlos.

**Para eliminar el enlace de ciclo de vida**

1. Abra la página [grupos de escalado automático](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) en la consola de Amazon EC2.

1. Seleccione la casilla situada junto al grupo de escalado automático.

1. En la pestaña **Instance management (Administración de instancias)**, en **Lifecycle hooks (Enlaces de ciclo de vida)**, elija el enlace de ciclo de vida (`TestAutoScalingEvent-hook`).

1. Elija **Acciones**, **Eliminar**.

1. Para confirmar, vuelva a elegir **Delete**.

**Para eliminar la plantilla de lanzamiento**

1. Abra la página [Launch templates (Plantillas de lanzamiento)](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) de la consola de Amazon EC2.

1. Seleccione la plantilla de lanzamiento (`TestAutoScalingEvent-template`) y elija **Acciones**, seguido de **Eliminar plantilla**.

1. Cuando se le pida la confirmación, escriba **Delete** para confirmar la eliminación de la plantilla de lanzamiento especificada y, a continuación, elija **Delete** (Eliminar).

Si ha terminado de trabajar con el grupo de Auto Scaling de ejemplo, elimínelo. También puede eliminar el rol de IAM y la política de permisos que ha creado.

**Para eliminar el grupo de Auto Scaling**

1. Abra la página [grupos de escalado automático](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) en la consola de Amazon EC2.

1. Seleccione la casilla de verificación situada junto al grupo de Auto Scaling (`TestAutoScalingEvent-group`) y elija **Delete** (Eliminar). 

1. Cuando se le pida la confirmación, escriba **delete** para confirmar la eliminación del grupo de escalado automático especificado y, a continuación, elija **Delete** (Eliminar).

   Un icono de carga en la columna **Name (Nombre)** indica que el grupo de Auto Scaling se está eliminando. Terminar la instancia y eliminar el grupo tarda unos minutos. 

**Para eliminar el rol de IAM**

1. Abra la [página Roles](https://console.aws.amazon.com/iam/home?#/roles) en la consola de IAM.

1. Seleccione el rol de la función (`TestAutoScalingEvent-role`).

1. Elija **Eliminar**.

1. Cuando se le pida la confirmación, escriba el nombre del rol y, a continuación, elija **Delete** (Eliminar).

**Para eliminar la política de IAM:**

1. Abra la página de [Policies (Políticas)](https://console.aws.amazon.com/iam/home?#/policies) de la consola de IAM.

1. Seleccione la política que creó (`TestAutoScalingEvent-policy`).

1. Elija **Acciones**, **Eliminar**.

1. Cuando se le pida la confirmación, escriba el nombre de la política y, a continuación, elija **Delete** (Eliminar).

## Recursos relacionados
<a name="instance-metadata-lifecycle-hooks-tutorial-related-resources"></a>

Los siguientes temas relacionados pueden resultarle útiles a la hora de desarrollar un código que invoque acciones en las instancias en función de los datos disponibles en los metadatos de la instancia.
+ [Recuperar el estado de ciclo de vida de destino a través de los metadatos de instancia](retrieving-target-lifecycle-state-through-imds.md). En esta sección, se describe el estado del ciclo de vida de otros casos de uso, como la terminación de una instancia.
+ [Adición de enlaces de ciclo de vida (consola)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-console). Este procedimiento muestra cómo agregar enlaces de ciclo de vida tanto para la escalar horizontalmente (lanzamiento de instancias) como para la reducir horizontalmente (instancias que finalizan o vuelven a un grupo caliente).
+ [Categorías de metadatos de instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-categories) en la *Guía del usuario de Amazon EC2*. En este tema, se enumeran todas las categorías de metadatos de instancias que puede utilizar para invocar acciones en instancias de EC2.

Para ver un tutorial que muestra cómo usar Amazon EventBridge para crear reglas que invoquen funciones de Lambda en función de los eventos que ocurren en las instancias de su grupo de Auto Scaling, consulte. [Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda](tutorial-lifecycle-hook-lambda.md)