Saltar al contenido principal

¿Qué es Terraform? Empieza con la Infraestructura como Código

Lee nuestra guía paso a paso para principiantes sobre el uso de Terraform, y aprende a automatizar y gestionar eficazmente tu infraestructura de Azure, AWS y Google Cloud.
Actualizado 29 jul 2024  · 10 min de lectura

La Infraestructura como Código (IaC) es un proceso que automatiza el aprovisionamiento y la gestión de la infraestructura mediante código. Aunque pueden utilizarse herramientas de configuración de hardware físico y de configuración interactiva para aprovisionar la infraestructura, la IaC ofrece varias ventajas, como el control de versiones, la repetibilidad y la escalabilidad. Una de las mejores herramientas de IaC disponibles es Terraform, una solución desarrollada por HashiCorp en 2014 y utilizada por más de 500.000 organizaciones de todo el mundo. Veamos cómo funciona Terraform y cómo utilizarlo para las operaciones informáticas modernas.

Cuando empecemos a aprender sobre Terraform, debes saber que la familiaridad con al menos uno de los principales proveedores de la nube (AWS, Azure, Google Cloud, etc.) es un requisito previo, ya que Terraform se utiliza para gestionar la infraestructura de la nube. Nuestro curso Comprender la computación en nube proporciona una base sólida si eres nuevo en la computación en nube.

¿Qué es Terraform?

Terraform es una herramienta de código abierto que te permite definir los componentes de la infraestructura y sus relaciones mediante un lenguaje de configuración de alto nivel.

En los archivos de configuración de Terraform legibles por humanos, puedes especificar el estado deseado de tu infraestructura y Terraform calcula automáticamente cómo llegar a ese estado. Estos archivos pueden versionarse, compartirse y reutilizarse para proporcionar una forma coherente de gestionar tu infraestructura, desde los recursos informáticos y de almacenamiento, hasta las funciones DNS y SaaS.

Terraform puede utilizarse con varios proveedores de nube, en infraestructuras multi-nube y en entornos locales.

Características principales de Terraform

Echemos un vistazo más de cerca a los aspectos fundamentales que distinguen a Terraform: 

HashiCorp Configuration Language

Terraform utiliza un lenguaje de alto nivel llamado Lenguaje de Configuración de HashiCorp (HCL), diseñado específicamente para definir la infraestructura como código. Los lenguajes de configuración de alto nivel implementan una sintaxis declarativa que es abstracta y fácil de usar en comparación con los scripts de bajo nivel y la configuración manual. Puede que te hayas encontrado antes con lenguajes de alto nivel, en archivos YAML o JSON. 

HCL sigue una estructura de bloques, donde cada bloque anidado representa recursos y sus configuraciones. Los recursos se definen explícitamente con nombres y atributos.

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

Plan de ejecución

Después de definir el estado deseado de tu infraestructura, Terraform generará un plan de ejecución. Este plan enumerará los pasos que Terraform debe dar para alcanzar ese estado, de modo que puedas revisar los cambios antes de que se apliquen. Comprobar el plan antes de aplicar los cambios evitará modificaciones no deseadas, como la eliminación de recursos.

Gestión estatal

Terraform mantiene un archivo de estado que rastrea automáticamente el estado actual de tu infraestructura y sirve como fuente de verdad a la hora de determinar qué cambios hay que hacer. Por defecto, se almacena localmente y se llama terraform.tfstate. 

Proveedores

Los proveedores son plugins que interactúan con las API de las plataformas en la nube y otros servicios y permiten a Terraform gestionar una amplia variedad de recursos. Los proveedores oficiales son desarrollados y mantenidos por HashiCorp y sus socios de confianza, como AWS, Azure, Google Cloud, Github, Datadog, etc. También hay plugins desarrollados por la comunidad, que puedes encontrar en el Registro de Terraform o en Github.

Gráfico de recursos

Terraform construye un gráfico de recursos que muestra los recursos de tu infraestructura y las relaciones entre ellos. Este gráfico permite a Terraform generar planes de forma eficaz, gestionar las dependencias entre recursos y asegurarse de que los recursos se crean, actualizan y eliminan en el orden correcto. Este gráfico también es una forma estupenda de visualizar tu infraestructura y comprender el impacto de los cambios que pretendes realizar. 

Ejemplo de Terraform Resource Graph, que muestra los recursos de AWS y las relaciones de dependencia entre ellos

Ejemplo de gráfico de recursos. Fuente: Documentación de HashiCorp

Primeros pasos con Terraform

Vamos a recorrer nuestro primer flujo de trabajo Terraform. Si eres nuevo en DevOps o en la computación en nube en general, te recomendaría que siguieras nuestros cursos Comprender la computación en nube e Introducción a DevOps antes de seguir adelante.

Instalación y configuración

En este tutorial de Terraform, crearemos recursos en AWS. Si quieres seguirnos y no tienes una cuenta, ve a AWS y regístrate.

  1. Descarga Terraform desde el sitio web oficial. Elige el binario adecuado para tu sistema operativo y sigue las instrucciones de instalación.
  2. Una vez que hayas instalado Terraform, abre una nueva ventana de Terminal y ejecuta terraform -version para asegurarte de que el software está instalado correctamente. 
  3. Instalar la CLI de AWS
  4. Configura la CLI de AWS ejecutando aws configure en tu terminal. Se te pedirá que introduzcas tu ID de Clave de Acceso, tu Clave de Acceso Secreta, tu nombre de región por defecto y tu formato de salida por defecto. Terraform debería poder acceder a ellos automáticamente.

Primera configuración de Terraform

Crea un directorio nuevo y tu primer archivo de configuración. Llamémoslo main.tf, y digámosle a Terraform que queremos crear una instancia AWS EC2. El código, escrito en HCL, tiene este aspecto:

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

Inicializar el proyecto

Ahora vamos a inicializar nuestro proyecto Terraform ejecutando el siguiente comando:

$ terraform init

Este es un comando único y descargará los plugins de proveedor necesarios. No necesitarás ejecutarlo para los cambios posteriores. 

Plan

Ahora queremos generar nuestro plan de ejecución. Recuerda que el plan resaltará los cambios que Terraform deberá realizar para alcanzar nuestro estado deseado (en este caso, una instancia EC2 en ejecución). Corre:

$ terraform plan

Deberías ver algo así:

Terraform will perform the following actions:

  # aws_instance.example will be created
  + resource "aws_instance" "example" {
      + ami                           = "ami-0c55b159cbfafe1f0"
      + instance_type                 = "t2.micro"
      ...
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Aplica

Revisamos el plan y ahora decidimos ejecutarlo y aprovisionar los recursos. En tu terminal, ejecuta

$ terraform apply

Se te pedirá que confirmes la acción. Escribe "sí" para continuar.

Do you want to perform these actions? 
Terraform will perform the actions described above. 
Only 'yes' will be accepted to approve. 
Enter a value: yes 

 Deberías ver lo siguiente:

aws_instance.example: Creating... 
aws_instance.example: Still creating... [10s elapsed] aws_instance.example: 
Creation complete after 15s [id=i-0abcdef1234567890] 

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

 ¡Enhorabuena, has aprovisionado tu primera instancia EC2 en AWS utilizando Terraform!

Ventajas de utilizar Terraform

Ya hemos mencionado que el uso de Terraform proporciona muchas ventajas, como la coherencia y la repetibilidad, y una menor tasa de errores humanos gracias a los planes de ejecución. 

Otras ventajas son:

  • Aprovisionamiento rápido: Terraform puede crear y actualizar recursos en paralelo, lo que resulta especialmente útil para poner en marcha rápidamente entornos de desarrollo, pruebas y preparación.
  • Mayor colaboración: Emparejado con un sistema de control de versiones como Git, Terraform es una forma estupenda de aumentar la colaboración y la transparencia sobre tu infraestructura. Los cambios pueden revisarse, aprobarse y seguirse igual que el código de la aplicación.
  • Recuperación eficaz en caso de catástrofe: Si algo va mal, Terraform puede recrear rápidamente toda la infraestructura desde cero utilizando los mismos archivos de configuración.
  • Apoyo comunitario: Terraform fomenta el uso de módulos, que son configuraciones reutilizables que se pueden compartir y promueven las mejores prácticas a la hora de gestionar la infraestructura. Terraform también cuenta con una comunidad activa y un amplio ecosistema de proveedores y módulos, lo que significa que probablemente encontrarás algo para tu pila tecnológica, por muy nicho que sea.

Casos de uso habituales de Terraform

Tanto si eres un Ingeniero de Datos que construye pipelines como un Científico de Datos que busca desplegar sus soluciones en producción, Terraform es una gran herramienta para gestionar tus necesidades de infraestructura. Éstos son algunos de los casos de uso más comunes:

Gestión multi-nube

No siempre es fácil gestionar infraestructuras que abarcan varios proveedores de nubes. Terraform te permite hacer precisamente eso con una sola herramienta. Además, Terraform puede gestionar recursos locales, lo que lo convierte en una solución ideal para las organizaciones que operan en un entorno híbrido.

Flujos de trabajo CI/CD

Terraform se integra bien con los flujos de trabajo CI/CD, lo que significa que puedes desplegar tu infraestructura como parte de tu proceso de entrega de software. También puedes crear y destruir automáticamente entornos de previsualización, desarrollo, pruebas o preparación cuando sea necesario.

Clústeres Kubernetes

Terraform puede gestionar clústeres Kubernetes en diferentes proveedores de nube como AWS (EKS), Azure (AKS) o GCP (GKE). Esto incluye configurar la infraestructura necesaria, gestionar los recursos de Kubernetes dentro del clúster y escalar los clústeres en función de las demandas de carga de trabajo.

Terraform frente a Otras herramientas IaC

Otras herramientas de IaC populares son Ansible, Chef, Puppet y AWS CloudFormation. Cada herramienta tiene sus puntos fuertes y débiles. Echa un vistazo:

Función Terraforma Ansible Chef Marioneta CloudFormation
Código abierto No
Sintaxis declarativa No No
Soporte Multi-Nube No, sólo AWS
Gestión estatal No No
Planes de ejecución No No No No
Gestión de la dependencia Limitado Limitado

Como vemos, aunque todas estas herramientas son potentes por derecho propio, Terraform destaca por su amplio conjunto de funciones. Sin embargo, esta lista no es exhaustiva, y cada herramienta sirve para casos de uso ligeramente diferentes en función de los requisitos. Por ejemplo, Ansible y su naturaleza procedimental son muy adecuados para la gestión de la configuración y las tareas ad hoc.

Conclusión

En los últimos 10 años, Terraform ha ayudado a miles de organizaciones a gestionar su infraestructura informática. Con su enfoque declarativo, sus capacidades de automatización y su compatibilidad con entornos multi-nube, Terraform se ha convertido en una de las herramientas de IaC más populares, y sin duda seguirá siendo un actor importante en el espacio de la gestión de infraestructuras a medida que siga creciendo la adopción de la nube. 

Ahora que ya conoces los conceptos básicos de Terraform, puedes sumergirte en configuraciones más avanzadas y escenarios de la vida real. Echa un vistazo a los tutoriales de Terraform de HashiCorp para aprender a utilizar Terraform para tareas y casos de uso comunes, o echa un vistazo a nuestra entrada de blog 14 Herramientas de Ingeniería de Datos Esenciales para Utilizar en 2024 para comprender cómo Terraform encaja en un conjunto de herramientas de Ingeniero de Datos.

Preguntas frecuentes

¿Es Terraform adecuado para proyectos a pequeña escala o es principalmente para uso empresarial?

Terraform es una herramienta muy útil, ¡independientemente del tamaño de tu proyecto! Tanto si tienes 5 recursos que gestionar como 1000, sin duda verás los beneficios.

¿Cuánto cuesta Terraform?

Terraform es de código abierto y de uso gratuito, pero ten en cuenta que tu(s) proveedor(es) de la nube te cobrará(n) por los recursos aprovisionados y gestionados mediante Terraform.

¿Puede Terraform gestionar bases de datos y otros servicios con estado?

Sí, Terraform puede gestionar bases de datos y otros servicios con estado. Puedes definir instancias, clusters y configuraciones en tus archivos IaC.

¿Cómo gestiona Terraform los secretos y la información sensible en los archivos de configuración?

Terraform fomenta las mejores prácticas para la gestión de secretos mediante el soporte de variables de entorno, variables encriptadas e integraciones con servicios de gestión de secretos como HashiCorp Vault o AWS Secrets Manager.

Temas

Aprende con DataCamp

curso

Understanding Data Engineering

2 hr
237.3K
Discover how data engineers lay the groundwork that makes data science possible. No coding involved!
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

Los 13 mejores proyectos de AWS: De principiante a profesional

Explora 13 proyectos prácticos de AWS para todos los niveles. Mejora tus conocimientos sobre la nube con aplicaciones prácticas del mundo real y la orientación de expertos.
Joleen Bothma's photo

Joleen Bothma

12 min

blog

Cómo aprender Python desde cero en 2024: Guía del experto

Descubre cómo aprender Python, sus aplicaciones y la demanda de conocimientos de Python. Comienza hoy tu andadura en Python ​con nuestra guía completa.
Matt Crabtree's photo

Matt Crabtree

19 min

tutorial

Construir un transformador con PyTorch

Aprende a construir un modelo Transformer utilizando PyTorch, una potente herramienta del aprendizaje automático moderno.
Arjun Sarkar's photo

Arjun Sarkar

26 min

tutorial

Primeros pasos con AWS Athena: Guía práctica para principiantes

Esta guía práctica te ayudará a empezar a utilizar AWS Athena. Explora su arquitectura y características y aprende a consultar datos en Amazon S3 utilizando SQL.
Tim Lu's photo

Tim Lu

28 min

tutorial

Guía de torchchat de PyTorch: Configuración local con Python

Aprende a configurar el torchat de PyTorch localmente con Python en este tutorial práctico, que proporciona orientación paso a paso y ejemplos.
François Aubry's photo

François Aubry

Ver másVer más