tutorial management formation español cloudformation aws application and amazon-web-services amazon-cloudformation

amazon-web-services - management - cloudformation tutorial



¿Cómo puedo depurar de forma rápida y efectiva las plantillas de CloudFormation? (10)

¿Cómo puedo hacer que el proceso de depuración de la plantilla sea más rápido o me quedo para siempre notando mis errores media hora después de hacerlos?

Aquí hay algunas sugerencias de mejores prácticas, que se centran específicamente en mejorar la velocidad de iteración del complejo desarrollo de CloudFormation-template:

Use las herramientas de CloudFormation para validar plantillas y apilar actualizaciones

AWS ya los ha descrito en su propio documento de mejores prácticas , por lo que no los repetiré:

El objetivo de este paso es detectar la sintaxis o los errores lógicos obvios antes de realizar una creación / actualización de pila.

Pruebe los recursos de forma aislada

Antes de usar cualquier recurso individual de CloudFormation en una pila compleja, asegúrese de comprender completamente el alcance del comportamiento de creación / actualización / eliminación de ese recurso, incluidos los límites de uso y los tiempos típicos de inicio / desmontaje, probando su comportamiento en pilas individuales más pequeñas. primero.

  • Si está desarrollando o utilizando recursos personalizados de terceros, escriba pruebas unitarias utilizando las bibliotecas adecuadas para la plataforma de idiomas, para asegurarse de que la lógica de la aplicación se comporte como se espera en todos los casos de uso.
  • Tenga en cuenta que la cantidad de tiempo para que un recurso individual pueda crear / actualizar / eliminar puede variar ampliamente entre los tipos de recursos, dependiendo del comportamiento de las llamadas API subyacentes. Por ejemplo, un recurso complejo de AWS::CloudFront::Distribution veces puede tomar de 30 a 60 minutos para crear / actualizar / eliminar, mientras que AWS::EC2::SecurityGroup actualiza en segundos.
  • Los recursos individuales pueden tener errores / problemas / limitaciones en su implementación, que son mucho más fáciles de depurar y desarrollar soluciones para cuando se prueban de forma aislada, en lugar de dentro de una pila mucho más grande. Tenga en cuenta las limitaciones, como los límites del servicio de AWS, dependiendo de la configuración de su cuenta de AWS individual, o la disponibilidad de servicios de la región, según la región en la que cree su pila.

Construye pilas complicadas en pequeños incrementos

Al realizar una creación / actualización de pila, una falla en un solo recurso hará que la pila revierte todo el conjunto de cambios de recursos, lo que puede destruir innecesariamente otros recursos creados con éxito y tomar mucho tiempo al construir una pila complicada con un largo gráfico de dependencia de los recursos asociados.

La solución a esto es construir su Stack incrementalmente en lotes de Actualización más pequeños, agregando Recursos uno (o unos pocos) a la vez. De esta forma, si ocurre una falla en una creación / actualización de recursos, la reversión no destruye todos los recursos de la Pila, sino que cambia el conjunto de Recursos en la última Actualización.

Controle el progreso de las actualizaciones de la pila

Asegúrese de controlar el progreso de su actualización de pila al ver los eventos de la pila mientras se realiza una creación / actualización. Este será el punto de partida para depurar otros problemas con recursos individuales.

CloudFormation es una poderosa oferta 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 completa de aplicaciones, con una única llamada API. Es inmensamente poderoso. Usarlo seguramente se considera una buena práctica de AWS, especialmente cuando se combina con Chef, Puppet, o cloud-init. La depuración me lleva al vicio.

Tome un ejemplo de producción: las plantillas clúster stock mongodb no funcionarán para mí. No sé particularmente por qué. Estoy seguro de que es algo simple, como casi siempre lo es. Mi problema no es que no pueda descubrir lo que está mal. Es que tarda la pila entre 20 y 30 minutos en fallar, y luego otros tres o cuatro minutos en eliminarse, asumiendo que elimina los recursos correctamente.

¿Qué me estoy perdiendo? Sé sobre la bandera --disable-rollback y usarla como oxígeno. Hace mucho tiempo aprendí a envolver los mensajes de salida con cfn-signal y arrojarlos como lastre en 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 para siempre notando mis errores media hora después de hacerlos?


¿Ha mirado el Editor de plantillas de AWS CloudFormation que se incluye en AWS Toolkit for Eclipse ? Tiene resaltado de sintaxis, finalización de instrucción e implementación en AWS CloudFormation.



Otra opción, un año más tarde, es abstraer estas plantillas a una biblioteca de terceros, como la troposphere . Esa biblioteca construye la carga JSON para usted, y hace una gran cantidad de validación en el camino. Esto también resuelve el problema "Wow, administrando un archivo JSON de 1000 líneas que está triste" .


Para los IDE de JetBrains (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio), hay un plugin de AWS CloudFormation que permite una verificación profunda de las plantillas JSON y YAML CFN


Si está trabajando con máquinas EC2, entonces le recomendaría que inicie sesión en la máquina EC2 y alinee 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 de TREE de su JSON. Esto te ayuda a verificar el orden de los elementos JSON.

Y cuando actualice los archivos, siempre use 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 su script.



Tarde en la fiesta pero también podría agregar que vale la pena pasar un poco de tiempo configurando y aprendiendo su editor. Sé que suena irrisoriamente básico como respuesta, pero pruébalo.

En mi caso, con vim, me desempeñé mucho mejor una vez que tomé un tiempo instalando complementos de sintaxis JSON, y también (finalmente) entendí técnicas de plegado para navegar fácilmente por grandes archivos CF. El mío ahora sugiere errores tipográficos (comas donde no deberían estar, etc.) y el resaltado en color ahorra mucho tiempo al dar pistas visuales claras.

Esto podría ayudar a mitigar los errores de sintaxis, pero las otras herramientas corrigen mejor los errores lógicos en la plantilla. Con suerte, algún día habrá un modo de "vista previa" en CF.


Una característica nueva y 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 comprobación de datos más sólida, y también pueden "fallar rápido" al crear recursos y pilas anidadas de Cloudformation. También tiene la capacidad de proporcionar mensajes de error personalizados legibles por humanos cuando se pasan valores no válidos utilizando el nuevo atributo Restricción de detalles .

Los nuevos tipos son especialmente útiles cuando se trata de varios recursos de VPC. Puede asegurarse de que los Parámetros para sus plantillas sean del tipo correcto, y sean explícitos sobre la expectativa de un valor único frente a una Lista.

Por ejemplo:

"Parameters" : { "SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...}, "GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...} }