Tutorial: Configurar datos de usuario para recuperar el estado de ciclo de vida de destino a través de los metadatos de instancia - Amazon EC2 Auto Scaling

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: Configurar datos de usuario para recuperar el estado de ciclo de vida de destino a través de los metadatos de instancia

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 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.

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


                El flujo de un evento de escalamiento horizontal en el que se utiliza un script de datos de usuario para realizar una acción personalizada.

Paso 1: Crear un rol de IAM con permisos para completar acciones de ciclo de vida

Cuando utilizas el SDK AWS CLI o un AWS SDK para enviar una llamada para completar las acciones del ciclo de vida, debes usar 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), y, a continuación, elija Create policy (Crear política).

  2. Seleccione la pestaña JSON.

  3. En el cuadro Policy Document (Documento de política), copie y pegue el siguiente documento de política. Reemplace el texto de ejemplo con su número de cuenta y el nombre del grupo de Auto Scaling que desea crear (TestAutoScalingEvent-group).

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

  5. Para Policy name (Nombre de 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 de .
  1. En el panel de navegación de la izquierda, seleccione Roles.

  2. Seleccione Crear rol.

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

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

  5. En Añadir permisos, elige la política que has creado (TestAutoScalingEvent-policy). A continuación, elija Siguiente.

  6. 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

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) de la consola de Amazon EC2.

  2. Elija Crear plantilla de inicialización.

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

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

  5. 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).

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

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

  8. 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.

  9. 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 get_target_state { echo $(curl -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state) } function get_instance_id { echo $(curl -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.

  10. Elija Crear plantilla de inicialización.

  11. 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 de Auto Scaling de Amazon EC2.

Paso 3: Crear un grupo de Auto Scaling

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).

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

  3. En Network (Red), elija una VPC.

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

  5. 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.

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

  7. 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

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 en la consola de Amazon EC2.

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

  3. 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).

  4. 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.

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

    3. 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.

    4. 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.

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

  5. Seleccione Crear.

Paso 5: Probar y verificar la funcionalidad

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 en la consola de Amazon EC2.

  2. 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.

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

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

  5. 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.

  2. 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.

  3. 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

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 en la consola de Amazon EC2.

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

  3. 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).

  4. Elija Acciones, Eliminar.

  5. Para confirmar, vuelva a elegir Delete.

Para eliminar la plantilla de lanzamiento
  1. Abra la página Launch templates (Plantillas de lanzamiento) de la consola de Amazon EC2.

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

  3. 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 en la consola de Amazon EC2.

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

  3. 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 en la consola de IAM.

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

  3. Elija Eliminar.

  4. 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) de la consola de IAM.

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

  3. Elija Acciones, Eliminar.

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

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.

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