Uso de Amazon EC2 Auto Scaling con EventBridge - Amazon EC2 Auto Scaling

Uso de Amazon EC2 Auto Scaling con EventBridge

Amazon EventBridge, antiguamente denominado CloudWatch Events, le ayuda a configurar reglas basadas en eventos que monitorean los recursos e inician acciones de destino que utilizan otros servicios de AWS.

Los eventos de Amazon EC2 Auto Scaling se envían a EventBridge casi en tiempo real. Puede establecer reglas de EventBridge que desencadenen acciones y notificaciones programáticas en respuesta a una variedad de estos eventos. Por ejemplo, mientras las instancias están en proceso de lanzamiento o terminación, puede desencadenar una función AWS Lambda para realizar una tarea preconfigurada. O bien, puede desencadenar notificaciones a un tema de Amazon SNS para monitorear el progreso de la actualización de una instancia y realizar validaciones en puntos de control específicos.

Además de invocar funciones Lambda y notificar temas de Amazon SNS, EventBridge admite otros tipos de destinos y acciones, como la transmisión de eventos a Amazon Kinesis Streams, la activación de máquinas de estado AWS Step Functions, y la invocación del comando de ejecución de AWS Systems Manager. Para obtener más información sobre los destinos admitidos, consulte Destinos de Amazon EventBridge en la Guía del usuario de Amazon EventBridge.

Para obtener más información acerca de EventBridge, consulte Introducción a Amazon EventBridge en la Guía del usuario de Amazon EventBridge. Tenga en cuenta que también puede crear reglas que desencadenen las llamadas a la API de Amazon EC2 Auto Scaling. Para obtener más información, consulte este artículo acerca de cómo crear una regla de EventBridge que desencadene una llamada a la API de AWS utilizando AWS CloudTrail de la Guía del usuario de Amazon EventBridge.

Eventos de Auto Scaling

Los siguientes ejemplos corresponden a eventos de Amazon EC2 Auto Scaling. Los eventos se emiten en la medida de lo posible.

Para ver ejemplos de eventos entregados desde Amazon EC2 Auto Scaling a EventBridge al utilizar un grupo de calentamiento, consulte Eventos de grupos de calentamiento.

Para obtener un ejemplo del evento de interrupción de la instancia de spot, consulte Avisos de interrupción de instancias de spot en la Guía del usuario de Amazon EC2 para instancias de Linux.

Acción de ciclo de vida de lanzamiento de instancia EC2

Amazon EC2 Auto Scaling ha movido una instancia al estado Pending:Wait debido a un enlace de ciclo de vida.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance-launch Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "LifecycleActionToken": "87654321-4321-4321-4321-210987654321", "AutoScalingGroupName": "my-asg", "LifecycleHookName": "my-lifecycle-hook", "EC2InstanceId": "i-1234567890abcdef0", "LifecycleTransition": "autoscaling:EC2_INSTANCE_LAUNCHING", "NotificationMetadata": "additional-info" } }

Lanzamiento de instancia EC2 correcto

Amazon EC2 Auto Scaling ha lanzado una instancia correctamente.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "InProgress", "Description": "Launching a new EC2 instance: i-12345678", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

Lanzamiento de instancia EC2 incorrecto

Amazon EC2 Auto Scaling no pudo lanzar una instancia.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Launch Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "Failed", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "message-text", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

Acción de ciclo de vida de terminación de instancia EC2

Amazon EC2 Auto Scaling ha movido una instancia al estado Terminating:Wait debido a un enlace de ciclo de vida.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance-terminate Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "LifecycleActionToken":"87654321-4321-4321-4321-210987654321", "AutoScalingGroupName":"my-asg", "LifecycleHookName":"my-lifecycle-hook", "EC2InstanceId":"i-1234567890abcdef0", "LifecycleTransition":"autoscaling:EC2_INSTANCE_TERMINATING", "NotificationMetadata":"additional-info" } }

Terminar instancia EC2 correcto

Amazon EC2 Auto Scaling ha terminado una instancia correctamente.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Terminate Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "InProgress", "Description": "Terminating EC2 instance: i-12345678", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

Terminar instancia EC2 incorrecto

Amazon EC2 Auto Scaling no pudo terminar una instancia.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Terminate Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "Failed", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "message-text", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

Se ha alcanzado el punto de comprobación de actualización de instancias de EC2 Auto Scaling

Durante la actualización de instancias, Amazon EC2 Auto Scaling emite eventos cuando el número de instancias reemplazadas alcanza el umbral porcentual definido para el punto de comprobación.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Checkpoint Reached", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "ab00cf8f-9126-4f3c-8010-dbb8cad6fb86", "AutoScalingGroupName": "my-auto-scaling-group", "CheckpointPercentage": "50", "CheckpointDelay": "300" } }

Actualización de instancias de EC2 Auto Scaling iniciada

Amazon EC2 Auto Scaling emite eventos cuando el estado de una actualización de instancias cambia a InProgress.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Started", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

Actualización de instancias de EC2 Auto Scaling correcta

Amazon EC2 Auto Scaling emite eventos cuando el estado de una actualización de instancias cambia a Succeeded.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Succeeded", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

Error de actualización de instancias de EC2 Auto Scaling

Amazon EC2 Auto Scaling emite eventos cuando el estado de una actualización de instancias cambia a Failed.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Failed", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

Actualización de instancias de EC2 Auto Scaling cancelada

Amazon EC2 Auto Scaling emite eventos cuando el estado de una actualización de instancias cambia a Cancelled.

Datos del evento

El siguiente es un ejemplo de los datos de este evento.

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Cancelled", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

Utilizar AWS Lambda para controlar eventos

AWS Lambda es un servicio informático que permite ejecutar código sin aprovisionar ni administrar servidores. El código se empaqueta y se carga en AWS Lambda como una función de Lambda. AWS Lambda ejecuta a continuación la función cuando esta se invoca. Una función se puede invocar manualmente, automáticamente en respuesta a eventos o en respuesta a solicitudes de aplicaciones o servicios.

Para ayudarle a comenzar a usar Lambda, siga el procedimiento a continuación. En esta sección se muestra cómo crear una función Lambda y una regla de EventBridge que provoca que todos los eventos de lanzamiento y terminación de instancias se registren en Amazon CloudWatch Logs.

Creación de una función Lambda

Siga el procedimiento a continuación para crear una función Lambda mediante el proyecto hello-world que servirá de destino de los eventos.

Para crear una función Lambda

  1. Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/.

  2. Si no está familiarizado con Lambda, verá una página de bienvenida. Seleccione Get Started Now (Empezar ahora); de lo contrario, elija Create a Lambda function (Crear una función Lambda).

  3. En la página Select blueprint (Seleccionar proyecto), ingrese hello-world en Filter (Filtro) y, a continuación, seleccione el proyecto hello-world.

  4. En la página Configure triggers, elija Next.

  5. En la página Configure function, haga lo siguiente:

    1. Introduzca un nombre y la descripción de la función Lambda.

    2. Edite el código de la función Lambda. Por ejemplo, el siguiente código registra simplemente el evento.

      console.log('Loading function'); exports.handler = function(event, context) { console.log("AutoScalingEvent()"); console.log("Event data:\n" + JSON.stringify(event, null, 4)); context.succeed("..."); };
    3. En Role (Rol), elija Choose an existing role (Elegir un rol existente). En Existing role (Rol existente), seleccione su rol de ejecución básico. De lo contrario, cree un rol de ejecución básico.

    4. (Opcional) En Advanced settings, realice los cambios necesarios.

    5. Elija Next (Siguiente).

  6. En la página Review, seleccione Create function.

Dirección de eventos a una función Lambda

Cree una regla que coincida con los eventos seleccionados y diríjalos a su función Lambda para realizar alguna acción.

Para crear una regla que dirija eventos a la función Lambda

  1. Abra la consola de Amazon EventBridge en https://console.aws.amazon.com/events/.

  2. En el panel de navegación, en Events (Eventos), elija Rules (Reglas).

  3. Elija Create rule.

  4. Escriba un nombre y una descripción de la regla.

  5. En Define pattern (Definir patrón), haga lo siguiente:

    1. Seleccione Event Pattern.

    2. En Event matching pattern (Evento coincidente con patrón), elija Pre-defined by service (Predefinido por servicio).

      sugerencia

      También puede crear una regla que utilice un patrón de eventos personalizado para detectar y actuar únicamente sobre un subconjunto de eventos de Amazon EC2 Auto Scaling. Este subconjunto se puede basar en campos específicos que Amazon EC2 Auto Scaling incluya en sus eventos. Para obtener más información, consulte Patrones de eventos en la Guía del usuario de Amazon EventBridge. Para ver un ejemplo de patrón de eventos, consulte Paso 3: crear una regla de EventBridge en el tutorial de enlaces de ciclo de vida.

    3. En Service provider (Proveedor de servicios), elija Amazon Web Services.

    4. En Service Name, elija Auto Scaling.

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

    6. Para capturar todos los eventos de lanzamiento y terminación de instancia que se hayan realizado correctamente o que no lo hayan hecho, elija Any instance event (Cualquier evento de instancia).

    7. 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 Auto Scaling específico, elija Specific group name(s) (Nombres de grupos específicos) y, a continuación, seleccione uno o varios grupos de Auto Scaling.

  6. En Select event bus (Seleccionar bus de eventos), elija AWS default event bus (Bus de eventos predeterminado). Cuando un servicio de AWS en su cuenta emite un evento, siempre va al bus de eventos predeterminado de su cuenta.

  7. En Target (Destino), elijaLambda function (Función Lambda).

  8. En Function (Función), seleccione la función Lambda que ha creado.

  9. Seleccione Create (Crear).

Para probar la regla, cambie el tamaño del grupo de Auto Scaling. Si ha utilizado el código de ejemplo para la función Lambda, registra el evento en CloudWatch Logs.

Para probar la regla

  1. Abra la consola de Amazon EC2 Auto Scaling en https://console.aws.amazon.com/ec2autoscaling/.

  2. En la pestaña Details (Detalles), elija Edit (Editar) a la derecha de la página.

  3. Cambie el valor de Desired capacity (Capacidad deseada) y luego elija Update (Actualizar).

  4. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.

  5. En el panel de navegación, seleccione Logs.

  6. Seleccione el grupo de registros de la función Lambda (por ejemplo, /aws/lambda/mi-función).

  7. Seleccione una secuencia de registro para ver los datos de los eventos. Los datos que se muestran son similares a los siguientes:

    
                            Visualización de datos de eventos para Amazon EC2 Auto Scaling en CloudWatch Logs.

Véase también

Para obtener más información sobre cómo utilizar EventBridge y Amazon EC2 Auto Scaling, consulte Creación de reglas de EventBridge para eventos de actualización de instancias y Creación de reglas de EventBridge para eventos de un grupo de calentamiento.

Para ver un tutorial paso a paso que muestra cómo crear una función Lambda para realizar acciones del ciclo de vida, consulte Tutorial: Configuración de un enlace de ciclo de vida que invoca una función Lambda. En este tutorial encontrará una introducción a los enlaces de ciclo de vida. Con los enlaces de ciclo de vida, puede usar Lambda para realizar tareas en instancias antes de que se pongan en servicio o antes de que se terminen.