Saltar a contenido

Terraform & OpenTofu - Infraestructura como Código

🚀 Iniciar con Terraform en 15 minutos

¿Nuevo en Terraform? Comienza aquí:

Introducción a Terraform

Terraform es una herramienta de Infraestructura como Código (IaC) desarrollada por HashiCorp que permite definir y gestionar infraestructura de manera declarativa usando archivos de configuración.

Introducción a OpenTofu

OpenTofu es un fork de Terraform que surgió en 2023 como respuesta al cambio de licencia de HashiCorp de MPL 2.0 a BSL 1.1. OpenTofu mantiene la compatibilidad total con Terraform mientras garantiza que permanezca como software de código abierto bajo la licencia MPL 2.0.

Comparativa: Terraform vs OpenTofu

Compatibilidad

  • Terraform: Versión original de HashiCorp
  • OpenTofu: 100% compatible con Terraform, incluyendo:
  • Sintaxis HCL idéntica
  • Mismos providers y módulos
  • Mismos comandos y workflows
  • Migración transparente

Licencias

  • Terraform: BSL 1.1 (Business Source License) - restrictiva para uso comercial
  • OpenTofu: MPL 2.0 (Mozilla Public License) - verdadero código abierto

Desarrollo

  • Terraform: Desarrollado por HashiCorp
  • OpenTofu: Desarrollado por la comunidad, liderado por Gruntwork y otros contribuyentes

Roadmap

  • Terraform: Controlado por HashiCorp
  • OpenTofu: Roadmap abierto y dirigido por la comunidad

Migración

La migración de Terraform a OpenTofu es completamente transparente:

# Simplemente reemplaza el binario
# Los archivos .tf, .tfvars y .tfstate funcionan sin cambios

Conceptos fundamentales

Providers

Los providers son plugins que permiten a Terraform interactuar con diferentes servicios y plataformas.

# Configuración de provider AWS
provider "aws" {
  region = "us-west-2"
}

Resources

Los resources representan objetos de infraestructura que Terraform gestiona.

# Crear una instancia EC2
resource "aws_instance" "example" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"

  tags = {
    Name = "ExampleInstance"
  }
}

Data Sources

Los data sources permiten obtener información sobre recursos existentes.

# Obtener información de una AMI
data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }
}

Sintaxis básica

Variables

# variables.tf
variable "instance_type" {
  description = "Tipo de instancia EC2"
  type        = string
  default     = "t2.micro"
}

variable "environment" {
  description = "Ambiente de despliegue"
  type        = string
}

Outputs

# outputs.tf
output "instance_id" {
  description = "ID de la instancia creada"
  value       = aws_instance.example.id
}

output "public_ip" {
  description = "IP pública de la instancia"
  value       = aws_instance.example.public_ip
}

Comandos básicos

# Inicializar Terraform
terraform init

# Planificar cambios
terraform plan

# Aplicar cambios
terraform apply

# Destruir infraestructura
terraform destroy

# Mostrar estado
terraform show

# Listar recursos
terraform state list

Casos de uso

  • Gestión de infraestructura en la nube
  • Automatización de despliegues
  • Gestión de configuraciones
  • Multi-cloud deployments

Mejores prácticas

  • Usar versionado de código
  • Separar configuración por ambientes
  • Utilizar módulos reutilizables
  • Implementar políticas de seguridad
  • Documentar configuraciones

Próximos pasos

En las siguientes secciones exploraremos:

  • Módulos de Terraform
  • Workspaces y estados remotos
  • Integración con CI/CD
  • Políticas con Sentinel
  • Terraform Cloud

Recursos adicionales

Terraform (HashiCorp)

OpenTofu

Comunidad

Videos tutoriales

Video: Terraform desde cero - Infraestructura como Código completa

Artículos y comparativas


¿Buscas comandos rápidos?

Consulta nuestras Recetas rápidas para comandos copy-paste comunes.

¿Problemas con Terraform?

Revisa nuestra sección de troubleshooting para soluciones a errores comunes.