Terraform vs CloudFormation: Comparación de las dos ofertas de infraestructura como código (2022)
Publicado: 2022-04-10La infraestructura como código [IaC] se ha vuelto cada vez más popular en los últimos años y no es de extrañar por qué. IaC, también conocida como infraestructura definida por software, es una configuración de TI que los desarrolladores o los equipos de operaciones pueden usar para administrar y suministrar automáticamente la pila de tecnología para una aplicación a través del software.
Con IaC no es necesario utilizar un proceso manual para configurar sistemas operativos y dispositivos de hardware discretos. También es uno de los fundamentos de DevOps , que potencia la eficiencia y la calidad del trabajo. Las dos herramientas más utilizadas para implementar IaC en AWS son las herramientas de código abierto Terraform y CloudFormation .
¿Qué es Terraform?
- Terraform le permite definir recursos locales y en la nube en archivos de configuración legibles que puede compartir, revisar y reutilizar fácilmente.

- Proporciona un flujo de trabajo consistente y duradero para suministrar y administrar toda su infraestructura.
- Terraform puede administrar componentes de bajo nivel como:
- informática
- recursos de red
- almacenamiento
¿Cómo funciona Terraform?
- Terraform puede crear y administrar recursos a través de sus interfaces de programación de aplicaciones (API) en plataformas en la nube y varios servicios.
- Los proveedores le permiten trabajar con prácticamente cualquier plataforma o servicio con una API accesible.
- La comunidad de Terraform trabaja con más de 1700 proveedores y administra miles de tipos de servicios y recursos y la empresa continúa expandiéndose.
- Puede encontrar todos los proveedores disponibles públicamente en el Registro de Terraform :
-Servicios web de Amazon (AWS)
-Azure, Google Cloud Platform (GCP)
-Kubernetes
- Timón
- GitHub
- Splunk
- Perro de datos
El flujo de trabajo de Core Terraform consta de tres etapas:
- Escribir: defina sus recursos que podrían ejecutarse a través de múltiples proveedores y servicios en la nube.
- Plan: Terraform compilará un plan de ejecución que describa la infraestructura que creará, actualizará o destruirá en función de la infraestructura existente y su configuración.
- Aplicar: una vez aprobado, Terraform realizará todas las operaciones propuestas en la secuencia correcta y considerará cualquier dependencia de recursos.
¿Por qué Terraform?
- Administre cualquier infraestructura
Terraform adopta un enfoque indeleble de la infraestructura para reducir la complejidad de modificar o actualizar su infraestructura y servicios. También realiza un seguimiento de su infraestructura real en un archivo de estado . Este archivo determinará todos los cambios necesarios que deben realizarse en su infraestructura, alineándolo con sus archivos de configuración. Estos archivos describen el estado final de su infraestructura. Dado que Terraform controla la lógica subyacente, no necesitará escribir instrucciones detalladas para crear recursos. Construirá un gráfico de recursos que regula las dependencias de los recursos. Creará o modificará recursos no dependientes, ayudándole a realizar un seguimiento de todos sus recursos fácilmente.
- Estandarizar configuraciones
Terraform es muy eficiente ya que admite módulos o componentes de configuración reutilizables. Los módulos ofrecen una forma sencilla de empaquetar y reutilizar el código y son equivalentes a los métodos o funciones de los lenguajes de programación o secuencias de comandos. Los módulos se consideran una interfaz estándar porque crean recursos asignando entradas y devolviendo salidas. Esto simplifica considerablemente los proyectos al aumentar la legibilidad y permitir que los equipos utilicen bloques lógicos para organizar la infraestructura.
Otro beneficio de los módulos es que se pueden obtener y compartir fácilmente en cualquier proyecto de Terraform. Los módulos se utilizan normalmente como una interfaz para administrar y crear múltiples recursos. Esto reduce significativamente la cantidad de código duplicado en un proyecto, pero copiar y pegar secciones de código mientras solo cambia los parámetros seleccionados puede ser monótono. Mediante el uso de variables de entrada, puede personalizar el comportamiento de un módulo y, posiblemente, cómo etiqueta los recursos. Los módulos de Terraform también pueden devolver resultados, que pueden funcionar como entradas en diferentes módulos o recursos.
Al ejecutar una infraestructura de cualquier tamaño, sin duda habrá una cantidad abrumadora de componentes y configuraciones. Eso puede ser complicado porque hay muchas variaciones sutiles dentro de la infraestructura utilizada por diferentes equipos dentro de una organización. Esto puede complicar aún más las cosas porque la infraestructura puede abarcar una amplia variedad de topografías que van desde las instalaciones hasta numerosos proveedores de nube. Como resultado, organizar y mantener la infraestructura es un proceso complicado.
¿Qué es AWS CloudFormation?
AWS CloudFormation ofrece a las empresas y los desarrolladores una forma sencilla de crear una variedad de AWS relacionados y otros recursos. Los desarrolladores pueden instalar y actualizar bases de datos, computación y una variedad de otros recursos en un estilo directo y declarativo, eliminando el desafío de designar API de recursos específicos. Cloudformation también administra los ciclos de vida de los recursos de manera regular, predecible y segura. También permite reversiones automáticas, administración de estado automatizada y administración de recursos para todas las cuentas y regiones.


CloudFormation le permite dedicar más tiempo a concentrarse en las aplicaciones que se ejecutan en AWS y menos tiempo a administrar sus recursos. Puede diseñar una plantilla que defina todos los recursos de AWS que desee, incluidas las instancias de Amazon EC2 o las instancias de base de datos de Amazon RDS, etc. CloudFormation se encargará de aprovisionar y configurar sus recursos. También maneja la creación y configuración de recursos de AWS y determina toda la logística de dependencia.
¿Por qué CloudFormation?
- Simplifique la gestión de la infraestructura
Para crear una aplicación web escalable que incluya una base de datos back-end, puede usar una base de datos relacional de Amazon, una instancia de base de datos de servicios o un grupo de Auto Scaling. Después de crear recursos con el servicio a aprovisionar que haya elegido, deberá configurarlos para colaborar. Estos pasos adicionales pueden complicar y ralentizar el proceso de puesta en marcha de su solicitud. CloudFormation le permite crear una plantilla o modificar una existente. Una plantilla define todos sus recursos y todos sus componentes.
El uso de esa plantilla para crear una pila de CloudFormation permitirá que el servicio tenga un control total sobre el grupo de Auto Scaling, el balanceador de carga y la base de datos. Sus recursos de AWS serán completamente funcionales una vez que la pila se haya creado correctamente. Eliminar la pila es simple, pero tenga en cuenta que eliminar una pila significa eliminar todos los recursos que contiene. En general, CloudFormation hace que administrar una colección de recursos en una sola unidad sea una experiencia sencilla.
- Replique rápidamente su infraestructura
Si su aplicación requiere disponibilidad adicional, podría replicarla potencialmente en numerosas regiones para que, si una región deja de estar disponible, las personas aún puedan usar su aplicación en otro lugar. Esto es más fácil dicho que hecho. Puede ser un desafío replicar su aplicación porque también requiere que duplique sus recursos. Debe registrar cada recurso requerido por su aplicación mientras administra y configura esos recursos en cada región.
Las plantillas de CloudFormation son excelentes porque puede reutilizarlas para crear sus recursos de manera consistente y repetida. Para hacer esto, debe definir sus recursos una vez y luego aprovisionarlos continuamente en varias regiones. CloudFormation se adapta constantemente y las actualizaciones recientes y las nuevas opciones permiten tener múltiples métodos para crear recursos. Estos incluyen el uso de AWS CDK para la codificación en lenguajes de nivel avanzado, la detección de variaciones de configuración y la importación de recursos existentes. Ahora hay un Registro que facilita la creación de tipos personalizados que tienen muchos de los beneficios principales de Cloudformation.
Cuatro conceptos principales de CloudFormation
- Una plantilla es un archivo de texto con formato JSON o YAML que describe el estado previsto de todos los recursos que necesita para ejecutar correctamente su aplicación. Se componen de lo siguiente:
- Una lista opcional de parámetros de plantilla (valores de entrada suministrados en el momento de la creación de la pila)
- Una lista opcional de valores de salida (por ejemplo, la URL completa de una aplicación web)
- Se utiliza una lista opcional de tablas de datos para buscar valores de configuración estáticos (p. ej., nombres de AMI).
- La lista de recursos de AWS y sus valores de configuración
2. número de versión del formato de archivo de plantilla
3. Una pila aplica y administra todos los recursos en su plantilla, lo que permite que el estado y las dependencias de esos recursos se administren juntos.
4. Un conjunto de cambios es una vista previa de todas las actualizaciones que realizarán las operaciones de pila para crear, actualizar o eliminar recursos.
5. Un conjunto de pilas es un grupo de pilas que administras simultáneamente y que pueden copiar un grupo.