CloudFormation es una potente oferta de AWS que permite la creación programática de pilas de recursos de AWS, como el nivel web de una aplicación, un clúster informático de alto rendimiento o una pila de aplicaciones completa, con una sola llamada a la API. Es inmensamente poderoso. Su uso seguramente se considera una buena práctica de AWS, especialmente cuando se combina con Chef, Puppet o cloud-init. Depurarlo me lleva al vicio.
Tome un ejemplo de producción: las plantillas de clúster de mongodb estándar no funcionarán para mí. Particularmente no sé por qué. Seguro que es algo sencillo como casi siempre lo es. Mi problema no es que no pueda averiguar qué está mal. Es que la pila tarda entre 20 y 30 minutos en fallar, y luego otros tres o cuatro minutos en eliminar, suponiendo que elimine los recursos correctamente.
¿Qué me estoy perdiendo? Conozco la --disable-rollback
bandera y la uso como oxígeno. Aprendí hace mucho tiempo a envolver los mensajes de salida cfn-signal
y a arrojarlos como lastre de un barco que se hunde. ¿Cómo puedo hacer que el proceso de depuración de la plantilla sea más rápido o me quedo atascado para siempre notando mis errores media hora después de cometerlos?
fuente
Respuestas:
Utilice el
aws cloudformation validate-template
comando en la herramienta AWS CLI. Solo valida si su plantilla es JSON o YAML válido, no si sus claves y valores son correctos (por ejemplo, no comprueba si hay errores tipográficos en las claves)fuente
aws cloudformation validate-template
en las nuevas herramientas de la AWS CLI.aws cloudformation validate-template
, y solo valida si su plantilla es JSON o YAML válida, no si sus claves y valores son correctos (por ejemplo, no verifica errores tipográficos en las claves).Property validation failure: [Length of value {XYZ} for property {/RepositoryDescription} is greater than maximum allowed length {100}]
. Según elvalidate-template
comando, esto no fue un problema, pero la interfaz de usuario devuelve este error.Otra opción, un año después, es abstraer estas plantillas en una biblioteca de terceros, como troposfera . Esa biblioteca construye la carga útil JSON por usted y realiza una gran cantidad de validación en el camino. Esto también resuelve el problema "Wow, administrar un archivo JSON de 1000 líneas seguro es triste" .
fuente
Aquí hay algunas sugerencias de mejores prácticas, que se centran específicamente en mejorar la velocidad de iteración del desarrollo complejo de plantillas de CloudFormation:
Utilice las herramientas de CloudFormation para validar plantillas y apilar actualizaciones
AWS ya los describió en su propio documento de Mejores prácticas , por lo que no los repetiré:
El objetivo de este paso es detectar errores lógicos o de sintaxis obvios antes de realizar una creación / actualización de la pila.
Probar recursos de forma aislada
Antes de usar cualquier recurso de CloudFormation individual en una pila compleja, asegúrese de comprender a fondo el alcance total del comportamiento de creación / actualización / eliminación de ese recurso, incluidos los límites de uso y los tiempos de inicio / desmontaje típicos, probando su comportamiento en pilas independientes más pequeñas. primero.
AWS::CloudFront::Distribution
recurso complejo a veces puede tardar entre 30 y 60 minutos en crearse / actualizarse / eliminarse, mientras que un recurso seAWS::EC2::SecurityGroup
actualiza en segundos.Construya pilas complicadas en pequeños incrementos
Al realizar la creación / actualización de una pila, una falla en cualquier recurso hará que la pila revierta todo el conjunto de cambios de recursos, lo que puede destruir innecesariamente otros recursos creados con éxito y tomar mucho tiempo cuando se construye una pila complicada con un largo gráfico de dependencia de recursos asociados.
La solución a esto es construir su Pila de forma incremental en lotes de Actualización más pequeños, agregando Recursos uno (o unos pocos) a la vez. De esta manera, si / cuando ocurre una falla en la creación / actualización de un recurso, la reversión no hace que se destruyan todos los recursos de su Pila, solo el conjunto de Recursos cambiado en la última Actualización.
Supervisar el progreso de las actualizaciones de la pila
Asegúrese de monitorear el progreso de la actualización de su pila viendo los eventos de la pila mientras se realiza una creación / actualización. Este será el punto de partida para depurar más problemas con recursos individuales.
fuente
¿Ha examinado el editor de plantillas de AWS CloudFormation que se incluye en AWS Toolkit for Eclipse ? Tiene resaltado de sintaxis, finalización de declaraciones e implementación en AWS CloudFormation.
fuente
Llegó tarde a la fiesta, pero también podría agregar que vale la pena dedicar un poco de tiempo a configurar y aprender a su editor. Sé que suena ridículamente básico como respuesta, pero pruébalo.
En mi caso, con vim, funcioné mucho mejor una vez que me tomé un tiempo para instalar los complementos de sintaxis json y también (finalmente) entendí las técnicas de plegado para navegar fácilmente en archivos CF grandes. El mío ahora sugiere errores tipográficos (comas donde no deberían estar, etc.) y el resaltado de color ahorra mucho tiempo dando pistas visuales claras.
Esto podría ayudar a mitigar los errores de sintaxis, pero los errores lógicos en la plantilla se corrigen mejor con otras herramientas. Con suerte, algún día habrá un modo de "vista previa" en CF.
fuente
Para los IDE de JetBrains (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio), existe el complemento AWS CloudFormation que admite la verificación profunda de las plantillas JSON y YAML CFN
fuente
El linter de AWS CloudFormation proporciona análisis estático adicional más allá
aws cloudformation validate-template
Le informará qué tipos de recursos y tipos de instancias no están disponibles en ciertas regiones, validará los valores de propiedad contra los valores permitidos, detectará dependencias circulares de recursos, errores de sintaxis, límites de plantilla y mucho más
Además de la CLI, uno de los mecanismos más populares para recordar ejecutar el linter es instalar un complemento de editor como la extensión de Visual Studio Code que se ejecuta en cada archivo guardado.
Aquí se describen otros mecanismos como los ganchos de Git de confirmación previa
fuente
Si está tratando con máquinas EC2, le recomendaría que inicie sesión en la máquina EC2 y siga el archivo boot.log (/var/log/boot.log en RHEL6 / Centos). Este archivo se actualiza con todas sus actividades de shell (actividades como: instalación, descarga de archivos, copia de archivos, etc.).
Además, use editores como http://www.jsoneditoronline.org/ para obtener una representación TREE de su JSON. Esto le ayuda a verificar el orden de los elementos JSON.
Y cuando actualice archivos, utilice siempre herramientas como http://www.git-tower.com/blog/diff-tools-mac/ o un sistema de control de versiones real para asegurarse de que no haya cambiado accidentalmente algo que pueda romper el script.
fuente
Además del
aws cloudformation validate-template
comando de la AWS CLI, existe una herramienta cfn-check basada en nodos que realiza una validación más profunda.fuente
Una nueva característica reciente agregada a Cloudformation en diciembre pasado fue la adición de tipos de parámetros adicionales . Estos nuevos tipos permiten que sus plantillas realicen una verificación de datos más sólida y también pueden "fallar rápidamente" al crear recursos y pilas de Cloudformation anidadas. También tiene la capacidad de proporcionar mensajes de error personalizados legibles por humanos más agradables cuando se pasan valores no válidos utilizando el nuevo atributo ConstraintDescription .
Los nuevos tipos son especialmente útiles cuando se trata de varios recursos de VPC. Puede asegurarse de que los parámetros de sus plantillas sean del tipo correcto y sean explícitos sobre la expectativa de un valor único frente a una lista.
Por ejemplo:
fuente
Consulte mi validador de formación en la nube en https://pypi.org/project/cloudformation-validator/
Esto validará el esquema y luego validará nuevamente una lista de reglas y permitirá reglas personalizadas. También permite una fácil integración con las herramientas de implementación.
fuente
También puede hacer uso del Diseñador de CloudFormation disponible en amazon aquí: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1
Simplemente pegue su plantilla (JSON) en el panel "Plantilla" y luego haga clic en el símbolo de marca para validar su plantilla. Cualquier error aparecerá en el panel "Error".
Espero que esto ayude.
fuente