Introducción a Terraform: Infraestructura como Código

Última actualización: 14/11/2020

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 Terraform 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.

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. 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 los siguientes libros:

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


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


¡Echa un ojo a mi lista de reproducción de Big Data en Youtube!

Si te ayuda el contenido del blog, por favor considera unirte a la lista de correo para reconocer el trabajo!

Deja una respuesta