Introducción a Terraform: Infraestructura como Código

Última actualización: 26/03/2024 – Oscar Fernandez

Con este tutorial de introducción a Terraform podrás aprender fácilmente en qué consiste esta tecnología de automatización y gestión de infraestructura, cuál es su arquitectura y cómo funciona.

Introducción a Terraform

¿Qué es Terraform?

Terraform es una herramienta open source para aprovisionar infraestructura mediante código declarativo. Permite automatizar y gestionar la infraestructura informática necesaria para desplegar plataformas y servicios sobre ella. También permite automatizar la gestión de estas plataformas y servicios una vez desplegados.

Al usar un código escrito con un lenguaje declarativo, no es necesario especificar los pasos o las acciones que se necesitan llevar a cabo (esto sería así en un lenguaje imperativo), sino que basta con indicar el resultado final que se quiere obtener. En este caso, el estado de la infraestructura o servicios.

El código fuente de se puede encontrar en su repositorio oficial de Github. Además, existe una distribución de Terraform llamada Terraform Cloud que permite usarlo como un servicio gestionado con planes gratuitos y de pago.

¿Para qué se usa Terraform?

Los dos casos de uso principales de Terraform son la creación de nueva infraestructura y la gestión de cambios en la misma. Me encanta el nombre, hace fácil de recordar para qué sirve.

Por otra parte, Terraform facilita enormemente la replicación de infraestructura. Uno de los casos de uso más comunes consiste en replicar las características de la infraestructura entre diferentes entornos, por ejemplo entre desarrollo, preproducción y producción.

Imagina que necesitas desplegar 5 servidores para ejecutar tu aplicación. Esta aplicación podría estar formada por una base de datos y varios componentes en contenedores Docker. Si este despliegue se deseara hacer en Azure, por ejemplo, sería necesario preparar la infraestructura previamente. Para ello, deberíamos crear las redes, las máquinas virtuales, asignar los permisos necesarios, la seguridad, instalar software como Docker e instanciar los servicios de bases de datos que se necesiten. Todo este procedimiento lo podría hacer un equipo de infraestructura o Devops y es aquí donde entra en juego Terraform. De esta forma, es posible automatizar todas estas operaciones de despliegue e incluso abstraer detalles como el orden en el que se realiza.

¿Cómo funciona Terraform?

Terraform funciona integrándose con numerosos proveedores de infraestructura. Tanto IaaS como PaaS o SaaS. Los más comunes son AWS, Azure, Google Cloud Platform (GCP) o Kubernetes. Estos proveedores exponen APIS de despliegue y de gestión de recursos. En total, Terraform soporta más de 140 proveedores de infraestructura. Podéis explorar la lista completa de proveedores aquí.

Para automatizar los despliegues y los cambios, Terraform usa dos entradas principales en su arquitectura. Por un lado, se encuentra la configuración que especifica el usuario en un fichero. Por otro lado, Terraform almacena y usa el estado de la infraestructura que hay desplegada.

AWS Amazon Web Services Logo

Microsoft Azure Logo

A partir de estas dos entradas, Terraform crea un plan de ejecución comparando el estado con la configuración. Este plan define los pasos y tareas que se necesitan llevar a cabo para dejar la infraestructura en el estado especificado por el usuario. Incluye los recursos que se deben actualizar, crear o eliminar.

Hay que tener en cuenta que la implementación en código puede variar entre los proveedores que queramos utilizar.

Conceptos Básicos

Para implementar nuestros proyectos con Terraform, debemos tener en cuenta los siguientes conceptos básicos.

El fichero principal (main.tf) es el que leerá Terraform para aplicar la creación de recursos. En este fichero también podemos definir variables, aunque lo recomendado es agrupar estas variables en un fichero dedicado a esto (variables.tf).

Una muy buena práctica cuando es dividir nuestro código en módulos reutilizables. Estos módulos deberán estar parametrizados con variables, para que nos puedan ser útiles en varias ocasiones y proyectos.

Por ejemplo, imaginemos que queremos desplegar 3 máquinas virtuales en AWS. Podemos crear un módulo de despliegue genérico y usarlo 3 veces con distintas variables para cada máquina virtual.

Comandos Básicos y Ejemplo de Código

Los comandos básicos en Terraform son 3:

  • Refresh: Actualiza el estado de la infraestructura que proporciona el proveedor.
  • Plan: Crea el plan de ejecución comparando el estado con la configuración. Para ejecutar el plan y no solo previsualizarlo se puede usar el comando apply.
  • Destroy: Destruye los recursos y la infraestructura existente.

A continuación, muestro un ejemplo sencillo de fichero de configuración de Terraform para Azure.

# Configura Azure como proveedor
provider "azurerm" {
  version = "=2.20.0"
  features {}
}

# Crea un grupo de recursos
resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West Europe"
}

# Crea una red virtual en el grupo de recursos
resource "azurerm_virtual_network" "example" {
  name                = "example-network"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  address_space       = ["10.0.0.0/16"]
}

Aquí, podemos ver que la primera parte configura el proveedor como Azure. El segundo fragmento crea un grupo de recursos en el oeste de Europa y le asigna un nombre. Por último, crea una red virtual en el grupo de recursos que se acaba de definir con un espacio de direcciones concreto.

Para ejecutar este código, previamente tenemos que configurar nuestro acceso a la cuenta de Azure.

Terraform vs Ansible

Estas dos herramientas son muy populares para desplegar infraestructura como código (IaC). Ambas tecnologías permiten automatizar el aprovisionamiento y la configuración. ¿Cómo podemos saber cuál es la más adecuada para nuestras necesidades?

Es común confundir estas dos tecnologías, que puede parecer que hacen lo mismo pero tienen diferencias significativas.

Terraform vs Ansible tendencia tiempo
Búsquedas en el tiempo de Terraform y Ansible [Google Trends]

Por un lado, Ansible es una herramienta más madura, y adecuada para gestionar los cambios y las configuraciones de nuestra infraestructura. Por ejemplo, es adecuada para realizar cambios en la configuración del software instalado, actualizar el software o instalar nuevas aplicaciones.

Terraform, por otro lado, es una herramienta más moderna centrada en el despliegue de la infraestructura y su orquestación en los diferentes proveedores.

Aun así, no te tienes por qué quedar solo con una. Estas dos tecnologías pueden combinarse para cubrir todas las necesidades que tengamos en nuestros proyectos. En tu experiencia, ¿cuál te ha resultado más útil?

Siguientes Pasos y Formación

Si quieres seguir aprendiendo de Terraform y explotar esta herramienta al máximo con los proveedores cloud, puedes seguir formándote con estos dos cursos:

Curso Terraform Google Coursera

Gestionando Infraestructura Cloud con Terraform

Curso en Inglés ofrecido por Google en Coursera. Aprenderás a automatizar la definición y el despliegue de tu infraestructura de forma eficiente desde una perspectiva DevOps. Ofrece un entorno online para que puedas realizar los ejercicios.

Curso de Terraform - Automatizar Infraestructuras AWS

Terraform – Automatizar Infraestructuras AWS

Curso en Español de 13 horas en el que aprenderás a automatizar tus despliegues e infraestructuras de AWS con Terraform desde cero. Contiene multitud de ejemplos prácticos que te resultarán muy útiles.

Además, también te dejo algunos libros recomendados:

Preguntas Frecuentes Terraform – FAQ

¿Es Terraform Gratuito?

Terraform es una tecnología open source y gratuita. También existe la distribución llamada Terraform Cloud, un servicio gestionado proporcionado por HashiCorp que tiene muchas funcionalidades gratuitas y otras de pago con herramientas colaborativas y de gobierno.

¿Puede reemplazar Ansible a Terraform?

Aunque Ansible puede reemplazar gran parte de las funcionalidades de Terraform, este último es más usado. Además, proporciona funcionalidades avanzadas de gestión del estado que no están presentes en Ansible aún.

¿Cómo interacciona Terraform con AWS o Azure?

Terraform se comunica con las APIs y SDK que ofrecen AWS o Azure para indicar la infraestructura necesaria. Se puede autenticar usando las credenciales que le permitan realizar las operaciones indicadas.


A continuación, el vídeo-resumen. ¡No te lo pierdas!


Deja una respuesta