Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo puedo retrasar la terminación de una instancia de Amazon EC2 que no funciona correctamente para poder solucionar el problema?
Mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) no funciona correctamente y ha terminado antes de que pudiera averiguar la causa del problema.
Breve descripción
Para solucionar los problemas de una instancia de EC2 que no funciona correctamente antes de que termine, añada un enlace de ciclo de vida de Amazon EC2 Auto Scaling para cambiar el estado de la instancia de Terminando a Terminando:esperar.
De forma predeterminada, una instancia permanece en el estado Terminando:esperar 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 que puede mantener una instancia en el estado Terminando:esperar es de 48 horas o 100 veces el tiempo de espera del latido, el valor que sea menor.
Solución
Utilice la Interfaz de la línea de comandos de AWS (AWS CLI) para configurar un enlace de ciclo de vida.
Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
Creación de un tema de Amazon SNS
Para crear un tema de Amazon Simple Notification Service (Amazon SNS), siga estos pasos:
-
Cree un tema de SNS en el que el grupo de EC2 Auto Scaling envíe notificaciones del ciclo de vida. En el siguiente ejemplo, se ejecuta el comando create-topic para crear el tema ASNotifications:
$ aws sns create-topic --name ASNotifications
El resultado devuelve un ARN similar al siguiente:
"TopicArn": "arn:aws:sns:us-west-2:123456789012:ASNotifications"
-
Cree 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 enlace user@amazon.com:
$ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --protocol email --notification-endpoint user@amazon.com
Configuración de los permisos de IAM
Configure un rol de AWS Identity and Access Management (IAM) que conceda permisos al grupo de EC2 Auto Scaling para que envíe información al tema de SNS. Para completar esta tarea, cree un archivo de texto que contenga la política adecuada. A continuación, haga referencia al archivo en el comando create-role.
-
Utilice un editor de texto, como vi, para crear el archivo de texto:
$ sudo vi assume-role.txt
-
Introduzca la siguiente información en el archivo de texto y, a continuación, guárdelo:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "autoscaling.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
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. Tenga en cuenta el ARN del rol de IAM y del tema de SNS.
-
Añada permisos al rol para permitir que EC2 Auto Scaling envíe notificaciones de SNS cuando se produzca un evento de enlace de ciclo de vida. En el siguient ejemplo se ejecuta el comando attach-role-policy para asociar la política administrada de AWS 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
La política administrada anterior 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 que EC2 Auto Scaling realice llamadas a todas las colas y todos los temas de SNS. Para restringir el acceso de EC2 Auto Scaling a colas o temas concretos de SNS, utilice la siguiente política de ejemplo.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "arn:aws:sns:us-west-2:123456789012:ASNotifications", "Action": [ "sqs:SendMessage", "sqs:GetQueueUrl", "sns:Publish" ] } ] }
Configuración del enlace de ciclo de vida
A continuación, ejecute el comando put-lifecycle-hook para configurar el enlace de ciclo de vida:
aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroubleshoot --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
Nota: Sustituya los valores del ejemplo por el nombre del grupo de EC2 Auto Scaling, el ARN de destino de SNS y el ARN del rol de IAM.
El comando put-lifecycle-hook completa las siguientes funciones:
- Asigna un nombre al enlace de ciclo de vida (AStroubleshoot)
- Identifica el grupo de EC2 Auto Scaling asociado al enlace de ciclo de vida (MyASGroup)
- Configura el enlace para la etapa del ciclo de vida de terminació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)
Prueba del enlace del ciclo de vida
Para probar el enlace del ciclo de vida, primero elija una instancia. A continuación, ejecute el comando terminate-instance-in-auto-scaling group para forzar la terminación de la instancia. Cuando la instancia cambie al estado Terminando:esperar, ejecute el comando record-lifecycle-action-heartbeat para que la instancia permanezca en este estado. Como alternativa, ejecute el comando complete-lifecycle-action para permitir que la terminación se complete:
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
Amazon EC2 Auto Scaling lifecycle hooks
Creación de un rol para delegar permisos a un servicio de AWS

Contenido relevante
- preguntada hace un meslg...
- preguntada hace 2 meseslg...
- preguntada hace 2 meseslg...
- preguntada hace 20 díaslg...
- preguntada hace 2 meseslg...
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 7 meses
- OFICIAL DE AWSActualizada hace 4 meses