APIs Arquitectura de Software Technology
Terraform PoC blog

¿Qué es Terraform?

Terraform es una herramienta de software open-source de infraestructura como código que proporciona un flujo de trabajo de CLI consistente para administrar cientos de servicios en la nube. Terraform codifica las APIs de la nube en archivos de configuración declarativos.

Conceptos clave

Sacados de la documentación oficial de Terraform.

Recurso

El recurso es aws_vpc, aws_db_instance, etc. Un recurso pertenece a un proveedor, acepta argumentos, genera atributos y tiene ciclos de vida. Un recurso se puede crear, recuperar, actualizar y eliminar.

Módulo de recursos

El módulo de recursos es una colección de recursos conectados que juntos realizan la acción común (por ejemplo, el módulo AWS VPC Terraform crea VPC, subredes, puerta de enlace NAT, etc.). Depende de la configuración del proveedor, que se puede definir en él, o en estructuras de nivel superior (por ejemplo, en el módulo de infraestructura).

Módulo de infraestructura

Un módulo de infraestructura es una colección de módulos de recursos, que lógicamente pueden no estar conectados, pero en la situación/proyecto/configuración actual tiene el mismo propósito. Define la configuración de los proveedores, que se pasa a los módulos de recursos posteriores ya los recursos. Normalmente se limita a trabajar en una entidad por separador lógico (p. ej., región de AWS, proyecto de Google).

Por ejemplo, el módulo terraform-aws-atlantis utiliza módulos de recursos como terraform-aws-vpc y terraform-aws-security-group para administrar la infraestructura necesaria para ejecutar Atlantis en AWS Fargate .

Otro ejemplo es el módulo terraform-aws-cloudquery, en el que varios módulos de terraform-aws-modules se utilizan juntos para administrar la infraestructura y utilizar los recursos de Docker para crear, enviar e implementar imágenes de Docker. Todo en un conjunto.

Composición

La composición es una colección de módulos de infraestructura, que pueden abarcar varias áreas lógicamente separadas (p. ej., regiones de AWS, varias cuentas de AWS). La composición se utiliza para describir la infraestructura completa requerida para toda la organización o proyecto.

Una composición consta de módulos de infraestructura, que constan de módulos de recursos, que implementan recursos individuales.

infraestructure composition

Composición de una estructura simple.

Fuente de datos

El origen de datos realiza una operación de solo lectura y depende de la configuración del proveedor, se usa en un módulo de recursos y un módulo de infraestructura.

La fuente de datos terraform_remote_stateactúa como un pegamento para módulos y composiciones de nivel superior.

La fuente de datos externa permite que un programa externo actúe como fuente de datos, exponiendo datos arbitrarios para su uso en otras partes de la configuración de Terraform. Este es un ejemplo de un módulo terraform-aws-lambda donde el nombre del archivo se calcula llamando a una secuencia de comandos externa de Python.

La fuente de datos http realiza una solicitud HTTP GET a la URL dada y exporta información sobre la respuesta, lo que a menudo es útil para obtener información de puntos finales donde no existe un proveedor nativo.

Estado remoto

Los módulos de infraestructura y las composiciones deben conservar su estado de Terraform en una ubicación remota donde otros puedan recuperarlos de forma controlable (por ejemplo, especificar ACL, control de versiones, registro).

Novedades sobre Terraform

Taller

Requisitos:

Mediante el código provisto, se verán las diferencias entre las principales estructuras lógicas de terraform así como el uso de estas de forma práctica.

resource module

Los interesantes son el resource-module y infra-module.

¿Cómo es la estructura de resource module de Terraform?

estructura resource-module

Como podemos observar, tenemos separados los archivos por su función. Los más comunes son versions.tf dónde se especifican versiones y proveedores necesarios para el correcto funcionamiento del módulo, variables.tf dónde se incluyen las variables que tiene el módulo, outputs.tf que controla las salidas al hacer terraform apply y main.tf que seráa dónde los recursos estarán definidos.

En cuanto a infra-module la estructura sería algo más compleja pero muy similar:

infra-module Terraform

Como podemos observar, los archivos en la raíz son idénticos, la diferencia es que este proyecto tiene un directorio de modules dónde se definen partes del proyecto en vez de tenerlo todo en la raíz. En cualquier proyecto con un mínimo de complejidad es recomendado seguir este patrón ya que abstrae responsabilidad del módulo principal que se encarga principalmente de unir los diversos módulos en el proyecto en vez de de definir la infraestructura por sí mismo.

Para ejecutar un proyecto de terraform deberemos seguir los siguientes pasos: 

Primero ejecutamos terraform init, comando encargado de inicializar el proyecto con sus módulos (tanto locales como externos) y del state.

terraform init

A continuación deberemos hacer terraform plan. Este comando se encarga de revisar la infraestructura que deberá desplegar en base al código provisto.

terraform plan

Por último, tras revisar los cambios en el plan y comprobar que son los que queremos hacemos terraform apply

terraform apply

Con esto tendríamos desplegada la infraestructura.

// ¿Quieres saber más sobre esta herramienta?

¡Descubre Terraform en profundidad!

Author

Sandra Ciruelos

Leave a comment

Tu dirección de correo electrónico no será publicada.