¿Cómo puedo retrasar la finalización del escalamiento automático de las instancias de Amazon EC2 incorrectas para poder solucionarlas?

6 minutos de lectura
0

Mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) se ha marcado como incorrecta y ha pasado al estado «Finalización del escalamiento automático». A continuación, mi instancia de Amazon EC2 ha finalizado antes de que pudiera determinar la causa del problema.

Descripción corta

Añada un enlace de ciclo de vida a su grupo de AWS Auto Scaling para mover las instancias del estado Terminating al estado Terminating:Wait. En este estado, puede acceder a las instancias antes de que finalicen y, a continuación, solucionar los problemas por los que se han marcado como incorrectas.

Por defecto, una instancia permanece en el estado Terminating:Wait durante 3600 segundos (1 hora). Para aumentar este tiempo, use el parámetro heartbeat-timeout en la llamada a la API put-lifecycle-hook. El tiempo máximo durante el que una instancia puede permanecer en estado Terminating:Wait es de 48 horas o 100 veces el tiempo de espera del latido, el valor que sea menor.

Resolución

Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Siga los pasos que se describen a continuación para configurar un enlace de ciclo de vida mediante AWS CLI. A continuación, designe el tema de Amazon Simple Notification Service (Amazon SNS) y los permisos Identity and Access Management (IAM) de AWS necesarios.

También puede configurar un enlace de ciclo de vida mediante la Consola de administración de AWS. A continuación, consulte lo siguiente para administrar los temas de Amazon SNS y los permisos de IAM en la consola:

Crear un tema de Amazon SNS

1.    Cree un tema en el que AWS Auto Scaling pueda enviar notificaciones del ciclo de vida. En el siguiente ejemplo, se solicita al comando create-topic que cree el tema ASNotifications:

$ aws sns create-topic --name ASNotifications

Se devuelve un nombre de recurso de Amazon (ARN) similar al siguiente:

"TopicArn": "arn:aws:sns:us-west-2:123456789012:ASNotifications"

2.    Crear una suscripción al tema. Debe tener una suscripción para recibir el LifecycleActionToken necesario para prolongar el tiempo de espera del latido del estado pendiente o completar la acción del ciclo de vida. En el siguiente ejemplo, se usa el comando subscribe para crear una suscripción que utilice el protocolo de correo electrónico (SMTP) con la dirección de correo electrónico del punto de conexión user@amazon.com.

$ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --protocol email --notification-endpoint user@amazon.com

Configurar los permisos de IAM

Los permisos de IAM se configuran mediante la creación de un rol de IAM que le concede al servicio AWS Auto Scaling el permiso para poder escalar al tema de SNS. Para completar esta tarea, cree un archivo de texto que contenga la política correspondiente. A continuación, haga referencia al archivo en el comando create-role.

1.    Utilice un editor de texto (como vi) para crear el archivo de texto:

$ sudo vi assume-role.txt

2.    Copie y pegue lo siguiente en el archivo de texto y, a continuación, guarde el archivo.

{
  "Version": "2012-10-17",
  "Statement": [{
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "autoscaling.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.    Utilice el comando aws iam create-role para crear el rol de IAM AS-Lifecycle-hook-role a partir de la política guardada en assume-role.txt:

$ aws iam create-role --role-name AS-Lifecycle-Hook-Role --assume-role-policy-document file://assume-role.txt

El resultado contiene el ARN del rol. Asegúrese de guardar tanto el ARN del rol de IAM como el tema del SNS.

4.    Añada permisos al rol para permitir que AWS Auto Scaling envíe notificaciones de SNS cuando se produzca un evento de enlace de ciclo de vida. El siguiente ejemplo utiliza el comando attach-role-policy para adjuntar la política administrada AutoScalingNotificationAccessRole al rol de IAM AS-Lifecycle-Hook-Role:

$ aws iam attach-role-policy --role-name AS-Lifecycle-Hook-Role --policy-arn arn:aws:iam::aws:policy/service-role/AutoScalingNotificationAccessRole

Esta política administrada otorga los siguientes permisos:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Resource": "*",
      "Action": [
        "sqs:SendMessage",
        "sqs:GetQueueUrl",
        "sns:Publish"
      ]
    }
  ]
}

Importante: La política administrada de AWS AutoScalingNotificationAccessRole permite al servicio AWS Auto Scaling realizar llamadas a todos los temas y las colas de SNS. Para restringir el acceso de AWS Auto Scaling solo a temas o colas de SNS específicos, utilice el siguiente ejemplo de política.

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Resource": "arn:aws:sns:us-west-2:123456789012:ASNotifications",
       "Action": [
         "sqs:SendMessage",
         "sqs:GetQueueUrl",
         "sns:Publish"
       ]
     }
   ]
}

Configurar el enlace de ciclo de vida

A continuación, utilice el comando put-lifecycle-hook para configurar el enlace de ciclo de vida:

aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroublshoot --auto-scaling-group-name MyASGroup
        --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
        --notification-target-arn arn:aws:sns:us-west-2:123456789012:ASNotifications
        --role-arn arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role 

Antes de ejecutar este comando, asegúrese de sustituir el nombre de su grupo de AWS Auto Scaling, el ARN de SNS objetivo y el ARN de rol de IAM.

Este comando:

  • Asigna un nombre al enlace de ciclo de vida (AStrobleShoot)
  • Identifica el grupo de AWS Auto Scaling asociado al enlace de ciclo de vida (myASGroup) (MyASGroup)
  • Configura el enlace para la fase del ciclo de vida de finalización de la instancia (EC2_INSTANCE_TERMINATING)
  • Especifica el ARN del tema de SNS (arn:aws:sns:us-west-2:123456789012:ASNotifications)
  • Especifica el ARN del rol de IAM (arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role)

Probar el enlace de ciclo de vida

Para probar el enlace de ciclo de vida, elija una instancia y, a continuación, utilice terminate-instance-in-auto-scaling group para finalizar la instancia. De esta manera se fuerza a AWS Auto Scaling a finalizar la instancia, de manera similar a cuando la instancia es incorrecta. Una vez que la instancia se traslada a Terminating:Wait state, puede mantener la instancia en este estado usando record-lifecycle-action-heartbeat. También puede permitir que se complete la finalización utilizando complete-lifecycle-action.

aws autoscaling complete-lifecycle-action --lifecycle-hook-name my-lifecycle-hook
        --auto-scaling-group-name MyASGroup --lifecycle-action-result CONTINUE
        --instance-id i-0e7380909ffaab747

Información relacionada

Enlaces de ciclo de vida de Amazon EC2 Auto Scaling

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años