

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.

# Enlaces de ciclo de vida de Amazon EC2 Auto Scaling
<a name="lifecycle-hooks"></a>

Amazon EC2 Auto Scaling ofrece la posibilidad de agregar enlaces de ciclo de vida a los grupos de Auto Scaling. Estos enlaces le permiten crear soluciones que tengan en cuenta los eventos del ciclo de vida de la instancia de Auto Scaling y que, a continuación, realicen una acción personalizada en las instancias cuando se produzca el evento del ciclo de vida correspondiente. Un enlace de ciclo de vida proporciona una cantidad de tiempo especificada (una hora de forma predeterminada) para esperar a que se complete la acción antes de que la instancia pase al siguiente estado.

Como ejemplo del uso de enlaces de ciclo de vida con instancias de Auto Scaling: 
+ Cuando ocurre un evento de escalado horizontal, la instancia que se acaba de lanzar completa la secuencia de arranque y pasa a un estado de espera. Mientras la instancia se encuentra en un estado de espera, ejecuta un script para descargar e instalar los paquetes de software necesarios para la aplicación, asegurándose de que la instancia esté completamente lista antes de que comience a recibir tráfico. Cuando el script ha terminado de instalar el software, envía el comando **complete-lifecycle-action** para continuar.
+ Cuando se produce un evento de escalamiento, un enlace de ciclo de vida detiene la instancia antes de que finalice y te envía una notificación a través de Amazon. EventBridge Mientras la instancia esté en estado de espera, puedes invocar una AWS Lambda función o conectarte a la instancia para descargar registros u otros datos antes de que la instancia finalice por completo. 

Un uso popular de los enlaces de ciclo de vida es controlar cuándo se registran instancias en Elastic Load Balancing. Si agrega un enlace de ciclo de vida de lanzamiento al grupo de Auto Scaling, puede asegurarse de que los scripts de arranque se hayan completado correctamente y que las aplicaciones de las instancias estén listas para aceptar tráfico antes de que se registren en el balanceador de carga al final del enlace de ciclo de vida.

**Topics**
+ [Disponibilidad de los enlaces de ciclo de vida](#lifecycle-hooks-availability)
+ [Consideraciones y limitaciones](#lifecycle-hook-considerations)
+ [Recursos relacionados](#lifecycle-hook-related-resources)
+ [Cómo funcionan los enlaces de ciclo de vida en los grupos de escalado automático](lifecycle-hooks-overview.md)
+ [Preparación para agregar un enlace de ciclo de vida](prepare-for-lifecycle-notifications.md)
+ [Controle la retención de instancias con políticas de ciclo de vida de las instancias](instance-lifecycle-policy.md)
+ [Recuperar el estado de ciclo de vida de destino](retrieving-target-lifecycle-state-through-imds.md)
+ [Incorporación de los enlaces de ciclo de vida en su grupo de escalado automático](adding-lifecycle-hooks.md)
+ [Cómo completar una acción del ciclo de vida en un grupo de escalado automático](completing-lifecycle-hooks.md)
+ [Tutorial: Uso de los metadatos de usuario de la instancia para recuperar el estado de ciclo de vida](tutorial-lifecycle-hook-instance-metadata.md)
+ [Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda](tutorial-lifecycle-hook-lambda.md)

## Disponibilidad de los enlaces de ciclo de vida
<a name="lifecycle-hooks-availability"></a>

En la tabla siguiente se enumeran los enlaces de ciclo de vida disponibles para varias situaciones.


| Event | Inicio o terminación de la instancia¹ | [Duración máxima de instancia](asg-max-instance-lifetime.md): instancias de reemplazo | [Actualización de instancia](asg-instance-refresh.md): instancias de reemplazo | [Reequilibrio de capacidad](ec2-auto-scaling-capacity-rebalancing.md): instancias de reemplazo | [Grupos de calentamiento](ec2-auto-scaling-warm-pools.md): instancias que entran y salen del grupo de calentamiento | 
| --- | --- | --- | --- | --- | --- | 
| Lanzamiento de la instancia | ✓ | ✓ | ✓ | ✓ | ✓ | 
| Terminación de la instancia | ✓ | ✓ | ✓ | ✓ | ✓ | 

¹ Se aplica a todos los lanzamientos y terminaciones, ya sea que se inicien de forma automática o manual, como cuando se llama a las operaciones `SetDesiredCapacity` o `TerminateInstanceInAutoScalingGroup`. No se aplica al adjuntar o desconectar instancias, al poner o sacar instancias del modo de espera, o al eliminar el grupo con la opción para forzar la eliminación.

## Consideraciones y limitaciones de enlaces de ciclo de vida
<a name="lifecycle-hook-considerations"></a>

Cuando trabaje con enlaces de ciclo de vida, tenga en cuenta las siguientes notas y limitaciones:
+ Amazon EC2 Auto Scaling proporciona su propio ciclo de vida para ayudar con la administración de grupos de Auto Scaling. Este ciclo de vida difiere del de otras instancias EC2. Para obtener más información, consulte [Ciclo de vida de instancias de Amazon EC2 Auto Scaling](ec2-auto-scaling-lifecycle.md). Las instancias de un grupo de calentamiento también tienen su propio ciclo de vida, como se describe en [Transiciones de estado del ciclo de vida para las instancias de un grupo de calentamiento](warm-pool-instance-lifecycle.md#lifecycle-state-transitions).
+  De forma predeterminada, los enlaces del ciclo de vida de las terminaciones funcionan en función del máximo esfuerzo. Si se agota el tiempo de espera de un enlace de ciclo de vida de terminación o se abandona, Amazon EC2 Auto Scaling finaliza la instancia inmediatamente. Puede combinar los enlaces del ciclo de vida de la terminación con una política de ciclo de vida de la instancia para la retención de las mismas. Para obtener más información, consulte [Controle la retención de instancias con políticas de ciclo de vida de las instancias](instance-lifecycle-policy.md). 
+ Puede utilizar enlaces de ciclo de vida con instancias de spot, pero un enlace de ciclo de vida no impide que se termine una instancia si esa capacidad ya no está disponible, lo que puede suceder en cualquier momento con un aviso de interrupción de dos minutos. Para obtener más información, consulte [Interrupciones de instancias de spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) en la *Guía del usuario de Amazon EC2*. Sin embargo, puede habilitar el reequilibrio de la capacidad para reemplazar de forma proactiva las instancias de spot que han recibido una recomendación de reequilibrio del servicio de spot de Amazon EC2, una señal que se envía cuando una instancia de spot tiene un riesgo elevado de interrupción. Para obtener más información, consulte [Reequilibrio de la capacidad en Auto Scaling para reemplazar las instancias de spot en riesgo](ec2-auto-scaling-capacity-rebalancing.md).
+ Las instancias pueden permanecer en un estado de espera durante un periodo de tiempo limitado. El tiempo de espera predeterminado para un enlace de ciclo de vida es de una hora (tiempo de espera de latido). También hay un tiempo de espera global que especifica la cantidad máxima de tiempo que se puede mantener una instancia en estado de espera. El tiempo de espera global es de 48 horas, o 100 veces el tiempo de espera de latido, el que sea más corto.
+ El resultado del enlace de ciclo de vida puede ser “abandonar” o “continuar”. Si una instancia se está lanzando, “continuar” indica que las acciones se han realizado correctamente y que Amazon EC2 Auto Scaling puede poner la instancia en servicio. Por el contrario, “abandonar” indica que las acciones personalizadas no se realizaron correctamente y que podemos terminar la instancia y reemplazarla. Si una instancia está terminando, tanto “abandonar” como “continuar” permiten terminar la instancia. Sin embargo, abandonar detiene todas las acciones restantes, como otros enlaces de ciclo de vida, mientras que continuar permite que todos los demás enlaces de ciclo de vida se completen.
+ Amazon EC2 Auto Scaling limita la velocidad a la que permite el lanzamiento de instancias si los enlaces de ciclo de vida fallan de forma constante, de modo que asegúrese de probar y corregir cualquier error permanente en las acciones de ciclo de vida. 
+ La creación y actualización de enlaces de ciclo de vida mediante el AWS CLI CloudFormation, o un SDK proporciona opciones que no están disponibles al crear un enlace de ciclo de vida desde Consola de administración de AWS. Por ejemplo, el campo para especificar el ARN de un tema de SNS o una cola de SQS no aparece en la consola porque Amazon EC2 Auto Scaling ya envía eventos a Amazon. EventBridge Estos eventos se pueden filtrar y redirigir a AWS servicios como Lambda, Amazon SNS y Amazon SQS, según sea necesario.
+ Puede agregar varios enlaces de ciclo de vida a un grupo de Auto Scaling mientras lo crea, llamando a la [CreateAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CreateAutoScalingGroup.html)API mediante el AWS CLI CloudFormation, o un SDK. No obstante, cada enlace debe tener el mismo destino de notificación y rol de IAM, si se especifica. Para crear enlaces de ciclo de vida con diferentes objetivos de notificación y diferentes funciones, cree los enlaces de ciclo de vida de uno en uno en llamadas independientes a la [PutLifecycleHook](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_PutLifecycleHook.html)API. 
+ Si agrega un enlace de ciclo de vida para el lanzamiento de instancias, el periodo de gracia de la comprobación de estado comienza en cuanto la instancia alcance el estado `InService`. Para obtener más información, consulte [Establezca el periodo de gracia de la comprobación de estado para un grupo de escalado automático](health-check-grace-period.md).

**Consideraciones de escalado**
+ Las políticas de escalado dinámico se amplían y reducen en respuesta a los datos CloudWatch métricos, como la E/S de la CPU y la red, que se agregan en varias instancias. Durante un escalado horizontal, Amazon EC2 Auto Scaling no tiene en cuenta inmediatamente una nueva instancia en las métricas agrupadas de la instancia del grupo de escalado automático. Espera a que la instancia alcance el estado `InService` y finalice el calentamiento de la instancia. Para obtener más información, consulte [Consideraciones sobre el rendimiento de escalado](ec2-auto-scaling-default-instance-warmup.md#scaling-performance-considerations) en el tema de calentamiento predeterminado de instancias. 
+ Cuando se reduce horizontalmente, es posible que las métricas de instancias agregadas no reflejen al instante la eliminación de una instancia de terminación. La instancia que termina deja de contar con respecto a las métricas agrupadas de la instancia del grupo poco después Amazon EC2 Auto Scaling comience el flujo de trabajo de terminación. 
+ En la mayoría de los casos, cuando se invocan enlaces de ciclo de vida, las actividades de escalado debidas a políticas de escalado sencillo se ponen en pausa hasta que se hayan completado las acciones de ciclo de vida y el periodo de recuperación haya vencido. Si se establece un intervalo largo para el periodo de recuperación, el escalado tardará más tiempo en reanudarse. Para obtener más información, consulte [Los enlaces de ciclo de vida pueden provocar retrasos adicionales](ec2-auto-scaling-scaling-cooldowns.md#cooldowns-lifecycle-hooks) en el tema sobre recuperación. En general, le recomendamos que no utilice políticas de escalado simple si en su lugar puede usar políticas de escalado por pasos o de escalado de seguimiento de destino.

## Recursos relacionados
<a name="lifecycle-hook-related-resources"></a>

Para ver un vídeo de introducción, consulte [AWS re:Invent 2018: Capacity Management Made Easy with Amazon EC2](https://youtu.be/PideBMIcwBQ?t=469) Auto Scaling activado. *YouTube*

Proporcionamos algunos fragmentos de plantillas de JSON y YAML que puede utilizar para comprender cómo declarar los enlaces del ciclo de vida en sus plantillas de pila. CloudFormation *Para obtener más información, consulta la [AWS::AutoScaling::LifecycleHook](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-autoscaling-lifecyclehook.html)referencia en la Guía del AWS CloudFormation usuario.*

También puede visitar nuestro [GitHubrepositorio](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) para descargar plantillas de ejemplo y scripts de datos de usuario para los enlaces sobre el ciclo de vida.

Para ver ejemplos del uso de enlaces de ciclo de vida, consulte las siguientes entradas del blog. 
+ [Building a Backup System for Scaled Instances using Lambda and Amazon EC2 Run Command](https://aws.amazon.com/blogs/compute/building-a-backup-system-for-scaled-instances-using-aws-lambda-and-amazon-ec2-run-command/)
+ [Ejecute el código antes de finalizar una instancia de escalado automático de EC2](https://aws.amazon.com/blogs/infrastructure-and-automation/run-code-before-terminating-an-ec2-auto-scaling-instance/).

# Cómo funcionan los enlaces de ciclo de vida en los grupos de escalado automático
<a name="lifecycle-hooks-overview"></a>

Una instancia de Amazon EC2 pasa por diferentes estados desde el momento en que la lanza hasta que termina. Puede crear acciones personalizadas para su grupo de escalado automático a fin de que actúen cuando una instancia pasa a un estado de espera a causa de un enlace de ciclo de vida.

En la siguiente ilustración se muestran las transiciones entre los estados de la instancia de escalado automático cuando utiliza los enlaces de ciclo de vida para escalar y reducir horizontalmente. 

![\[Las transiciones entre los estados de instancia de escalado automático cuando se utilizan enlaces de ciclo de vida para escalar y reducir horizontalmente.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/how-lifecycle-hooks-work.png)


Como se muestra en el diagrama anterior:

1. El grupo de Auto Scaling responde a un evento de escalado horizontal y comienza a iniciar una instancia.

1. El enlace de ciclo de vida pone la instancia en estado de espera (`Pending:Wait`) y luego ejecuta una acción personalizada.

   La instancia permanece en estado de espera hasta que se completa la acción de ciclo de vida o finaliza el periodo de tiempo de espera. De forma predeterminada, la instancia permanece en estado de espera durante una hora y, a continuación, el grupo de Auto Scaling continúa con el proceso de inicio (`Pending:Proceed`). Si necesita más tiempo, puede reiniciar el periodo de tiempo de espera registrando un latido. Si se completa la acción de ciclo de vida cuando la acción personalizada se ha realizado y el periodo de tiempo de espera no ha vencido aún, el periodo finaliza y el grupo de Auto Scaling continúa con el proceso de lanzamiento.

1. La instancia pasa al estado `InService` y comienza el periodo de gracia de la comprobación de estado. Sin embargo, antes de que la instancia alcance el estado `InService`, si el grupo de Auto Scaling está asociado a un balanceador de carga de Elastic Load Balancing, la instancia se registra en el balanceador de carga, y este comienza a comprobar su estado. Una vez que termina el periodo de gracia de la comprobación de estado, Amazon EC2 Auto Scaling comienza a comprobar el estado de la instancia.

1. El grupo de Auto Scaling responde a un evento de reducción horizontal y comienza a terminar una instancia. Si el grupo de Auto Scaling se usa con Elastic Load Balancing, primero el registro de la instancia que terminará se anula del balanceador de carga. Si Connection Draining está habilitado para el balanceador de carga, la instancia deja de aceptar nuevas conexiones y espera a que las conexiones existentes se agoten antes de completar el proceso de anulación del registro.

1. El enlace de ciclo de vida pone la instancia en estado de espera (`Terminating:Wait`) y luego realiza una acción personalizada.

   La instancia permanece en estado de espera hasta que se completa la acción del ciclo de vida o hasta que finaliza el tiempo de espera (que, de forma predeterminada, es de una hora). Después de completar el enlace de ciclo de vida o de que el tiempo de espera expire, la instancia pasa al siguiente estado (`Terminating:Proceed`).

1. La instancia se termina.

**importante**  
Las instancias de un grupo de calentamiento también tienen su propio ciclo de vida con los estados de espera correspondientes, como se describe en [Transiciones de estado del ciclo de vida para las instancias de un grupo de calentamiento](warm-pool-instance-lifecycle.md#lifecycle-state-transitions).

## Transiciones de estado del ciclo de vida de las instancias que se están reemplazando por volúmenes
<a name="rvr-lifecycle-state-transitions"></a>

El siguiente diagrama muestra la transición entre los estados de las instancias de Auto Scaling cuando se utilizan ganchos de ciclo de vida para reemplazar el volumen raíz:

![\[Las transiciones entre los estados de instancia de Auto Scaling cuando se utilizan ganchos de ciclo de vida para reemplazar el volumen raíz.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/root-volume-replacement-lifecycle-states.png)


Como se muestra en el diagrama anterior:

1. El grupo Auto Scaling responde a una actualización de instancias y selecciona una instancia para reemplazar el volumen raíz. La instancia entra en el `ReplacingRootVolume` estado. Si la instancia está registrada con un balanceador de cargas, se anula su registro en el balanceador de cargas.

1. El enlace de ciclo de vida pone la instancia en estado de espera (`ReplacingRootVolume:Wait`) y luego ejecuta una acción personalizada. La instancia permanece en estado de espera hasta que se completa la acción de ciclo de vida o finaliza el periodo de tiempo de espera. Si completa la acción del ciclo de vida cuando la acción personalizada se ha completado y el período de tiempo de espera aún no ha expirado, el período finaliza y el grupo de Auto Scaling continúa con el proceso de reemplazo del volumen raíz.

1. La instancia completa la sustitución del volumen raíz y entra en el `RootVolumeReplaced` estado.

1. La instancia entra en el `Pending` estado.

1. El enlace de ciclo de vida pone la instancia en estado de espera (`Pending:Wait`) y luego ejecuta una acción personalizada. La instancia permanece en estado de espera hasta que completes la acción del ciclo de vida o hasta que finalice el período de espera. Después de completar el enlace de ciclo de vida o de que el tiempo de espera expire, la instancia pasa al siguiente estado (`Pending:Proceed`).

1. La instancia entra en el `InService` estado. Sin embargo, antes de que la instancia alcance el `InService` estado, si el grupo Auto Scaling está asociado a un balanceador de cargas de Elastic Load Balancing, la instancia se registra en el balanceador de cargas.

# Preparación para agregar un enlace de ciclo de vida a un grupo de Auto Scaling
<a name="prepare-for-lifecycle-notifications"></a>

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 la inicialización](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) en la *Guía del usuario de Amazon EC2*. 
+ Para indicar a Amazon EC2 Auto Scaling que se ha completado la acción del ciclo de vida, debe añadir [CompleteLifecycleAction](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html)la llamada a la API 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 [Cómo completar una acción del ciclo de vida en un grupo de escalado automático](completing-lifecycle-hooks.md) y [Rol de IAM para aplicaciones que se ejecuten en instancias de Amazon EC2](us-iam-role.md).
+ Para permitir que Lambda señale a Amazon EC2 Auto Scaling cuando se complete la acción del ciclo de vida, debe añadir la llamada a la [CompleteLifecycleAction](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html)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](tutorial-lifecycle-hook-lambda.md).
+ 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](#lifecycle-hook-notification-target). 
**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, Amazon SQS o utilice AWS CLI el AWS CloudFormation, AWS Lambda o un SDK para añadir el enlace de ciclo de vida.

## Configuración de un destino de notificación para notificaciones de ciclo de vida
<a name="lifecycle-hook-notification-target"></a>

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.

Existen cuatro enfoques diferentes para implementar los objetivos de notificación para los enlaces de ciclo de vida:
+ **Amazon EventBridge**: recibe las notificaciones y realiza las acciones que desees.
+ **Amazon Simple Notification Service (Amazon SNS)**: cree un tema para publicar notificaciones. Los clientes pueden suscribirse al tema de SNS y recibir mensajes publicados mediante un protocolo compatible.
+ **Amazon Simple Queue Service (Amazon SQS)**: intercambie mensajes mediante un modelo de sondeo.
+ **AWS Lambda**: invoque una función de Lambda que ejecute la acción deseada.

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 a las que envía Amazon EC2 Auto Scaling. 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. 

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.

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

**Topics**
+ [Enrute las notificaciones a Lambda mediante EventBridge](#cloudwatch-events-notification)
+ [Recepción de notificaciones mediante Amazon SNS](#sns-notifications)
+ [Recepción de notificaciones mediante Amazon SQS](#sqs-notifications)
+ [Enrute las notificaciones directamente a AWS Lambda](#lambda-notification)
+ [Ejemplo de mensaje de notificación](#notification-message-example)

**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
<a name="cloudwatch-events-notification"></a>

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 EventBridge de evento del ciclo de vida 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](ec2-auto-scaling-event-reference.md).

**nota**  
Cuando se utiliza Consola de administración de AWS 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](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) 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](tutorial-lifecycle-hook-lambda.md). 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](https://console.aws.amazon.com/lambda/home#/functions) 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](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) en la *Guía para desarrolladores de AWS Lambda *.

1. Para crear una regla que coincida con los eventos de un lanzamiento de instancia, use el siguiente comando [put-rule](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/events/put-rule.html).

   ```
   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. Sustituya el **italics**texto por el nombre de su grupo de Auto Scaling.

   ```
   {
     "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](automating-ec2-auto-scaling-with-eventbridge.md).

1. Para especificar la función Lambda que se va a utilizar como destino de la regla, utilice el siguiente comando [put-targets](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/events/put-targets.html).

   ```
   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 `Arn` parámetro es el ARN de la función que creó en el paso 1.

1. Para agregar permisos que permitan a la regla invocar en Lambda de destino, utilice el siguiente comando de Lambda [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html). 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 desea que la regla utilice como destino.
   + *my-unique-id*es un identificador único que se define para describir la sentencia en la política de funciones de Lambda.
   + `source-arn`es 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.

1. Una vez que haya seguido estas instrucciones, vaya a [Incorporación de los enlaces de ciclo de vida en su grupo de escalado automático](adding-lifecycle-hooks.md) como siguiente paso.

### Recepción de notificaciones mediante Amazon SNS
<a name="sns-notifications"></a>

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](https://console.aws.amazon.com/sns/) o el comando [create-topic](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/create-topic.html). 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](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*. 

   ```
   aws sns create-topic --name my-sns-topic
   ```

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

1. 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/](https://console.aws.amazon.com/iam/).

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

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

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

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

1. Una vez que haya seguido estas instrucciones, vaya a [Adición de enlaces de ciclo de vida (AWS CLI)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-aws-cli) como siguiente paso.

### Recepción de notificaciones mediante Amazon SQS
<a name="sqs-notifications"></a>

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](https://console.aws.amazon.com/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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html) en la *Guía para desarrolladores de Amazon Simple Queue Service*. 

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

1. 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/](https://console.aws.amazon.com/iam/).

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

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

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

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

1. Una vez que haya seguido estas instrucciones, vaya a [Adición de enlaces de ciclo de vida (AWS CLI)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-aws-cli) como siguiente paso.

### Enrute las notificaciones directamente a AWS Lambda
<a name="lambda-notification"></a>

Puede utilizar una función de Lambda como destino de notificación cuando se produzca una acción del ciclo de vida. 

**Para dirigir las notificaciones AWS Lambda directamente a**

1. Abra la página de [Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija la función de Lambda deseada.

   Para crear una nueva función de Lambda, consulte [Crear la función de Lambda](lambda-custom-termination-policy.md#lambda-custom-termination-policy-create-function)

1. Seleccione la pestaña **Configuration** (Configuración) y luego **Permissions** (Permisos). 

1. Desplácese hasta **Política basada en recursos** y elija **Agregar permisos**. Una política basada en recursos se utiliza para conceder permisos para invocar la función a la entidad principal que se especifica en la política. En este caso, la entidad principal será el [rol vinculado al servicio de Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-service-linked-role.html) asociado al grupo de escalado automático.

1. En la sección **Policy statement (Instrucción de la política)**, configure sus permisos: 

   1. Elija **Cuenta de AWS**.

   1. En **Principal (Entidad principal)**, escriba el ARN del rol vinculado al servicio de llamada, por ejemplo, **arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling**.

   1. En **Acción**, elija **lambda: InvokeFunction**.

   1. En **Statement ID (ID de estado)**, escriba un ID de instrucción único, como **AllowInvokeByAutoScaling**.

   1. Seleccione **Save**. 

1. Una vez que haya seguido estas instrucciones, vaya a [Adición de enlaces de ciclo de vida (AWS CLI)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-aws-cli) como siguiente paso.

### Ejemplo de mensaje de notificación
<a name="notification-message-example"></a>

En esta sección se proporciona un ejemplo de notificación para Amazon SNS, Amazon SQS y. AWS Lambda

Mientras la instancia está en estado de espera, se publica un mensaje en Amazon SNS, Amazon SQS y en el destino de notificaciones. AWS Lambda 

El mensaje incluye la siguiente información:
+ `Origin`: un lugar del que proviene una instancia de EC2.
+ `Destination`: un lugar al que va a ir una instancia de EC2.
+ `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
Origin: EC2
Destination: AutoScalingGroup
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
<a name="test-notification-message-example"></a>

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 EventBridge to, [Referencia de evento de Amazon EC2 Auto Scaling](ec2-auto-scaling-event-reference.md) consulte.

# Controle la retención de instancias con políticas de ciclo de vida de las instancias
<a name="instance-lifecycle-policy"></a>

 Las políticas del ciclo de vida de las instancias brindan protección contra las terminaciones de Amazon EC2 Auto Scaling cuando se abandona una acción del ciclo de vida de la terminación. A diferencia de los enlaces del ciclo de vida por sí solos, las políticas del ciclo de vida de las instancias están diseñadas para garantizar que las instancias pasen a un estado retenido cuando los procedimientos de cierre correctos no se completen correctamente. 

## Cuándo usar las políticas del ciclo de vida de las instancias
<a name="when-to-use-instance-lifecycle-policies"></a>

 Utilice políticas de ciclo de vida de las instancias cuando el cierre correcto de la aplicación no sea opcional, sino obligatorio, y los cierres fallidos requieran una intervención manual. Los casos de uso comunes incluyen: 
+  Aplicaciones con buen estado que deben completar la persistencia de los datos antes de su finalización. 
+  Aplicaciones que requieren períodos de carga prolongados que pueden superar el tiempo de espera máximo de 48 horas durante el ciclo de vida. 
+  Las cargas de trabajo que gestionan datos confidenciales y cuya limpieza es incompleta o no se realiza correctamente pueden provocar la pérdida o la corrupción de los datos. 
+  Servicios de misión crítica en los que el cierre brusco afecta a la disponibilidad. 

 Para obtener más información sobre cómo gestionar correctamente la terminación de instancias, consulte. [Diseño de aplicaciones para gestionar sin problemas la terminación de instancias](gracefully-handle-instance-termination.md) 

## Cómo funcionan las políticas del ciclo de vida de las instancias con los ganchos del ciclo de vida
<a name="how-instance-lifecycle-policies-work"></a>

 Las políticas del ciclo de vida de las instancias funcionan en combinación con los ganchos del ciclo de vida de las terminaciones, no como sustitutos. El proceso sigue varias etapas: 

1.  **Se ejecutan las acciones del ciclo de vida de terminación.** Cuando Amazon EC2 Auto Scaling selecciona una instancia para su terminación, se invocan los enlaces del ciclo de vida de la terminación y la instancia entra en el estado para comenzar a ejecutar `Terminating:Wait` las acciones del ciclo de vida de la terminación. 

1.  **Comienza un intento de cierre correcto.** La aplicación, ya sea que se ejecute en la instancia o a través de un plano de control, recibirá la notificación de una acción relacionada con el ciclo de vida de finalización e iniciará procedimientos de cierre sin contratiempos, como agotar las conexiones, completar el trabajo en curso o transferir datos. 

1.  **Se han completado las acciones del ciclo de vida de terminación** Una acción del ciclo de vida de la rescisión puede completarse `CONTINUE` o `ABANDON` resultar en ella. 

1.  **La política del ciclo de vida de la instancia evalúa la situación.** Sin una política de ciclo de vida de la instancia configurada, la instancia finaliza inmediatamente, incluso si la acción del ciclo de vida de la instancia se completó con el `ABANDON` resultado. Con una política de ciclo de vida de la instancia configurada para conservar las instancias `TerminateHookAbandon` activas, la instancia pasa a un estado retenido si la acción del ciclo de vida de la instancia se completó con el `ABANDON` resultado. 

1.  **Las instancias retenidas están pendientes de una acción manual.** Las instancias en los estados retenidos siguen incurriendo en los cargos estándar de Amazon EC2. Estas instancias no cuentan para la capacidad deseada de su grupo de Auto Scaling, por lo que Auto Scaling lanza instancias de reemplazo para mantener el tamaño deseado. Las funciones de Auto Scaling, como la actualización de instancias y la vida útil máxima de las instancias, también ignorarán las instancias retenidas. Esto le permite completar los procedimientos de limpieza de forma manual, recuperar datos o investigar por qué se produjo un error en el cierre automático antes de finalizar la instancia de forma manual. 

1.  **Se produce la terminación manual.** Después de completar las acciones necesarias en la instancia retenida, debes llamar a la `TerminateInstanceInAutoScalingGroup` API para finalizar la instancia. 

# Configura la retención de instancias
<a name="configure-instance-retention"></a>

Configure su grupo Amazon EC2 Auto Scaling para conservar las instancias cuando las acciones del ciclo de vida de terminación fallen.

 Para usar políticas de ciclo de vida de la instancia en su grupo de Auto Scaling, también debe configurar un enlace de ciclo de vida de terminación. Si configuras una política de ciclo de vida de la instancia pero no tienes ningún enlace de ciclo de vida de terminación, la política no surtirá efecto. Las políticas del ciclo de vida de las instancias solo se aplicarán cuando se abandonen las acciones del ciclo de vida de la terminación, no cuando se completen correctamente con el `CONTINUE` resultado. 

 Las políticas del ciclo de vida de las instancias utilizan activadores de retención para determinar cuándo conservar una instancia. El `TerminateHookAbandon` desencadenante provoca la retención en varios escenarios: 
+  Cuando llamas explícitamente a la [ CompleteLifecycleAction](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_CompleteLifecycleAction.html)API con el `ABANDON` resultado. 
+  Cuando se agota el `ABANDON` tiempo de espera de una acción del ciclo de vida de terminación con un resultado predeterminado porque se ha agotado el tiempo de espera sin recibir ningún latido. 
+  Cuando se agota el tiempo de espera global de una acción relacionada con el ciclo de vida de una rescisión cuyo resultado `ABANDON` predeterminado es de 48 horas o 100 veces el tiempo de espera del latido, lo que sea menor 

------
#### [ Console ]

**Para configurar la retención de instancias**

1. Abra la consola Amazon EC2 Auto Scaling

1. Cree su grupo de Auto Scaling (la política de ciclo de vida de la instancia tiene el valor predeterminado de Terminate)

1. Ve a la página de detalles de tu grupo de Auto Scaling y selecciona la pestaña **Administración de instancias**

1. En **Política de ciclo de vida de las instancias para los enlaces del ciclo** de vida, elija **Retain**

1. Cree sus enlaces durante el ciclo de vida de las terminaciones con:
   + La transición del ciclo de vida está configurada para **terminar la instancia**
   + El resultado predeterminado está establecido en **Abandon**

------
#### [ AWS CLI ]

**Para configurar la retención de instancias**  
 Usa el [create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)comando con una política de ciclo de vida de la instancia: 

```
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateName=my-template,Version='$Latest' \
--min-size 1 \
--max-size 3 \
--desired-capacity 2 \
--vpc-zone-identifier subnet-12345678 \
--instance-lifecycle-policy file://lifecycle-policy.json
```

Contenido de lifecycle-policy.json:

```
{
    "RetentionTriggers": {
        "TerminateHookAbandon": "retain"
    }
}
```

**Para agregar un enlace de ciclo de vida de terminación**  
Utilice el comando [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html):

```
aws autoscaling put-lifecycle-hook \
--lifecycle-hook-name my-termination-hook \
--auto-scaling-group-name my-asg \
--lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
--default-result ABANDON \
--heartbeat-timeout 300
```

------

# Administre las instancias retenidas
<a name="manage-retained-instances"></a>

 Supervise y controle las instancias de Amazon EC2 que se han trasladado a un estado retenido. Utilice CloudWatch las métricas para realizar un seguimiento de las instancias retenidas y, a continuación, cancele manualmente las instancias retenidas tras completar sus acciones personalizadas. 

 Las instancias retenidas no se tienen en cuenta para la capacidad deseada de su grupo de Amazon EC2 Auto Scaling. Cuando una instancia entra en un estado retenido, Auto Scaling lanza una instancia de reemplazo para mantener la capacidad deseada. Por ejemplo, supongamos que su grupo de Auto Scaling tiene una capacidad deseada de 10. Cuando una instancia entra en ese `Terminating:Retained` estado, Auto Scaling lanza una instancia de reemplazo para mantener la capacidad deseada de 10. Ahora tiene 11 instancias en ejecución en total: 10 en su grupo activo más 1 instancia retenida. Se aplicarán los cargos estándar de Amazon EC2 para las 11 instancias hasta que cancele manualmente la instancia retenida. 

## Estados del ciclo de vida de las instancias retenidas
<a name="instance-lifecyle-states-of-retained-instances"></a>

 Comprenda cómo las instancias pasan por los estados del ciclo de vida cuando se utilizan las políticas del ciclo de vida de las instancias. Las instancias siguen un camino específico desde la terminación normal, pasando por la retención, hasta la terminación definitiva. 

*Cuando se activa la retención, las instancias pasan por los siguientes estados:*

1. `Terminating`- Comienza la terminación normal

1. `Terminating:Wait`- Se ejecuta el enlace del ciclo de vida

1. `Terminating:Proceed`- Conclusión de las acciones del ciclo de vida (independientemente de si se realizaron correctamente o no)

1. `Terminating:Retained`- El enlace falla y la instancia se conserva para una intervención manual

Las instancias de Warm Pool adoptan diferentes rutas de estado de ciclo de vida según el escenario:

*Instancias que vuelven a caer en la piscina caliente:*

1. `Warmed:Pending`- Comienza la transición normal a una piscina caliente

1. `Warmed:Pending:Wait`- Se ejecuta el enlace del ciclo de vida

1. `Warmed:Pending:Proceed`- Conclusión de las acciones del ciclo de vida (independientemente de si se realizaron correctamente o no)

1. `Warmed:Pending:Retained`- El enlace falla y la instancia se conserva para una intervención manual

*Casos en los que se termina en una piscina caliente:*

1. `Warmed:Terminating`- Comienza la terminación normal

1. `Warmed:Terminating:Wait`- Se ejecuta el enlace del ciclo de vida

1. `Warmed:Terminating:Proceed`- Conclusión de las acciones del ciclo de vida (independientemente de si se realizaron correctamente o no)

1. `Warmed:Terminating:Retained`- El enlace falla y la instancia se conserva para una intervención manual

## Supervise las instancias retenidas
<a name="monitor-retained-instances"></a>

 Dado que las instancias Amazon EC2 retenidas conllevan costes y requieren una intervención manual, es fundamental supervisarlas. Amazon EC2 Auto Scaling proporciona CloudWatch varias métricas para realizar un seguimiento de las instancias retenidas. 

Habilite las métricas grupales para realizar un seguimiento de las instancias retenidas:

```
aws autoscaling enable-metrics-collection \
--auto-scaling-group-name my-asg \
--metrics GroupTerminatingRetainedInstances
```

Las métricas disponibles son:
+  `GroupTerminatingRetainedInstances`muestra el número de instancias en el `Terminating:Retained` estado. 
+  `GroupTerminatingRetainedCapacity`muestra las unidades de capacidad representadas por las instancias en el `Terminating:Retained` estado. 
+  `WarmPoolTerminatingRetainedCapacity`rastrea las instancias retenidas que terminan en la piscina caliente. 
+  `WarmPoolPendingRetainedCapacity`rastrea las instancias retenidas que regresaban a la piscina caliente. 

 También puede consultar las actividades de escalado de su grupo de Amazon EC2 Auto Scaling para saber por qué se retuvieron las instancias. Busque las actividades de terminación `StatusCode: Cancelled` y los mensajes con el motivo de su estado que indiquen fallas en los enlaces del ciclo de vida: 

```
aws autoscaling describe-scaling-activities \
--auto-scaling-group-name my-asg
```

 Te recomendamos crear CloudWatch alarmas en estas métricas para que te avisen cuando las instancias pasen a un estado retenido. Esto le ayuda a realizar un seguimiento de las implicaciones en materia de costes y garantiza que no se olvide de limpiar las instancias que requieren una intervención manual. 

## Termine las instancias retenidas
<a name="terminate-retained-instances"></a>

Tras completar las acciones personalizadas, cancela las instancias retenidas llamando a la [ TerminateInstanceInAutoScalingGroup](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html)API: 

```
aws autoscaling terminate-instance-in-auto-scaling-group \
--instance-id i-1234567890abcdef0 \
--no-should-decrement-desired-capacity
```

# Recuperar el estado de ciclo de vida de destino a través de los metadatos de instancia
<a name="retrieving-target-lifecycle-state-through-imds"></a>

Cada instancia de Auto Scaling que se lanza pasa por varios estados de ciclo de vida. Para invocar acciones personalizadas desde el interior de una instancia para que actúen en determinadas transiciones de estado de ciclo de vida, puede hacerlo recuperando el estado de ciclo de vida de destino a través de los metadatos de instancia. 

Por ejemplo, es posible que necesite un mecanismo que detecte la terminación de la instancia desde dentro de la instancia para ejecutar parte del código en la instancia antes de que finalice. Para ello, escriba un código que sondee el estado del ciclo de vida de una instancia directamente desde la instancia. A continuación, puede agregar un enlace de ciclo de vida al grupo de escalado automático para mantener la instancia en ejecución hasta que el código envíe el comando **complete-lifecycle-action** para continuar. 

El ciclo de vida de las instancias de Auto Scaling tiene dos estados estables principales (`InService` y `Terminated`) y dos estados estables secundarios (`Detached` y `Standby`). Si utiliza un grupo de calentamiento, el ciclo de vida tiene cuatro estados estables adicionales: `Warmed:Hibernated`, `Warmed:Running`, `Warmed:Stopped` y `Warmed:Terminated`.

Cuando una instancia se prepara para pasar a uno de los estados estables anteriores, Amazon EC2 Auto Scaling actualiza el valor del elemento `autoscaling/target-lifecycle-state` de los metadatos de instancia. Para obtener el estado de ciclo de vida de destino desde la propia instancia, debe utilizar el Servicio de metadatos de instancia para recuperarlo desde los metadatos de instancia. 

**nota**  
Los *metadatos de instancia* son datos de una instancia de Amazon EC2 que las aplicaciones pueden utilizar para consultar información sobre esa instancia. El *Servicio de metadatos de instancia* es un componente de la instancia que el código local utiliza para acceder a los metadatos de instancia. El código local puede incluir scripts de datos de usuario o aplicaciones que se ejecuten en la instancia.

El código local puede acceder a los metadatos de la instancia desde una instancia en ejecución mediante uno de estos dos métodos: Instance Metadata Service versión 1 (IMDSv1) o Instance Metadata Service versión 2 (IMDSv2). IMDSv2utiliza solicitudes orientadas a la sesión y mitiga varios tipos de vulnerabilidades que podrían utilizarse para intentar acceder a los metadatos de la instancia. Para obtener más información sobre estos dos métodos, consulte [Uso IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) en la Guía del *usuario de Amazon EC2*.

------
#### [ IMDSv2 ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state
```

------
#### [ IMDSv1 ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state
```

------

A continuación, se muestra un ejemplo del resultado.

```
InService
```

El estado de ciclo de vida de destino es el estado al que va a pasar la instancia. El estado de ciclo de vida actual es el estado en el que se encuentra la instancia. Ambos pueden ser el mismo una vez que se complete la acción de ciclo de vida y la instancia finalice su paso al estado de ciclo de vida de destino. No se puede recuperar el estado de ciclo de vida actual de la instancia a partir de los metadatos de instancia.

Amazon EC2 Auto Scaling comenzó a generar el estado de ciclo de vida de destino el 10 de marzo de 2022. Si la instancia pasa a alguno de los estados de ciclo de vida de destino después de esa fecha, el elemento del estado de ciclo de vida de destino aparece en los metadatos de instancia. En caso contrario, no aparece, y verá un error HTTP 404.

Para obtener instrucciones acerca de la recuperación de metadatos de instancia, consulte [Recuperar metadatos de instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html) en la *Guía del usuario de Amazon EC2*.

Para ver un tutorial que muestra cómo crear un enlace de ciclo de vida con una acción personalizada en un script de datos de usuario que utiliza el estado de ciclo de vida de destino, consulte [Tutorial: Uso del script de datos y los metadatos de la instancia para recuperar el estado del ciclo de vida](tutorial-lifecycle-hook-instance-metadata.md).

**importante**  
Para asegurarse de que puede invocar una acción personalizada lo antes posible, su código local debería sondear el IMDS con frecuencia y volver a intentarlo en caso de errores.

# Incorporación de los enlaces de ciclo de vida en su grupo de escalado automático
<a name="adding-lifecycle-hooks"></a>

Puede agregar enlaces del ciclo de vida al grupo de Auto Scaling para poner las instancias de Auto Scaling en estado de espera y llevar a cabo acciones personalizadas en ellas. Las acciones personalizadas se realizan a medida que se lanzan las instancias o antes de que finalicen. Las instancias permanecen en estado de espera hasta que se completa la acción del ciclo de vida o finaliza el periodo de espera.

Después de crear un grupo de Auto Scaling a partir de Consola de administración de AWS, puede agregarle uno o más enlaces de ciclo de vida, hasta un total de 50 enlaces de ciclo de vida. También puede usar el AWS CLI CloudFormation, o un SDK para agregar enlaces de ciclo de vida a un grupo de Auto Scaling a medida que lo crea.

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 AWS Lambda o Amazon SQS, puede utilizar [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html)el comando, como se muestra en los ejemplos de este tema.

**Topics**
+ [Adición de enlaces de ciclo de vida (consola)](#adding-lifecycle-hooks-console)
+ [Adición de enlaces de ciclo de vida (AWS CLI)](#adding-lifecycle-hooks-aws-cli)

## Adición de enlaces de ciclo de vida (consola)
<a name="adding-lifecycle-hooks-console"></a>

Siga estos pasos para agregar enlaces de ciclo de vida a un grupo de escalado automático. Para agregar enlaces de ciclo de vida a fin de escalar horizontalmente (lanzar instancias) y reducir horizontalmente (terminar instancias o regresarlas a un grupo en caliente), debe crear dos enlaces independientes. 

Antes de comenzar, confirme que ha configurado una acción personalizada, según sea necesario, como se detalla en [Preparación para agregar un enlace de ciclo de vida a un grupo de Auto Scaling](prepare-for-lifecycle-notifications.md).

**Agregación de un enlace de ciclo de vida para escalar horizontalmente**

1. Abra la consola Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)y seleccione **Auto Scaling Groups** en el panel de navegación.

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 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 del enlace de ciclo de vida)**, especifique un nombre para el enlace de ciclo de vida.

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

   1. En **Tiempo de espera del latido**, especifique la cantidad de tiempo en segundos que las instancias pueden permanecer en estado de espera al escalar horizontalmente antes de que se agote el tiempo de espera del enlace. El rango va de `30` a `7200` segundos. Establecer un periodo de tiempo de espera prolongado proporciona más tiempo para que se complete la acción personalizada. A continuación, si finaliza antes de que finalice el período de espera, envíe el [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)comando para permitir que la instancia pase al siguiente estado. 

   1. En **Default result** (Resultado predeterminado), especifique la acción que se debe realizar cuando termine el tiempo de espera del enlace de ciclo de vida o cuando se produzca un error inesperado. Puede seleccionar **CONTINUAR** o **ABANDONAR**.
      + Si elige **CONTINUAR**, el grupo de escalado automático puede continuar con cualquier otro enlace de ciclo de vida y luego poner la instancia en servicio.
      + Si elige **ABANDONAR**, el grupo de escalado automático detiene las acciones restantes y termina las instancias de inmediato.

   1. (Opcional) En **Metadatos de notificación**, especifique cualquier otra información que desee incluir cuando Amazon EC2 Auto Scaling envíe un mensaje al destino de notificación. 

1. Seleccione **Crear**.

**Agregación de un enlace de ciclo de vida para reducir horizontalmente**

1. Elija **Crear enlace de ciclo de vida** para continuar donde lo dejó después de crear un enlace de ciclo de vida para escalar horizontalmente.

1. Para definir un enlace de ciclo de vida para reducir horizontalmente (instancias que finalizan o regresan a un grupo de calentamiento), haga lo siguiente:

   1. En **Lifecycle hook name (Nombre del enlace de ciclo de vida)**, especifique un nombre para el enlace de ciclo de vida.

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

   1. En **Tiempo de espera del latido**, especifique la cantidad de tiempo en segundos que las instancias pueden permanecer en estado de espera al escalar horizontalmente antes de que se agote el tiempo de espera del enlace. Recomendamos un período de espera breve, de `30` `120` unos segundos, en función del tiempo que necesite para realizar cualquier tarea final, como extraer los registros de EC2. CloudWatch

   1. En **Default result** (Resultado predeterminado), especifique la acción que el grupo de escalado automático va a realizar cuando transcurra el tiempo de espera o si se produce un error inesperado. Tanto **ABANDON** (Abandonar) como **CONTINUE** (Continuar) permiten que la instancia se termine. 
      + Si elige **CONTINUE** (Continuar), el grupo de escalado automático puede continuar con todas las acciones restantes, como otros enlaces de ciclo de vida, antes de la terminación. 
      + Si elige **ABANDONAR**, el grupo de escalado automático termina la instancia de inmediato. 

   1. (Opcional) En **Metadatos de notificación**, especifique cualquier otra información que desee incluir cuando Amazon EC2 Auto Scaling envíe un mensaje al destino de notificación.

1. Seleccione **Crear**.

## Adición de enlaces de ciclo de vida (AWS CLI)
<a name="adding-lifecycle-hooks-aws-cli"></a>

Puede crear y actualizar enlaces de ciclo de vida utilizando el comando [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html).

Para realizar una acción de escalado ascendente, utilice el siguiente comando.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-launch-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_LAUNCHING
```

Para realizar una acción de reducción horizontal, utilice el siguiente comando.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
```

Para recibir notificaciones mediante Amazon SNS o Amazon SQS, agregue las opciones `--notification-target-arn` y `--role-arn`. Para recibir notificaciones mediante AWS Lambda, añada el. `--notification-target-arn`

En el siguiente ejemplo, se crea un enlace de ciclo de vida que especifica un tema de SNS denominado `my-sns-topic` como destino de notificación.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook  \
  --auto-scaling-group-name my-asg \
  --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING \
  --notification-target-arn arn:aws:sns:region:123456789012:my-sns-topic \
  --role-arn arn:aws:iam::123456789012:role/my-notification-role
```

El tema recibe una notificación de prueba con el siguiente par de clave-valor.

```
"Event": "autoscaling:TEST_NOTIFICATION"
```

De forma predeterminada, el [put-lifecycle-hook](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/put-lifecycle-hook.html)comando crea un enlace de ciclo de vida con un tiempo de espera de `3600` segundos (una hora). 

Para cambiar el tiempo de espera de latido de un enlace de ciclo de vida existente, agregue la opción `--heartbeat-timeout`, como se muestra en el siguiente ejemplo.

```
aws autoscaling put-lifecycle-hook --lifecycle-hook-name my-termination-hook \
  --auto-scaling-group-name my-asg --heartbeat-timeout 120
```

Si una instancia ya está en estado de espera, puedes evitar que se agote el tiempo de espera del enlace del ciclo de vida grabando un latido mediante el comando [record-lifecycle-action-heartbeat](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/record-lifecycle-action-heartbeat.html)CLI. De esta forma, se incrementa el tiempo de espera en el valor especificado cuando creó el enlace de ciclo de vida. Si terminas antes de que finalice el período de espera, puedes enviar el comando [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)CLI para permitir que la instancia pase al siguiente estado. Para obtener más información y ejemplos, consulta [Cómo completar una acción del ciclo de vida en un grupo de escalado automático](completing-lifecycle-hooks.md).

# Cómo completar una acción del ciclo de vida en un grupo de escalado automático
<a name="completing-lifecycle-hooks"></a>

Cuando un grupo de Auto Scaling responde a un evento del ciclo de vida, pone a la instancia en estado de espera y envía una notificación del evento. Mientras la instancia se encuentra en estado de espera, puede realizar una acción personalizada.

Resulta útil completar la acción del ciclo de vida con un resultado de `CONTINUE` si se termina antes de que venza el tiempo de espera. Si no completa la acción del ciclo de vida, el enlace de ciclo de vida pasa al estado que especificó para **Resultado predeterminado** una vez finalizado el período de tiempo de espera.

**Topics**
+ [Completar una acción del ciclo de vida (manual)](#completing-lifecycle-hooks-aws-cli)
+ [Completar una acción del ciclo de vida (automático)](#completing-lifecycle-hooks-automatic)

## Completar una acción del ciclo de vida (manual)
<a name="completing-lifecycle-hooks-aws-cli"></a>

El siguiente procedimiento corresponde a la interfaz de línea de comandos y no se admite en la consola. La información que debe reemplazarse, como el ID de la instancia o el nombre de un grupo de Auto Scaling, aparece en cursiva. 

**Para completar una acción del ciclo de vida (AWS CLI)**

1. Si necesita más tiempo para completar la acción personalizada, utilice el comando [record-lifecycle-action-heartbeat](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/record-lifecycle-action-heartbeat.html) para reiniciar el periodo de tiempo de espera y mantener la instancia en estado de espera. Por ejemplo, si el periodo de tiempo de espera es una hora y llama a este comando después de 30 minutos, la instancia permanece en estado de espera durante una hora más, es decir, 90 minutos en total. 

   Puede especificar el token de acción del ciclo de vida que recibió con la [notificación](prepare-for-lifecycle-notifications.md#notification-message-example), como se muestra en el siguiente comando.

   ```
   aws autoscaling record-lifecycle-action-heartbeat --lifecycle-hook-name my-launch-hook \
     --auto-scaling-group-name my-asg --lifecycle-action-token bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635
   ```

   También puede especificar el ID de la instancia que recibió con la [notificación](prepare-for-lifecycle-notifications.md#notification-message-example), como se muestra en el siguiente comando.

   ```
   aws autoscaling record-lifecycle-action-heartbeat --lifecycle-hook-name my-launch-hook \
     --auto-scaling-group-name my-asg --instance-id i-1a2b3c4d
   ```

1. Si finaliza la acción personalizada antes de que finalice el período de tiempo de espera, utilice el [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)comando para que el grupo de Auto Scaling pueda seguir lanzando o finalizando la instancia. Puede especificar el token de acción del ciclo de vida, tal y como se muestra en el siguiente comando.

   ```
   aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE \
     --lifecycle-hook-name my-launch-hook --auto-scaling-group-name my-asg \
     --lifecycle-action-token bcd2f1b8-9a78-44d3-8a7a-4dd07d7cf635
   ```

   También puede especificar el ID de la instancia, tal y como se muestra en el siguiente comando.

   ```
   aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE \
     --instance-id i-1a2b3c4d --lifecycle-hook-name my-launch-hook \
     --auto-scaling-group-name my-asg
   ```

## Completar una acción del ciclo de vida (automático)
<a name="completing-lifecycle-hooks-automatic"></a>

Si tiene un script de datos de usuario que configura las instancias después del lanzamiento, no es necesario que complete las acciones del ciclo de vida de forma manual. Puede añadir el [complete-lifecycle-action](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/complete-lifecycle-action.html)comando al script. El script puede recuperar el ID de instancia de los metadatos de instancia e indicar a Amazon EC2 Auto Scaling cuando los scripts de arranque se hayan completado con éxito. 

Si aún no lo ha hecho, actualice el script para recuperar el ID de instancia de la instancia de los metadatos de instancia. Para obtener más información, consulte [Recuperar metadatos de instancia](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html) en la *Guía del usuario de Amazon EC2*.

Si utiliza Lambda, también puede configurar una devolución de llamada en el código de su función para permitir que el ciclo de vida de la instancia continúe si la acción personalizada se realiza correctamente. Para obtener más información, consulte [Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda](tutorial-lifecycle-hook-lambda.md).

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

# Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda
<a name="tutorial-lifecycle-hook-lambda"></a>

En este ejercicio, crearás una EventBridge regla de Amazon que incluye un patrón de filtro que, cuando coincide, invoca una AWS Lambda función como objetivo de la regla. Proporcionamos el patrón de filtro y el código de la función de ejemplo que se van a usar. 

Si todo está configurado correctamente, al final de este tutorial, la función Lambda realiza una acción personalizada cuando se inician las instancias. La acción personalizada simplemente registra el evento en el flujo de registro de CloudWatch registros asociado a la función Lambda.

La función Lambda también realiza una devolución de llamada para permitir que el ciclo de vida de la instancia continúe si esta acción se completa correctamente, pero permite que la instancia deje de iniciarse y termine si la acción falla.

En la siguiente ilustración se resume el flujo de un evento de escalado horizontal cuando utilice una función de Lambda 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 una función de Lambda para realizar una acción personalizada.\]](http://docs.aws.amazon.com/es_es/autoscaling/ec2/userguide/images/lifecycle-hook-lambda-function.png)


**nota**  
Según su caso de uso, puede configurar un enlace de ciclo de vida siguiendo los pasos que se indican a continuación y creando una EventBridge regla. O bien, puede usar una función Lambda para configurar un enlace de ciclo de vida directamente sin crear una EventBridge regla.

**Topics**
+ [Requisitos previos](#lambda-hello-world-tutorial-prerequisites)
+ [Paso 1: Crear un rol de IAM con permisos para completar acciones de ciclo de vida](#lambda-create-iam-role)
+ [Paso 2: creación de una función de Lambda](#lambda-create-hello-world-function)
+ [Paso 3: Crear una regla EventBridge](#lambda-create-rule)
+ [Paso 4: agregar un enlace de ciclo de vida](#lambda-add-lifecycle-hook)
+ [Paso 5: probar y verificar el evento](#lambda-testing-hook-notifications)
+ [Paso 6: limpiar](#lambda-lifecycle-hooks-tutorial-cleanup)
+ [Recursos relacionados](#lambda-lifecycle-hooks-tutorial-related-resources)

## Requisitos previos
<a name="lambda-hello-world-tutorial-prerequisites"></a>

Antes de comenzar este tutorial, cree un grupo de Auto Scaling, si aún no dispone de uno. Para crear un grupo de escalado automático, abra la [página Grupos de escalado automático](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) en la consola de Amazon EC2 y elija **Crear grupo de escalado automático**.

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

Antes de crear una función Lambda, primero debe crear un rol de ejecución y una política de permisos para permitir que Lambda complete los enlaces de 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 **Documento de política**, pegue el siguiente documento de política en el cuadro y sustituya el texto por su número de cuenta y el nombre de su grupo de Auto Scaling. **italics**

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

****  

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

------

1. Elija **Siguiente**. 

1. Para **Nombre de la política**, introduzca **LogAutoScalingEvent-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 **Lambda** y, luego, elija **Next** (Siguiente). 

1. En **Añadir permisos**, elija la política que creó (**LogAutoScalingEvent-policy**) y el nombre **AWSLambdaBasicExecutionRole**de la política. A continuación, elija **Siguiente**. 
**nota**  
La **AWSLambdaBasicExecutionRole**política tiene los permisos que la función necesita para escribir registros en CloudWatch Logs.

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

## Paso 2: creación de una función de Lambda
<a name="lambda-create-hello-world-function"></a>

Cree una función Lambda que actúe como destino de los eventos. La función Lambda de ejemplo, escrita en Node.js, se invoca EventBridge cuando Amazon EC2 Auto Scaling emite un evento coincidente.

**Cómo crear una función de Lambda**

1. Abra la página [Functions (Funciones)](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija **Create function (Crear función)** y **Author from scratch (Crear desde cero)**.

1. En **Basic information (Información básica)**, para **Function name (Nombre de función)**, escriba **LogAutoScalingEvent**.

1. En **Tiempo de ejecución**, elija **Node.js 18.x**.

1. Elija **Cambiar el rol de ejecución predeterminado** y, a continuación, en **Rol de ejecución**, elija **Usar un rol existente**.

1. **En **Función existente**, elija LogAutoScalingEvent -role.**

1. Deje los demás valores predeterminados.

1. Seleccione **Creación de función**. Volverá al código y la configuración de la función. 

1. Con la función `LogAutoScalingEvent` aún abierta en la consola, en **Código fuente**, en el editor, pegue el siguiente código de muestra en el archivo denominado index.mjs.

   ```
   import { AutoScalingClient, CompleteLifecycleActionCommand } from "@aws-sdk/client-auto-scaling";
   export const handler = async(event) => {
     console.log('LogAutoScalingEvent');
     console.log('Received event:', JSON.stringify(event, null, 2));
     var autoscaling = new AutoScalingClient({ region: event.region });
     var eventDetail = event.detail;
     var params = {
       AutoScalingGroupName: eventDetail['AutoScalingGroupName'], /* required */
       LifecycleActionResult: 'CONTINUE', /* required */
       LifecycleHookName: eventDetail['LifecycleHookName'], /* required */
       InstanceId: eventDetail['EC2InstanceId'],
       LifecycleActionToken: eventDetail['LifecycleActionToken']
     };
     var response;
     const command = new CompleteLifecycleActionCommand(params);
     try {
       var data = await autoscaling.send(command);
       console.log(data); // successful response
       response = {
         statusCode: 200,
         body: JSON.stringify('SUCCESS'),
       };
     } catch (err) {
       console.log(err, err.stack); // an error occurred
       response = {
         statusCode: 500,
         body: JSON.stringify('ERROR'),
       };
     }
     return response;
   };
   ```

   Este código simplemente registra el evento para que, al final de este tutorial, pueda ver aparecer un evento en el flujo de registro de CloudWatch registros asociado a esta función de Lambda. 

1. Elija **Implementar**. 

## Paso 3: Crear una regla EventBridge
<a name="lambda-create-rule"></a>

Cree una EventBridge regla para ejecutar la función Lambda. Para obtener más información acerca del uso de EventBridge, consulte [Se usa EventBridge para gestionar eventos de Auto Scaling](automating-ec2-auto-scaling-with-eventbridge.md).

**Para crear una regla con la consola**

1. Abra la [consola de EventBridge](https://console.aws.amazon.com/events/).

1. En el panel de navegación, seleccione **Reglas**.

1. Seleccione **Creación de regla**.

1. En **Definir detalle de la regla**, haga lo siguiente:

   1. En **Nombre**, escriba **LogAutoScalingEvent-rule**.

   1. En **Bus de eventos**, elija **Predeterminado**. Cuando un Servicio de AWS elemento de su cuenta genera un evento, siempre va al bus de eventos predeterminado de su cuenta.

   1. En **Tipo de regla**, elija **Regla con un patrón de evento**.

   1. Elija **Siguiente**.

1. En **Crear patrón de evento**, realice una de las siguientes acciones:

   1. **En Origen del evento**, selecciona **AWS eventos o eventos EventBridge asociados**.

   1. Desplácese hacia abajo hasta **Patrón de eventos** y haga lo siguiente:

   1. 

      1. En **Origen del evento**, elija **Servicios de AWS**.

      1. En **Servicio de AWS**, elija **Auto Scaling**.

      1. En **Event Type (Tipo de evento)**, seleccione **Instance Launch and Terminate (Lanzamiento y terminación de la instancia)**.

      1. De forma predeterminada, la regla coincide con cualquier evento de escalado o reducción horizontal. Para crear una regla que le notifique cuando hay un evento de escalado horizontal y una instancia se pone en estado de espera por un enlace de ciclo de vida, elija **Specific instance event(s)** (Eventos de instancia específicos) y seleccione **EC2 Instance-launch Lifecycle Action** (Acción de ciclo de vida de lanzamiento de instancia EC2).

      1. De forma predeterminada, la regla coincide con cualquier grupo de Auto Scaling en la región. Para que la regla coincida con un grupo de escalado automático específico, elija **Nombres de grupos específicos** y, a continuación, seleccione el grupo.

      1. Elija **Siguiente**.

1. En **Seleccionar destino**, realice una de las siguientes acciones:

   1. Para **Target types** (Tipos de destino), elija **Servicio de AWS**.

   1. En **Seleccione destino**, elija **Función de Lambda**.

   1. En **Función**, elija **LogAutoScalingEvent**.

   1. Seleccione **Next (Siguiente)** dos veces.

1. En la página **Revisar y crear**, elija **Crear regla**.

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

En esta sección, agrega un enlace de ciclo de vida para que Lambda ejecute la función en instancias en el momento del inicio.

**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 **LogAutoScalingEvent-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 latidos)**, ingrese **300** para indicar la cantidad de segundos que se debe esperar una devolución de llamada desde la función Lambda.

   1. En **Default result (Resultado predeterminado)**, elija **ABANDON (Abandonar)**. Esto significa que el grupo de Auto Scaling terminará una nueva instancia si el enlace agota el tiempo de espera sin recibir una devolución de llamada de la función Lambda.

   1. (Opcional) Deje la opción **Notification metadata (Metadatos de notificación)** vacía. Los datos de eventos a los que pasamos EventBridge contienen toda la información necesaria para invocar la función Lambda.

1. Seleccione **Crear**.

## Paso 5: probar y verificar el evento
<a name="lambda-testing-hook-notifications"></a>

Para probar el evento, actualice el grupo de Auto Scaling aumentando la capacidad deseada del grupo de Auto Scaling en 1. Se invoca la función Lambda pocos segundos después de aumentar la capacidad deseada.

**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 de verificación situada junto al grupo de Auto Scaling para ver los detalles en un panel inferior y seguir 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 se invocó la función Lambda.

**Para ver la salida de la función Lambda**

1. Abra la [página de grupos de registros](https://console.aws.amazon.com/cloudwatch/home#logs:) de la CloudWatch consola.

1. Seleccione el nombre del grupo de registros para la función Lambda (`/aws/lambda/LogAutoScalingEvent`).

1. Seleccione el nombre del flujo de registros para ver los datos proporcionados por la función para la acción del ciclo de vida.

A continuación, puede verificar que la instancia se haya iniciado correctamente a partir de 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. 
   + Si la acción se completó correctamente, la actividad de escalado tendrá el estado Successful (Correcto).
   + Si hubo un error, después de esperar unos minutos, verá una actividad de escalado con el estado Cancelled (Cancelado) y el mensaje: “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” (La instancia no pudo completar la acción del ciclo de vida del usuario: se abandonó la acción del ciclo de vida con token e85eb647-4fe0-4909-b341-a6c42EJEMPLO: la acción del ciclo de vida se completó con el resultado ABANDON).

**Para disminuir el tamaño del grupo de Auto Scaling**  
Si no necesita la instancia adicional que lanzó para esta prueba, puede abrir la pestaña **Details (Detalles)** y reducir el valor **Desired capacity (Capacidad deseada)** en 1.

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

Si ha terminado de trabajar con los recursos que ha creado para este tutorial, siga los pasos 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 (`LogAutoScalingEvent-hook`).

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

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

**Para eliminar la EventBridge regla de Amazon**

1. Abre la [página de reglas](https://console.aws.amazon.com/events/home?#/rules) en la EventBridge consola de Amazon.

1. En **Event bus (Bus de eventos)**, elija el bus de eventos asociado a la regla (`Default`).

1. Active la casilla que hay junto a la regla (`LogAutoScalingEvent-rule`).

1. Elija **Eliminar**.

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

Si ha terminado de trabajar con la función de ejemplo, elimínela. También puede eliminar el grupo de registro que almacena los registros de la función, y el rol de ejecución y la política de permisos que ha creado.

**Para eliminar una función de Lambda**

1. Abra la página [Functions (Funciones)](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija la función (`LogAutoScalingEvent`).

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

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

**Para eliminar el grupo de registros**

1. Abre la [página de grupos de registros](https://console.aws.amazon.com/cloudwatch/home#logs:) de la CloudWatch consola.

1. Seleccione el grupo de registros de la función (`/aws/lambda/LogAutoScalingEvent`).

1. Elija **Acciones**, **Eliminar grupo(s) de registro(s)**.

1. En el cuadro de diálogo **Eliminar grupos de registros**, elija **Eliminar**.

**Cómo eliminar el rol de ejecución**

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 (`LogAutoScalingEvent-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ó (`LogAutoScalingEvent-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="lambda-lifecycle-hooks-tutorial-related-resources"></a>

Los siguientes temas relacionados pueden resultarle útiles a la hora de crear EventBridge reglas basadas en los eventos que ocurren en las instancias de su grupo de Auto Scaling.
+ [Se usa EventBridge para gestionar eventos de Auto Scaling](automating-ec2-auto-scaling-with-eventbridge.md). En esta sección, se muestran ejemplos de eventos para otros casos de uso, incluidos los eventos para reducir horizontalmente.
+ [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).

Para ver un tutorial que muestra cómo usar el Servicio de metadatos de instancias (IMDS) para invocar una acción desde la propia instancia, consulte [Tutorial: Uso del script de datos y los metadatos de la instancia para recuperar el estado del ciclo de vida](tutorial-lifecycle-hook-instance-metadata.md).