En AWS CloudFormation, he usado AWS::CloudFormation::Init para incluir metadatos en una instancia de Amazon Elastic Cloud Compute (Amazon EC2). Sin embargo, no veo los cambios en la instancia.
Resolución
Requisitos previos: Establezca la opción Restauración en caso de error para la pila de CloudFormation en No.
Si configura Restauración en caso de error como No y sigue sin poder incluir metadatos en la instancia de EC2, lleve a cabo las siguientes acciones.
Nota: Los siguientes pasos de resolución son para las pilas de CloudFormation que creó con una instancia de Linux.
Cómo verificar que el script auxiliar cfn-init esté instalado
Para confirmar que ha instalado cfn-init en la instancia que está configurada para enviar señales a los recursos de CloudFormation, siga estos pasos:
- Use SSH para conectarse a la instancia.
- Compruebe que cfn-init o el paquete aws-cfn-bootstrap estén instalados en su directorio.
Para comprobar la existencia de cfn-init, ejecute el siguiente comando:
sudo find / -name cfn-init/opt/aws/bin/cfn-init
/opt/aws/apitools/cfn-init
/opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
/var/lib/cfn-init
Para comprobar el paquete aws-cfn-bootstrap, ejecute el siguiente comando:
sudo rpm -q aws-cfn-bootstrapaws-cfn-bootstrap-1.4-34.24.amzn1.noarch
Nota: El comando anterior solo funciona en distribuciones que utilicen el Administrador de paquetes RPM.
Los scripts auxiliares de CloudFormation se instalan en las imágenes de máquina de Amazon (AMI) en Linux de forma predeterminada.
Cómo verificar que la instancia esté conectada a Internet
Si la instancia está en una Amazon Virtual Private Cloud (Amazon VPC), puede conectarse a Internet mediante los siguientes métodos:
- Un dispositivo NAT en una subred privada
- Una puerta de enlace de Internet en una subred pública
Para probar la conexión a Internet de la instancia, abra una página web pública, como la página de inicio de AWS. A continuación, ejecute un comando curl en la instancia. Ejemplo:
curl -I https://aws.amazon.com
Si la instancia está conectada a Internet, el comando devuelve un código de estado HTTP 200.
Si usa un punto de enlace de VPC de interfaz, el punto de enlace debe estar en la misma región de AWS que la instancia. Además, el grupo de seguridad que está conectado al punto de enlace de la interfaz debe permitir las conexiones entrantes en el puerto 443 desde la subred privada de la Amazon VPC.
Búsqueda de errores en los registros cloud-init o cfn-init
Para buscar errores de sintaxis o valores incorrectos en los registros cloud-init o cfn-init, siga estos pasos:
- Utilice SSH para conectarse a la instancia.
- Para encontrar mensajes de error detallados, busque las palabras clave error o failure 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
Para analizar todas las instancias de las palabras error o fallo en archivos /var/log/cfn o /var/log/cloud-init, ejecute el siguiente comando:
grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)
Nota: El comando anterior devuelve el nombre del archivo, el número de línea y el mensaje de error.
- Utilice el mensaje de error detallado para corregir los errores y, a continuación, actualice la pila.
Si cfn-init.log no existe, significa que la plantilla de CloudFormation no ejecutó cfn-init.
Para confirmar que ha configurado la propiedad UserData para ejecutar cfn-init, siga estos pasos:
- En un editor de código, abra la plantilla de CloudFormation de su pila.
- En UserData, compruebe si hay errores como errores de sintaxis, espacios que faltan, errores ortográficos y otros errores tipográficos.
- Confirme que los valores de las propiedades de la pila, recurso y región son correctos.
- Para la función intrínseca Fn::Join de la propiedad UserData, utilice -v para ejecutar cfn-init en modo detallado. Para ver salidas de ejemplo, consulte Ejemplo.
Información relacionada
Consideraciones para los puntos de conexión de VPC de CloudFormation
AWS::CloudFormation::Init
¿Cómo puedo solucionar el error «Failed to receive X resource signal(s) within the specified duration» en AWS CloudFormation?