Mejores prácticas de AWS Cloudformation

CloudFormation es un servicio que permite la creación de colecciones de recursos de AWS para ser reutilizados de manera efectiva en múltiples proyectos. A través de un archivo json se definen todos los recursos y parámetros para automatizarlos.

Puedes trabajar en función a plantillas o te permite diseñar tu propio archivo con todos los recursos necesarios. Lo ideal es guardarlo cada cierto tiempo para evitar perder todo lo avanzado. Puedes colgar una plantilla desde tu S3, lo que te permitirá replicar tu proyecto en otra instancia.

En cada stack podrás ver el detalle sobre la información general del mismo, eventos ocurridos (en búsqueda de errores si es el caso), los recursos requeridos, salidas (dependencias con otros stacks), parámetros necesarios y plantillas utilizadas.

cloudformation-01

¿Cuáles son las prácticas que se recomiendan para el uso de esta herramienta?

Organizar stacks por ciclo de vida y titularidad. Al separar tus stacks según estos parámetros, permites que la automatización que buscas no sea tan rígida y permita modificaciones a aspectos específicos entre aplicaciones (sin alterar un stack completo). Así, diferentes desarrolladores pueden alimentarse de los mismos stacks sin estar limitados por sus procesos o tiempos de ejecución.

Utilice referencias entre stacks para exportar recursos compartidos. Esto permite que varios stacks referencien los mismos recursos.

Utilice IAM para controlar el acceso. A través del servicio IAM de AWS, lo ideal es dar accesos específicos (sin comprometer el desarrollo) a usuarios según lectura, creación o eliminación de stacks, asimismo para poder iniciar instancias, modificar o terminar instancias de EC2.

Verifique los límites de todos los tipos de recursos. Cada recurso asignado tiene un límite predeterminado y, en algunos casos, no solo depende del autoescalamiento, sino del límite permitido por la plataforma. Por ejemplo, el máximo de 200 stacks por región.

cloudformation-02

Utilizar stacks anidados (nested stacks) para reutilizar plantillas comunes. Conforme crezca tu desarrollo, notarás que lo mismo se puede utilizar en otros proyectos con la salvedad de ciertas modificaciones. Los stacks anidados, son stacks que crean otros stacks, lo que permite a tu stack referenciar a otros según la necesidad que presentes.

No integre credenciales en sus plantillas (NoEcho). Se recomienda, en contraste, utilizar referencias dinámicas en tu plantilla. Bajo este método, tus credenciales se encuentran en otro servicio como el AWS System Manager Parameter Store, lo que facilita la seguridad de las mismas (encriptación, almacenamiento y búsqueda de credenciales para tus servicios de AWS).

Uso de tipos de parámetros específicos de AWS. Ciertos parámetros exclusivos de AWS te permiten asociar recursos a tu stack sin la necesidad de escribir el nombre específico del mismo (lo que conlleva a errores de escritura).

Utilice las limitaciones de los parámetros. Puedes definir los límites mínimos o máximos de ciertos recursos para el funcionamiento de un stack.

Administre todos los recursos del stack a través de AWS Cloud Formation. Crea y modifica tus stacks desde el ambiente de AWS. Hacerlo por separado puede conllevar errores que serán visibles al intentar usar tu stack.

Crear change sets antes de utilizar tu stack. Esto te permite reconocer cuál es el rendimiento de tu stack frente a los cambios que vas aplicando. Así, podrás tener mayor control sobre el uso de los cambios y la viabilidad de los mismos.

cloudformation-03

Utilizar stack policy. Dichas políticas protegen a los principales recursos de tus stacks de actualizaciones que pueden interrumpirlas o incluso reemplazarlas. Como se ve en el ejemplo, podrás definir la limitación de actualización de un stack a través de un archivo json.

 

Artículo por José Martinez Astuvilca.