Hoja de referencia de Terraform: comandos y ejemplos útiles

La lista de todos los comandos de Terraform

Índice

Aquí tienes una hoja de trucos de Terraform integral con comandos esenciales, elementos de configuración, gestión de recursos, módulos, variables, manejo del estado y mejores prácticas.

Terraform es una herramienta de código de infraestructura (IaC) de código abierto desarrollada por HashiCorp, que permite a los usuarios definir y aprovisionar infraestructura en múltiples proveedores de la nube (por ejemplo, AWS, Azure, GCP) utilizando archivos de configuración declarativa. Su propósito principal es automatizar el aprovisionamiento de infraestructura, garantizar la coherencia y reducir los errores manuales. Terraform soporta flujos de trabajo multinube, modulares y basados en estado, lo que lo convierte en un pilar de las prácticas modernas de DevOps.

Para más herramientas de desarrollo y flujos de trabajo, consulta Herramientas para desarrolladores: La guía completa de los flujos de trabajo de desarrollo modernos.

estudiante usando terraform

Principales beneficios de Terraform:

  • Sintaxis declarativa: Define los estados deseados de la infraestructura en el código.
  • Agnosticismo del proveedor: Funciona con AWS, Azure, GCP, Kubernetes y más.
  • Gestión del estado: Rastrea los cambios de infraestructura para evitar conflictos.

Guía de instalación y configuración

https://developer.hashicorp.com/terraform/tutorials#get-started

El proceso de instalación de Terraform es bastante sencillo.

  • Linux (Ubuntu/Debian):

    wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update && sudo apt install terraform
    
  • Windows (WSL):

    wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip
    unzip terraform.zip
    
  • macOS (Homebrew):

    brew install terraform
    

Para mejorar la productividad en la terminal mientras trabajas con Terraform, consulta Atajos de teclado de Ubuntu: Hoja de trucos completa.

Verificación

terraform --version

Comandos de CLI de Terraform

Aquí tienes la lista de todos los comandos de Terraform:

Comando Descripción
terraform init Inicializa un directorio de configuración de Terraform nuevo o existente
terraform validate Comprueba si la configuración es válida
terraform plan Muestra el plan de ejecución sin realizar cambios
terraform apply Aplica los cambios necesarios para alcanzar el estado deseado
terraform destroy Destruye la infraestructura gestionada por Terraform
terraform fmt Reformatea los archivos de configuración en el estilo estándar
terraform show Muestra el estado actual o el plan
terraform refresh Actualiza el estado con la infraestructura real
terraform providers Muestra los proveedores utilizados en la configuración
terraform graph Visualiza las dependencias de recursos como un gráfico
terraform workspace list Lista todos los espacios de trabajo disponibles
terraform workspace new Crea un nuevo espacio de trabajo
terraform workspace select Cambia a un espacio de trabajo específico
terraform workspace show Muestra el nombre del espacio de trabajo actual
terraform workspace delete Elimina un espacio de trabajo específico
terraform output Muestra los valores de salida del archivo de estado
terraform import Importa un recurso existente en Terraform
terraform taint Marca un recurso para su recreación en la siguiente aplicación
terraform untaint Elimina la marca de “tainted” de un recurso
terraform state list Lista los recursos en el archivo de estado
terraform state show Muestra los atributos de un solo recurso en el estado

Esenciales de configuración

Extensiones de archivo

  • .tf: Archivos de configuración principales (sintaxis HCL)
  • .tfvars: Valores de variables

Tipos de bloques de Terraform

  • Ejemplo de proveedor
    provider "aws" {
      region = "us-east-1"
    }
    
  • Ejemplo de recurso
    resource "aws_instance" "web" {
      ami           = "ami-0abcdef"
      instance_type = "t2.micro"
    }
    
  • Ejemplo de variable
    variable "instance_count" {
      type    = number
      default = 2
    }
    
  • Ejemplo de salida
    output "instance_ip" {
      value = aws_instance.web.public_ip
    }
    
  • Ejemplo de módulo
    module "vpc" {
      source = "./modules/vpc"
      cidr_block = var.vpc_cidr
    }
    

Trabajando con variables

  • Declaración de variables
    variable "region" {
      description = "Región de AWS"
      default     = "us-east-1"
    }
    
  • Asignación de valores
    • CLI: terraform apply -var="region=us-west-2"
    • Archivo tfvars: terraform apply -var-file="prod.tfvars"
  • Tipos: string, number, bool, list, map, object

Gestión del estado

  • Archivo de estado: terraform.tfstate
  • Estado remoto (Ejemplo S3)
    backend "s3" {
      bucket = "my-tf-state"
      key    = "state.tfstate"
      region = "us-east-1"
    }
    
  • Ver estado:
    terraform show
    terraform state list

Bucles y condicionales

  • Count
    resource "aws_instance" "web" {
      count = 3
      ...
    }
    
  • For_each
    resource "aws_s3_bucket" "b" {
      for_each = var.bucket_names
      bucket   = each.value
    }
    
  • Condicionales
    instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
    

Funciones

  • Interpolación de cadenas:
    resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
  • Ejemplos de listas y mapas:
    locals {
      my_map = { a = 1, b = 2 }
    }
    

Provisioners

Utilizados para la inicialización de recursos. Ejemplo:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo Instance created"
  }
}

Mejores prácticas

  • Control de versiones de todos los archivos .tf
  • Bloquear versiones de proveedores para garantizar despliegues consistentes
  • Backend remoto para la gestión del estado (S3, Azure Blob, etc.)
  • Cifrar archivos de estado en backends remotos
  • Modularizar la infraestructura utilizando módulos reutilizables
  • Documentar tus configuraciones
  • Probar en staging antes de la producción

Referencias adicionales

  • Ayuda: terraform --help o [comando] --help para ayuda específica del comando
  • Depuración: Establece TF_LOG=INFO o TF_LOG=DEBUG para registros verbosos
  • Formato: terraform fmt
  • Codificación: Para operaciones de codificación/decodificación Base64, consulta Codificación - decodificación Base64 en Windows, Linux y Mac

Esta hoja de trucos proporciona una referencia de acceso rápido a los aspectos más comunes y avanzados del uso de Terraform, desde comandos hasta mejores prácticas, haciéndola práctica tanto para principiantes como para usuarios avanzados. ¡Que tengas un gran día!

Enlaces útiles