¿Cómo puedo solucionar el error «No se pudieron recibir la(s) señal(es) de recursos X dentro de la duración especificada» en AWS CloudFormation?

6 minutos de lectura
0

En AWS CloudFormation, recibo el siguiente mensaje de error: «No se pudieron recibir la(s) señal(es) de recursos X dentro de la duración especificada». ¿Cómo puedo solucionar este error?

Descripción breve

Este error aparece cuando una instancia de Amazon Elastic Compute Cloud (Amazon EC2), un grupo de escalamiento automático o una WaitCondition no recibe señales de éxito de una o más instancias en el período de tiempo especificado en el atributo CreationPolicy.

Este error puede producirse en uno de los siguientes escenarios:

  • Escenario 1: El script cfn-signal no está instalado en una o más instancias de la pila de AWS CloudFormation.
  • Escenario 2: Hay errores de sintaxis o valores incorrectos en la plantilla de AWS CloudFormation.
  • Escenario 3: El valor de la propiedad Timeout del atributo CreationPolicy es demasiado bajo.
  • Escenario 4: La señal cfn no se envía desde la instancia Amazon EC2.

Nota: Los escenarios de resolución de problemas de este error solo se aplican a las pilas de AWS CloudFormation creadas con instancias de Linux. Los escenarios no se aplican a las instancias de Windows. Para obtener más información, consulte Cómo solucionar problemas de creación de pilas.

Resolución

Antes de seguir los pasos de los escenarios de resolución de problemas, defina la opción Revertir en caso de error para su paquete de AWS CloudFormation en No.

Escenario 1: El script cfn-signal no está instalado en una o más instancias de la pila de AWS CloudFormation

Para confirmar que el script cfn-signal está instalado en la instancia que está configurada para enviar señales a los recursos de AWS CloudFormation, siga estos pasos:

1.    Conéctese a su instancia de Linux mediante SSH.

2.    Confirme que el script cfn-signal esté instalado mediante uno de los siguientes comandos.

Para confirmar que el script cfn-signal se encuentra en su directorio, ejecute el siguiente comando:

$ sudo find / -name cfn-signal
/opt/aws/bin/cfn-signal
/opt/aws/apitools/cfn-init-1.4-30.amzn2/bin/cfn-signal

Para confirmar que el paquete de scripts auxiliares de AWS CloudFormation que contiene el script cfn-signal está instalado, ejecute el siguiente comando:

$ sudo rpm -q aws-cfn-bootstrap
aws-cfn-bootstrap-1.4-30.amzn2.noarch

Importante: El comando anterior solo funciona en distribuciones que utilizan el Administrador de paquetes RPM.

Nota: De forma predeterminada, los scripts auxiliares de AWS CloudFormation se instalan en las imágenes de máquina de Amazon (AMI). Si los scripts auxiliares de AWS CloudFormation no están instalados, consulte la referencia de scripts auxiliares de CloudFormation para obtener instrucciones de instalación.

Escenario 2: Hay errores de sintaxis o valores incorrectos en la plantilla de AWS CloudFormation

Para confirmar que la propiedad UserData está configurada para indicar los recursos de AWS CloudFormation especificados en el atributo CreationPolicy, siga estos pasos:

1.    En un editor de código, abra la plantilla de AWS CloudFormation para su pila y, a continuación, busque la sección de propiedades UserData.

2.    Compruebe si hay errores, incluidos errores de sintaxis, espacios faltantes, errores ortográficos y otros errores tipográficos.

3.    Confirme que los valores de las propiedades de pila, recurso y región son correctos.

Nota: Si utiliza un script de arranque que incluye la propiedad UserData y llama al script cfn-signal, compruebe si hay errores de sintaxis o valores incorrectos en el script de arranque.

Si envía una señal con la tecla de comandos cfn-init, busque información sobre la señal en los registros de cfn-init. Para buscar errores en los registros cloud-init o en los registros cfn-init, conéctese a su instancia de Amazon EC2 mediante SSH. A continuación, busque mensajes detallados de error o fallo buscando la palabra clave «error» o «fallo» en los siguientes registros:

/var/log/cloud-init-output.log
/var/log/cloud-init.log
/var/log/cfn-init.log
/var/log/cfn-init-cmd.log
/var/log/cfn-wire.log

Para analizar todas las instancias de las palabras «error» o «fallo» en cualquier archivo /var/log/cfn o /var/log/cloud-init, ejecute el siguiente comando:

grep -ni 'error\|failure' $(sudo find /var/log -name cfn\* -or -name cloud-init\*)

Nota: El comando anterior devuelve el nombre del archivo, el número de línea y el mensaje de error.

Escenario 3: El valor de la propiedad Timeout del atributo CreationPolicy es demasiado bajo

El valor de la propiedad Timeout se define mediante el atributo CreationPolicy. Para confirmar que el valor es lo suficientemente alto como para que las tareas se ejecuten antes de que el script cfn-signal envíe señales a los recursos de AWS CloudFormation, siga estos pasos.

Importante: Los siguientes pasos solo funcionan si la instancia no está finalizada (por ejemplo, por un grupo de escalamiento automático). Ya ha configurado la opción de reversión en caso de error de su paquete de AWS CloudFormation en No. Esta opción significa que no se produce ninguna reversión de errores y que la instancia no finalizará hasta que elimine la pila. Puede conectarse a la instancia mediante SSH y, a continuación, continuar con los siguientes pasos de resolución de problemas.

1.    En un editor de código, abra la plantilla de AWS CloudFormation para su pila y, a continuación, busque el valor de la propiedad Timeout.

Nota: El valor de la propiedad Timeout es la cantidad máxima de tiempo que AWS CloudFormation espera una señal antes de devolver un error.

2.    Para obtener una estimación de cuándo se activa el script cfn-signal, conéctese a la instancia mediante SSH y, a continuación, ejecute el siguiente comando:

less /var/log/cfn-init.log

El archivo de registro muestra una marca de tiempo cuando se envía la señal de ÉXITO a los recursos de AWS CloudFormation. Vea el siguiente ejemplo:

2019-01-11 12:46:40,101 [DEBUG] Signaling resource EC2Instance in stack XXXX with unique ID i-045a536a3dfc8ccad and status SUCCESS

3.    Abra la consola de AWS CloudFormation.

4.    Para ver la marca de tiempo del fallo del recurso del evento «No se pudieron recibir la(s) señal(es) de recursos X dentro de la duración especificada», elija la vista de Eventos.

5.    En Motivo de estado, expanda la fila del evento con el motivo de estado «No se pudieron recibir la(s) señal(es) de recursos X dentro de la duración especificada».

6.    Compare la marca de tiempo de la señalización con la marca de tiempo del fallo del recurso.

Nota: Observe que la señal se envió después de que no se pudiera crear el recurso Amazon EC2. La señal se envía antes de que se cree el recurso Amazon EC2 o no se crea.

Escenario 4: La señal cfn no se envía desde la instancia Amazon EC2

La API SignalResource es útil cuando desea enviar señales desde cualquier lugar que no sea una instancia de Amazon EC2.

Por ejemplo, puede usar una función de AWS Lambda para llamar a la API SignalResource y, a continuación, enviar la señal a la pila de AWS CloudFormation. En tal caso, compruebe los registros de Lambda con los Registros de Amazon CloudWatch. Estos registros le ayudan a averiguar por qué la señal no se envía a la pila de AWS CloudFormation.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año