Introducción a AWS CloudFormation

July 25th, 2023

CloudFormation es un servicio de Amazon Web Services (AWS) que permite a los usuarios crear, implementar, administrar y monitorizar infraestructuras de computación en la nube de forma rápida y sencilla. CloudFormation permite a los usuarios crear recursos tales como servidores, almacenamiento, redes, aplicaciones y otros elementos mediante la definición de una plantilla de recursos. Esta plantilla se puede definir utilizando un lenguaje de programación como JSON o YAML. CloudFormation proporciona una forma de configurar y administrar recursos de forma segura y repetible. Esta herramienta ayuda a los usuarios a crear un entorno de nube que se adapte a sus necesidades.

Ventajas de CloudFormation

CloudFormation ofrece una variedad de ventajas a los usuarios, entre ellas:

  • Reducción de costes: una vez que se define la infraestructura en la nube con CloudFormation, esta se puede escalar automáticamente de acuerdo con la demanda. Esto permite a los usuarios ahorrar costos al evitar el pago de recursos no utilizados.

  • Facilidad de uso: CloudFormation usa un lenguaje de marcado simple, lo que facilita la configuración de la infraestructura en la nube.

  • Análisis y depuración: ofrece una variedad de herramientas de análisis y depuración, lo que permite a los usuarios identificar y resolver problemas de configuración antes de implementar la infraestructura en la nube.

  • Facilidad de colaboración: los usuarios pueden compartir y colaborar en sus proyectos de forma sencilla y eficiente.

  • Uso de plantillas: ofrece plantillas que permiten a los usuarios definir sus recursos de forma rápida y sencilla, que se pueden compartir y reutilizar entre diferentes proyectos.

  • Despliegue de cambios: los usuarios tienen la capacidad de desplegar cambios en su infraestructura sin necesidad de reiniciar el servicio., con lo que se minimizan los tiempos de inactividad y se asegura la disponibilidad del servicio.

  • Escalabilidad: los usuarios pueden escalar sus recursos de forma sencilla. Esto significa que los usuarios pueden aumentar o disminuir el tamaño de sus recursos para satisfacer sus necesidades, lo que permite ajustar los recursos para satisfacer las necesidades de la aplicación.

  • Administración de recursos: permite a los usuarios administrar de forma centralizada, segura y repetible sus recursos a través de la herramienta. Esto significa que los usuarios pueden administrar los recursos de forma consistente a través de todas sus implementaciones, ahorrando tiempo y esfuerzo al no tener que administrar los recursos manualmente.

  • Integración con AWS: está integrado con AWS, lo que permite a los usuarios aprovechar todas las funcionalidades y servicios de AWS.

  • Monitorización: ofrece herramientas que permiten a los usuarios supervisar el estado de su infraestructura en la nube, asegurando la estabilidad del servicio.

Artefactos principales de CloudFormation

Podemos resumirlo en cuatro bloques:

  • Template: es la plantilla que describe los recursos, atributos y dependencias junto con su estado deseado. Esta es la anatomía básica de una plantilla de CloudFormation, en el que el único objeto de nivel superior requerido es Resources.

    cloudformation1

  • Change set: es el gestor de cambios que describe un plan de ejecución para implementar cambios deseados a los recursos del stack.

  • Stack: se trata de un grupo de recursos que conforman la arquitectura, junto con su configuración. Podemos crear, actualizar y eliminar una colección de recursos creando, actualizando y eliminando stacks.

  • Stack set: es el conjunto de diferentes stack disponibles entre cuentas y regiones.

Despliegue a partir de una plantilla

CloudFormation puede usarse para configurar una variedad de recursos en la nube, como por ejemplo servidores web, bases de datos, redes virtuales, almacenamiento en la nube, ...

Es requisito rellenar los detalles de la stack de CloudFormation antes de poder desplegar la plantilla de CloudFormation en AWS.

Definición de la plantilla de recursos

La primera etapa de la configuración de CloudFormation es definir la plantilla de recursos. Esta plantilla de recursos es un archivo de texto que contiene las especificaciones de los recursos. Esta plantilla se puede definir utilizando un lenguaje de programación como JSON o YAML.

Hay tres formas de preparar una plantilla para realizar un despliegue. Podemos cargar una propia plantilla, utilizar una plantilla de ejemplo proporcionada por AWS o crear una plantilla desde Designer:

cloudformation2

El método más sencillo es hacerlo a través de la consola de AWS, iniciando sesión en la sección CloudFormation, y por medio del botón Create Stack. En nuestro caso, especificamos en la sección Amazon S3 URL una plantilla utilizando un ejemplo muy sencillo publicado en la sección Sample Solutions de CloudFormation, y que despliega únicamente un security group y una instancia EC2 con un Wordpress instalado y configurado.

Especificar los detalles de la stack

En el paso especificar detalles de la stack, debemos rellenar el nombre de la stack de CloudFormation. Un nombre de stack puede incluir letras (A-Z y a-z), números (0-9) y guiones (-). En nuestro caso se llamará WordPress-sample-basic.

cloudformation3

Posteriormente, debemos rellenar los parámetros de la plantilla, que permiten introducir valores personalizados para las propiedades de los recursos de AWS. Esto facilita la creación de plantillas de CloudFormation reutilizables.

Configurar las opciones de la stack

Este paso permite agregar permisos y metadatos a la stack. Podemos etiquetar la stack de CloudFormation con un límite de hasta 50 etiquetas. El etiquetado resulta útil cuando tenemos que administrar varias stacks en una cuenta de AWS. De este modo podemos diferenciar qué stack pertenece a qué equipo. Debemos tener en cuenta que al etiquetar una stack, las etiquetas también se propagan en los recursos de AWS que se despliegan desde ella.

cloudformation4

Podemos configurar un rol de IAM para su uso con CloudFormation, de modo que podamos definir explícitamente cómo puede crear, modificar o eliminar recursos en su nombre. De este modo, tendremos un mejor control sobre lo que CloudFormation puede y no puede hacer dentro de los límites de la stack de CloudFormation.

También contamos con dos opciones sobre lo que CloudFormation debe hacer cuando se produce un error en una implementación de stack. Podemos elegir Roll back all stack resources, que es la opción predeterminada, o Preserve successfully provisioned resources. Esta última es una característica con la que podemos ahorrar tiempo cuando desarrollamos grandes plantillas de CloudFormation.

cloudformation5

En la parte inferior, encontraremos la sección Advanced Options, con la que podemos configurar una política de stack, que es un documento en JSON que define qué recursos de AWS queremos proteger de actualizaciones no intencionadas durante una actualización de la stack.

Contamos con la opción de configurar un rollback automático, estableciendo una alarma de CloudWatch para monitorizar la actualización de una stack. Por ejemplo, si la alarma supera el umbral establecido, enviará una señal a CloudFormation para revertir la stack al estado anterior.

También es posible agregar notificaciones a la stack de CloudFormation agregando un ARN de Topics SNS. Esta es una característica útil si queremos recibir notificaciones sobre actualizaciones de stack en Slack, por correo u otros medios de comunicación.

Por último, podemos establecer un tiempo de espera personalizado antes de que se agote el TimeOut para la creación de una stack. También podemos protegerla de una eliminación accidental con la función Termination protection.

Revisión de la stack

El último paso del despliegue de la plantilla de CloudFormation sería la fase de revisión, en la que podemos verificar todos los detalles que cumplimentaron en los 3 pasos anteriores.

cloudformation6

Finalmente, nos desplazamos hasta la parte inferior y hacemos clic en "Submit" para iniciar el despliegue en AWS de la plantilla de CloudFormation.

Una vez iniciado el proceso de despliegue, podemos ver el estado de los recursos desplegados en la pestaña de eventos la stack "WordPress-sample-basic".

cloudformation7

IDE para CloudFormation

Para aprovechar al máximo la potencia y la flexibilidad de CloudFormation, los usuarios deben tener una herramienta de desarrollo de software adecuada para escribir y administrar plantillas de CloudFormation. Esta herramienta de desarrollo de software se conoce como IDE (Integrated Development Environment) y hay muchas opciones disponibles para los usuarios de CloudFormation.

Son herramientas de desarrollo de software que permiten a los usuarios administrar código de manera más eficiente, con el que pueden escribir código, realizar depuración, administrar recursos y realizar otras tareas relacionadas con el desarrollo de software. Los usuarios pueden utilizarlo para escribir y administrar plantillas de CloudFormation de forma más eficiente, ofreciendo características avanzadas que facilitan el trabajo con CloudFormation: autocompletado de código, depuración de plantillas, validación de plantillas y herramientas de administración de recursos. A continuación, proporcionaremos una breve descripción de algunos de los IDE más destacados para CloudFormation.

AWS CloudFormation Designer

AWS CloudFormation Designer es una herramienta que se puede usar para diseñar y administrar plantillas de CloudFormation, y que proporciona a los usuarios una interfaz gráfica para diseñar con facilidad plantillas de CloudFormation.

Los usuarios pueden arrastrar y soltar recursos, editar los parámetros de los recursos y administrar los recursos de CloudFormation de forma visual. También proporciona validación de plantillas para ayudar a los usuarios a detectar errores y optimizar las plantillas.

La siguiente captura corresponde a una plantilla cargada en Designer con la que se ha desplegado la stack de nuestro ejemplo anterior.

cloudformation8

Visual Studio Code

Se trata de un editor de código multiplataforma gratuito y de código abierto que se puede usar para codificar y administrar plantillas de CloudFormation. Esta herramienta ofrece a los usuarios una variedad de características avanzadas que facilitan el trabajo con CloudFormation. Por ejemplo, Visual Studio Code proporciona autocompletado de código, depuración de plantillas, validación de plantillas y herramientas de administración de recursos.

Además, Visual Studio Code también ofrece a los usuarios una variedad de extensiones y temas que se pueden usar para personalizar y optimizar el editor para su uso con CloudFormation. Esta herramienta también es compatible con una variedad de lenguajes de programación.

cloudformation9

PyCharm by JetBrains

Es un IDE de Python para desarrolladores profesionales con una muy buena integración con GitLab y ofrece soporte para otros lenguajes de programación, como Java, JavaScript, JSON, TypeScript, HTML, CSS, etc.

Incluyen un depurador para encontrar y corregir errores, herramientas para simplificar y optimizar el código, y un administrador de versiones para controlar los cambios en el código.

cloudformation10

Conclusiones

Al usar CloudFormation, podemos ahorrar tiempo y esfuerzo al configurar y administrar su infraestructura en la nube. Además, CloudFormation ofrece una variedad de características, como plantillas de CloudFormation, escalado automático, administración de recursos, entre otras, que facilitan la configuración y administración de la infraestructura en la nube.

Por todos estos motivos, consideramos que CloudFormation es una herramienta útil y eficiente para la configuración y administración de la infraestructura en la nube si tu arquitectura se encuentra desplegada en Amazon Web Services.

Descubre más en otros artículos relacionados:

¿Qué es la Infraestructura como código (Infrastructure as Code)?

Introducción a Terraform: Instalación, comandos y certificaciones

Contacta con nosotros para más información