

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

# Tutorial: 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).