Preparación para agregar un enlace de ciclo de vida a un grupo de Auto Scaling - 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.

Preparación para agregar un enlace de ciclo de vida a un grupo de Auto Scaling

Antes de agregar un enlace de ciclo de vida al grupo de Auto Scaling, asegúrese de que el script de datos de usuario o el destino de notificación estén configurados correctamente.

  • No es necesario configurar un destino de notificación para utilizar un script de datos de usuario con el fin de realizar acciones personalizadas en las instancias mientras se están lanzando. Sin embargo, ya debe haber creado la plantilla de lanzamiento o la configuración de lanzamiento que especifica el script de datos de usuario y debe haberla asociado al grupo de Auto Scaling. Para obtener más información acerca de los scripts de datos de usuario, consulte Ejecutar comandos en la instancia de Linux durante el lanzamiento en la Guía del usuario de Amazon EC2 para instancias de Linux.

  • Para indicar a Amazon EC2 Auto Scaling que se ha completado la acción del ciclo de vida, debe añadir la llamada a la CompleteLifecycleActionAPI al script y debe crear manualmente un rol de IAM con una política que permita a las instancias de Auto Scaling llamar a esta API. La plantilla de lanzamiento o la configuración de lanzamiento deben especificar este rol mediante un perfil de instancias de IAM que se adjunta a las instancias de Amazon EC2 en el momento del lanzamiento. Para obtener más información, consulte Completar una acción del ciclo de vida y Rol de IAM para aplicaciones que se ejecuten en instancias de Amazon EC2.

  • Para utilizar un servicio como Lambda para realizar una acción personalizada, debe haber creado una EventBridge regla y haber especificado una función de Lambda como destino. Para obtener más información, consulte Configuración de un destino de notificación para notificaciones de ciclo de vida.

  • Para permitir que Lambda señale a Amazon EC2 Auto Scaling cuando se complete la acción del ciclo de vida, debe CompleteLifecycleActionañadir la llamada a la API al código de la función. También debe haber adjuntado una política de IAM al rol de ejecución de la función que concede permiso a Lambda para completar acciones de ciclo de vida. Para obtener más información, consulte Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda.

  • Para utilizar un servicio como Amazon SNS o Amazon SQS para realizar una acción personalizada, ya debe haber creado el tema SNS o la cola SQS y tener preparado su nombre de recurso de Amazon (ARN). También debe haber creado el rol de IAM que otorga a Amazon EC2 Auto Scaling acceso al tema SNS o al destino de SQS y tener preparado su ARN. Para obtener más información, consulte Configuración de un destino de notificación para notificaciones de ciclo de vida.

    nota

    De forma predeterminada, cuando agrega un enlace de ciclo de vida en la consola, Amazon EC2 Auto Scaling envía notificaciones de eventos del ciclo de vida a Amazon. EventBridge Se recomienda utilizar un script de datos de usuario EventBridge o utilizar un script de datos de usuario. Para crear un enlace de ciclo de vida que envíe notificaciones directamente a Amazon SNS o Amazon SQS, utilice AWS CLI el enlace de ciclo de vida o un SDK para añadir el AWS CloudFormation enlace de ciclo de vida.

Configuración de un destino de notificación para notificaciones de ciclo de vida

Puede agregar enlaces de ciclo de vida a un grupo de Auto Scaling para realizar acciones personalizadas cuando una instancia entra en estado de espera. Puede elegir un servicio de destino para llevar a cabo estas acciones en función de su enfoque de desarrollo preferido.

El primer enfoque usa Amazon EventBridge para invocar una función Lambda que realiza la acción deseada. El segundo enfoque consiste en crear un tema de Amazon Simple Notification Service (Amazon SNS) en el que se publicarán las notificaciones. Los clientes pueden suscribirse al tema de SNS y recibir mensajes publicados mediante un protocolo compatible. El último enfoque implica el uso de Amazon Simple Queue Service (Amazon SQS), un sistema de mensajería utilizado por las aplicaciones distribuidas para intercambiar mensajes mediante un modelo de sondeo.

Como práctica recomendada, le recomendamos que utilice. EventBridge Las notificaciones enviadas a Amazon SNS y Amazon SQS contienen la misma información que las notificaciones a las que Amazon EC2 Auto Scaling envía. EventBridge Antes EventBridge, la práctica estándar consistía en enviar una notificación a SNS o SQS e integrar otro servicio con SNS o SQS para realizar acciones programáticas. En la actualidad, EventBridge ofrece más opciones para los servicios a los que puede dirigirse y facilita la gestión de los eventos mediante una arquitectura sin servidor.

Los siguientes procedimientos abordan cómo configurar el destino de notificaciones.

Recuerde que si tiene un script de datos de usuario en la plantilla de lanzamiento o en la configuración de lanzamiento que configura las instancias cuando se lanzan, no es necesario que reciba notificaciones para llevar a cabo acciones personalizadas en las instancias.

importante

La EventBridge regla, la función Lambda, el tema de Amazon SNS y la cola de Amazon SQS que utilice con los enlaces del ciclo de vida deben estar siempre en la misma región en la que creó el grupo de Auto Scaling.

Enrute las notificaciones a Lambda mediante EventBridge

Puede configurar una EventBridge regla para invocar una función Lambda cuando una instancia entre en estado de espera. Amazon EC2 Auto Scaling emite una notificación de evento del ciclo de vida EventBridge sobre la instancia que se está lanzando o finalizando y un token que puede usar para controlar la acción del ciclo de vida. Para ver ejemplos de estos eventos, consulte Referencia de evento de Amazon EC2 Auto Scaling.

nota

Cuando se utiliza AWS Management Console para crear una regla de eventos, la consola añade automáticamente los permisos de IAM necesarios para conceder el EventBridge permiso de llamada a la función Lambda. Si crea una regla de eventos utilizando la AWS CLI, tiene que otorgar este permiso explícitamente.

Para obtener información sobre cómo crear reglas de eventos en la EventBridge consola, consulta Cómo crear EventBridge reglas de Amazon que reaccionan a los eventos en la Guía del EventBridge usuario de Amazon.

- o bien -

Para obtener una guía introductoria dirigida a los usuarios de la consola, consulte Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda. En este tutorial se muestra cómo crear una función Lambda sencilla que escuche los eventos de lanzamiento y los escriba en un CloudWatch registro de registros.

Para crear una EventBridge regla que invoque una función Lambda
  1. Cree una función Lambda mediante la consola de Lambda y anote el nombre de recurso de Amazon (ARN). Por ejemplo, arn:aws:lambda:region:123456789012:function:my-function. Necesitas el ARN para crear un EventBridge objetivo. Para obtener más información, consulte Introducción a Lambda en la Guía para desarrolladores de AWS Lambda .

  2. Para crear una regla que coincida con los eventos de un lanzamiento de instancia, use el siguiente comando put-rule.

    aws events put-rule --name my-rule --event-pattern file://pattern.json --state ENABLED

    En el siguiente ejemplo se muestra pattern.json para una acción del ciclo de vida de inicio de una instancia. Reemplace el texto en cursiva con el nombre de un grupo de escalado automático.

    { "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance-launch Lifecycle Action" ], "detail": { "AutoScalingGroupName": [ "my-asg" ] } }

    Si el comando se ejecuta correctamente, EventBridge responde con el ARN de la regla. Anote este ARN. Tendrá que ingresarlo en el paso 4.

    Para crear una regla que coincida con otros eventos, modifique el patrón de eventos. Para obtener más información, consulte Se usa EventBridge para gestionar eventos de Auto Scaling.

  3. Para especificar la función Lambda que se va a utilizar como destino de la regla, utilice el siguiente comando put-targets.

    aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws:lambda:region:123456789012:function:my-function

    En el comando anterior, my-rule es el nombre que especificó para la regla en el paso 2, y el valor del parámetro Arn es el ARN de la función que creó en el paso 1.

  4. Para agregar permisos que permitan a la regla invocar en Lambda de destino, utilice el siguiente comando de Lambda add-permission. Este comando confía en el principal del EventBridge servicio (events.amazonaws.com) y limita los permisos a la regla especificada.

    aws lambda add-permission --function-name my-function --statement-id my-unique-id \ --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:region:123456789012:rule/my-rule

    En el comando anterior:

    • my-function es el nombre de la función Lambda que quiere que la regla utilice como destino.

    • my-unique-ides un identificador único que se define para describir la sentencia en la política de funciones de Lambda.

    • source-arnes el ARN de la EventBridge regla.

    Si el comando se ejecuta correctamente, verá un resultado similar al siguiente.

    { "Statement": "{\"Sid\":\"my-unique-id\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:events:us-west-2:123456789012:rule/my-rule\"}}}" }

    El valor de Statement es una versión de cadena JSON de la instrucción que se agregó a la política de la función Lambda.

  5. Una vez que haya seguido estas instrucciones, vaya a Agregar enlaces de ciclo de vida como siguiente paso.

Recepción de notificaciones mediante Amazon SNS

Puede utilizar Amazon SNS para configurar un destino de notificación (un tema de SNS) para recibir notificaciones cuando se produzca una acción del ciclo de vida. Luego, Amazon SNS envía las notificaciones a los destinatarios suscritos. Hasta que no se confirme la suscripción, no se enviarán a los destinatarios las notificaciones publicadas en el tema.

Para configurar notificaciones mediante Amazon SNS
  1. Cree un tema de Amazon SNS mediante la consola de Amazon SNS o el comando create-topic. Asegúrese de que el tema se encuentre en la misma región que el grupo de Auto Scaling que está utilizando. Para obtener más información, consulte Introducción a Amazon SNS en la Guía para desarrolladores de Amazon Simple Notification Service.

    aws sns create-topic --name my-sns-topic
  2. Anote el nombre de recurso de Amazon (ARN) del tema, por ejemplo, arn:aws:sns:region:123456789012:my-sns-topic. Lo necesita para crear el enlace de ciclo de vida.

  3. Cree una función de servicio de IAM para dar a Amazon EC2 Auto Scaling acceso a su destino de notificación de Amazon SNS.

    Para dar a Amazon EC2 Auto Scaling acceso a su tema de SNS

    1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

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

    3. Seleccione Crear rol.

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

    5. Para su caso de uso, en Use cases for other AWS services (Casos de uso para otros servicios de ), elija EC2 Auto Scaling y, luego, EC2 Auto Scaling Notification Access (Acceso a notificaciones de EC2 Auto Scaling).

    6. Elija Next (Siguiente) dos veces para ir a la página Name, review, and create (Asignar nombre, revisar y crear).

    7. En Role name (Nombre de rol), ingrese un nombre para el rol, (por ejemplo, my-notification-role) y elija Create role (Crear rol).

    8. En la página Roles, elija el rol que acaba de crear para abrir la página Summary (Resumen). Anote el ARN del rol. Por ejemplo, arn:aws:iam::123456789012:role/my-notification-role. Lo necesita para crear el enlace de ciclo de vida.

  4. Una vez que haya seguido estas instrucciones, vaya a Adición de enlaces de ciclo de vida (AWS CLI) como siguiente paso.

Recepción de notificaciones mediante Amazon SQS

Puede utilizar Amazon SQS para configurar un destino de notificación que reciba mensajes cuando se produzca una acción del ciclo de vida. A continuación, un consumidor de colas debe sondear una cola de SQS para actuar sobre estas notificaciones.

importante

Las colas FIFO no son compatibles con enlaces de ciclo de vida.

Para configurar notificaciones mediante Amazon SQS
  1. Cree una cola de Amazon SQS mediante la consola de Amazon SQS. Asegúrese de que la cola se encuentre en la misma región que el grupo de Auto Scaling que está utilizando. Para obtener más información, consulte Introducción a Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue Service.

  2. Anote el ARN de la cola, por ejemplo, arn:aws:sqs:us-west-2:123456789012:my-sqs-queue. Lo necesita para crear el enlace de ciclo de vida.

  3. Cree una función de servicio de IAM para dar a Amazon EC2 Auto Scaling acceso a su destino de notificación de Amazon SQS.

    Para dar a Amazon EC2 Auto Scaling acceso a su cola de SQS

    1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

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

    3. Seleccione Crear rol.

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

    5. Para su caso de uso, en Use cases for other AWS services (Casos de uso para otros servicios de ), elija EC2 Auto Scaling y, luego, EC2 Auto Scaling Notification Access (Acceso a notificaciones de EC2 Auto Scaling).

    6. Elija Next (Siguiente) dos veces para ir a la página Name, review, and create (Asignar nombre, revisar y crear).

    7. En Role name (Nombre de rol), ingrese un nombre para el rol, (por ejemplo, my-notification-role) y elija Create role (Crear rol).

    8. En la página Roles, elija el rol que acaba de crear para abrir la página Summary (Resumen). Anote el ARN del rol. Por ejemplo, arn:aws:iam::123456789012:role/my-notification-role. Lo necesita para crear el enlace de ciclo de vida.

  4. Una vez que haya seguido estas instrucciones, vaya a Adición de enlaces de ciclo de vida (AWS CLI) como siguiente paso.

Ejemplo de mensaje de notificación para Amazon SNS y Amazon SQS

Mientras la instancia se encuentra en estado de espera, se publica un mensaje en el destino de notificación de Amazon SNS o Amazon SQS. El mensaje incluye la siguiente información:

  • LifecycleActionToken: el token de acción del ciclo de vida.

  • AccountId— El Cuenta de AWS ID.

  • AutoScalingGroupName: el nombre del grupo de Auto Scaling.

  • LifecycleHookName: el nombre del enlace de ciclo de vida.

  • EC2InstanceId: el ID de la instancia EC2.

  • LifecycleTransition: el tipo de enlace de ciclo de vida.

  • NotificationMetadata: los metadatos de la notificación.

A continuación, se muestra un ejemplo de mensaje de notificación.

Service: AWS Auto Scaling Time: 2021-01-19T00:36:26.533Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a LifecycleActionToken: 71514b9d-6a40-4b26-8523-05e7ee35fa40 AccountId: 123456789012 AutoScalingGroupName: my-asg LifecycleHookName: my-hook EC2InstanceId: i-0598c7d356eba48d7 LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING NotificationMetadata: hook message metadata

Ejemplo de mensaje de notificación de prueba

Al agregar por primera vez un enlace de ciclo de vida, un mensaje de notificación de prueba se publica en el destino de notificación. A continuación, se muestra un ejemplo de mensaje de notificación de prueba.

Service: AWS Auto Scaling Time: 2021-01-19T00:35:52.359Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a Event: autoscaling:TEST_NOTIFICATION AccountId: 123456789012 AutoScalingGroupName: my-asg AutoScalingGroupARN: arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:042cba90-ad2f-431c-9b4d-6d9055bcc9fb:autoScalingGroupName/my-asg
nota

Para ver ejemplos de los eventos enviados desde Amazon EC2 Auto Scaling to EventBridge, consulte. Referencia de evento de Amazon EC2 Auto Scaling