Hoja de referencia de Terraform - comandos útiles y ejemplos
La lista de todos los comandos de terraform
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.
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"
- CLI:
- 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
oTF_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
- https://developer.hashicorp.com/terraform
- Hoja de referencia de Docker
- Hoja de referencia de Docker Compose - Comandos más útiles con ejemplos
- Hoja de referencia de Kubernetes
- Implementar un proyecto Flutter con backend en AWS Amplify
- Implementar un sitio web generado por Hugo en AWS S3
- Rendimiento de AWS Lambda: JavaScript vs Python vs Golang
- Lambda con capas en AWS SAM y Python
- AWS SAM + AWS SQS + Python PowerTools
- Minio como alternativa a AWS S3. Visión general e instalación de Minio