Configuración de un destino de notificaciones de un enlace de ciclo de vida - Amazon EC2 Auto Scaling

Configuración de un destino de notificaciones de un enlace de ciclo de vida

Puede agregar enlaces de ciclo de vida a un grupo de Auto Scaling para realizar acciones personalizadas cada vez que una instancia entre en estado de espera. Puede configurar destinos de notificaciones para llevar a cabo estas acciones mediante una variedad de servicios de Amazon Web Services en función de su enfoque de desarrollo preferido.

El primer enfoque utiliza Amazon EventBridge para invocar una función Lambda que ejecuta 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 utilizar Amazon Simple Queue Service (Amazon SQS), un sistema de mensajería que requiere nodos de trabajo para sondear una cola.

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

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

Recuerde, si tiene scripts de datos de usuario o directivas de cloud-init que configuran las instancias cuando se inician, no es necesario recibir notificaciones cuando se produce la acción del ciclo de vida.

importante

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

Enrutamiento de notificaciones a Lambda mediante EventBridge

Puede invocar una función Lambda cuando se produzca una acción del ciclo de vida mediante EventBridge. Para obtener información sobre los eventos de EventBridge que se emiten cuando se produce una acción del ciclo de vida, consulte Eventos de Auto Scaling. Para obtener una guía introductoria de estilo tutorial que muestra cómo crear una función Lambda simple que escucha los eventos de lanzamiento y los escribe en un registro de CloudWatch Logs, consulte Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda.

Para utilizar una función Lambda como destino de una regla de EventBridge

  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. Necesita el ARN para crear un destino de EventBridge.

    Para obtener más información, consulte Introducción a Lambda en la Guía para desarrolladores de AWS Lambda.

  2. Cree una regla de EventBridge que coincida con la acción del ciclo de vida mediante el siguiente comando put-rule.

    nota

    Cuando se utiliza la AWS Management Console para crear una regla de eventos, la consola agrega automáticamente los permisos de IAM necesarios para otorgar permiso a EventBridge para llamar a la función Lambda. Si crea una regla de eventos utilizando la AWS CLI, tiene que otorgar este permiso explícitamente. Para obtener ayuda para crear una regla de eventos en la consola, consulte Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda.

    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.

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

    En el ejemplo siguiente se muestra pattern.json para una acción del ciclo de vida de terminación de una instancia.

    { "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance-terminate Lifecycle Action" ] }
  3. Cree un destino que invoque su función Lambda cuando se produzca la acción del ciclo de vida mediante el comando put-targets.

    aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws:lambda:region:123456789012:function:my-function
  4. Conceda a la regla permiso para invocar su función Lambda mediante el siguiente comando add-permission. Este comando confía en la entidad principal del servicio de EventBridge (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
  5. Una vez que haya seguido estas instrucciones, continúe en Adición de 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, elija Roles, Create role (Crear rol).

    3. En Select type of trusted entity (Seleccione el tipo de entidad de confianza), elija AWS service (Servicio de AWS).

    4. En Choose the service that will use this role (Elija el servicio que usará este rol), elija EC2 Auto Scaling de la lista.

    5. En Select your use case (Seleccione su caso de uso), elija EC2 Auto Scaling Notification Access (Acceso de notificación de EC2 Auto Scaling) y, a continuación, seleccione Next:Permissions (Siguiente: permisos).

    6. Elija Next: Tags (Siguiente: etiquetas). De manera opcional, puede agregar metadatos al rol asociando etiquetas como pares de clave-valor. A continuación, elija Next:Review (Siguiente: revisar).

    7. En la página Review (Revisar), escriba un nombre para el rol (por ejemplo, mi-rol-notificación) 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). Tome nota del Role ARN (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, continúe en 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. Los nodos de trabajo deben luego 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:region: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, elija Roles, Create role (Crear rol).

    3. En Select type of trusted entity (Seleccione el tipo de entidad de confianza), elija AWS service (Servicio de AWS).

    4. En Choose the service that will use this role (Elija el servicio que usará este rol), elija EC2 Auto Scaling de la lista.

    5. En Select your use case (Seleccione su caso de uso), elija EC2 Auto Scaling Notification Access (Acceso de notificación de EC2 Auto Scaling) y, a continuación, seleccione Next:Permissions (Siguiente: permisos).

    6. Elija Next: Tags (Siguiente: etiquetas). De manera opcional, puede agregar metadatos al rol asociando etiquetas como pares de clave-valor. A continuación, elija Next:Review (Siguiente: revisar).

    7. En la página Review (Revisar), ingrese un nombre para el rol (por ejemplo, mi-rol-notificación) 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). Tome nota del Role ARN (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, continúe en 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 ID de la cuenta de Amazon Web Services.

  • 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 eventos entregados desde Amazon EC2 Auto Scaling a EventBridge, consulte Eventos de Auto Scaling.