Hoja de referencia de Terraform - comandos útiles y ejemplos

La lista de todos los comandos de terraform

Índice

Aquí tienes una hoja de referencia completa de Terraform con comandos esenciales, elementos de configuración, gestión de recursos, módulos, variables, manejo de 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 nube (por ejemplo, AWS, Azure, GCP) utilizando archivos de configuración declarativos. Su propósito principal es automatizar el aprovisionamiento de infraestructura, garantizar la consistencia y reducir los errores manuales. Terraform admite flujos de trabajo multi-nube, modulares y basados en estado, lo que lo convierte en un pilar de las prácticas modernas de DevOps.

estudiante usando terraform

Beneficios clave de Terraform:

  • Sintaxis Declarativa: Define los estados deseados de la infraestructura en código.
  • Agnosticidad de Proveedores: Funciona con AWS, Azure, GCP, Kubernetes y más.
  • Gestión de Estado: Rastrea los cambios en la 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
    

Verificación

terraform --version

Comandos de la CLI de Terraform

Aquí está la lista de todos los comandos de Terraform:

Comando Descripción
terraform init Inicializar un directorio de configuración de Terraform nuevo o existente
terraform validate Verificar si la configuración es válida
terraform plan Mostrar el plan de ejecución sin realizar cambios
terraform apply Aplicar los cambios necesarios para alcanzar el estado deseado
terraform destroy Destruir la infraestructura gestionada por Terraform
terraform fmt Reformato de archivos de configuración en el estilo estándar
terraform show Mostrar el estado actual o el plan
terraform refresh Actualizar el estado con la infraestructura real
terraform providers Mostrar los proveedores utilizados en la configuración
terraform graph Visualizar las dependencias de recursos como un gráfico
terraform workspace list Listar todos los espacios de trabajo disponibles
terraform workspace new Crear un nuevo espacio de trabajo
terraform workspace select Cambiar a un espacio de trabajo especificado
terraform workspace show Mostrar el nombre del espacio de trabajo actual
terraform workspace delete Eliminar un espacio de trabajo especificado
terraform output Mostrar valores de salida del archivo de estado
terraform import Importar un recurso existente en Terraform
terraform taint Marcar un recurso para su recreación en la próxima aplicación
terraform untaint Desmarcar un recurso como taintado
terraform state list Listar recursos en el archivo de estado
terraform state show Mostrar atributos de un solo recurso en el estado

Elementos esenciales de la 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
    }
    

Trabajo con variables

  • Declarar variables
    variable "region" {
      description = "Región de AWS"
      default     = "us-east-1"
    }
    
  • Asignar 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 de 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 cadena:
    resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
  • Ejemplos de lista, mapa:
    locals {
      my_map = { a = 1, b = 2 }
    }
    

Provisionadores

Se utilizan para la configuración inicial de recursos. Ejemplo:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo Instancia creada"
  }
}

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 de estado (S3, Azure Blob, etc.)
  • Cifrar archivos de estado en backends remotos
  • Modularizar la infraestructura utilizando módulos reutilizables
  • Documentar sus configuraciones
  • Probar en entorno de staging antes de producción

Referencias adicionales

  • Ayuda: terraform --help o [comando] --help para ayuda específica de comandos
  • Depuración: Establecer TF_LOG=INFO o TF_LOG=DEBUG para registros detallados
  • Formato: terraform fmt

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

Enlaces útiles