Terraform General Commands

# Obtener información sobre la versión de Terraform:

$ terraform version

# Mostrar ayuda para un comando específico:

$ terraform -h

# Validar la configuración de Terraform:

$ terraform validate

# Mostrar el estado actual de Terraform:

$ terraform show

# Importar recursos existentes en el estado de Terraform:

$ terraform import resource_type.resource_name resource_id

Terraform Plan

# Crear un archivo de plan y guardarlo:

$ terraform plan -out=tfplan

# Mostrar solo los cambios aprobados:

$ terraform plan -detailed-exitcode

# Mostrar cambios en formato JSON:

$ terraform show -json tfplan

# Ejecutar un plan con auto-aprobación:

$ terraform apply -auto-approve

# Ejecutar un plan en un directorio específico:

$ terraform plan /ruta/del/directorio

Terraform Destroy

# Destruir la infraestructura creada:

$ terraform destroy

# Destruir solo un recurso específico:

$ terraform destroy -target=resource_type.resource_name

# Destruir con auto-aprobación:

$ terraform destroy -auto-approve

# Destruir en un directorio específico:

$ terraform destroy /ruta/del/directorio

# Destruir en un workspace específico:

$ terraform workspace select nombre_del_workspace && terraform destroy

Terraform Variables and Outputs

# Definir variables en un archivo de configuración:

$ terraform apply -var='variable_name=value'

# Mostrar valores de salida después de aplicar:

$ terraform output

# Especificar archivo de variables:

$ terraform apply -var-file=variables.tfvars

# Crear y utilizar módulos reutilizables:

$ terraform init -from-module=source_module

# Crear un archivo de salida personalizado:

$ terraform output -json > output.json

Terraform Workspaces

# Crear un nuevo workspace:

$ terraform workspace new nombre_del_workspace

# Mostrar el workspace actual:

$ terraform workspace show

# Cambiar al workspace especificado:

$ terraform workspace select nombre_del_workspace

# Eliminar un workspace:

$ terraform workspace delete nombre_del_workspace

# Listar todos los workspaces:

$ terraform workspace list

Terraform State Management

# Mover el archivo de estado a un nuevo backend:

$ terraform init -backend-config=backend.hcl

# Forzar una operación de bloqueo en el estado:

$ terraform force-unlock LOCK_ID

# Mostrar un resumen del estado actual:

$ terraform state list

# Mostrar detalles de un recurso específico en el estado:

$ terraform state show resource_type.resource_name

# Eliminar un recurso del estado:

$ terraform state rm resource_type.resource_name

Terraform Remote Backends

# Configurar un backend remoto S3:

$ terraform init -backend-config=s3-backend.hcl

# Configurar un backend remoto Azure Storage:

$ terraform init -backend-config=azure-backend.hcl

# Configurar un backend remoto HTTP:

$ terraform init -backend-config=http-backend.hcl

# Configurar un backend remoto Consul:

$ terraform init -backend-config=consul-backend.hcl

# Configurar un backend remoto GCS:

$ terraform init -backend-config=gcs-backend.hcl

Terraform Modules

# Crear un módulo personalizado:

$ terraform init -module-depth=-1

# Utilizar un módulo en tu configuración:

module "nombre_del_modulo" { source = "./ruta_del_modulo" }

# Crear un módulo con variables de entrada y salida:

$ terraform init -module-depth=-1

# Estructura recomendada para un módulo:

module "nombre_del_modulo" { source = "github.com/usuario/modulo" }

# Utilizar un módulo público desde el Terraform Registry:

module "nombre_del_modulo" { source = "terraform-aws-modules/ec2-instance/aws" }

Terraform Initialization

# Inicializar un nuevo directorio de configuración:

$ terraform init

# Descargar y actualizar módulos de Terraform:

$ terraform get -update

# Inicializar y seleccionar un backend específico:

$ terraform init -backend-config=backend.hcl

# Mostrar la configuración del backend:

$ terraform show -backend=true

# Inicializar y seleccionar un workspace específico:

$ terraform workspace select nombre_del_workspace

Terraform Providers

# Configurar un proveedor específico:

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

# Utilizar múltiples proveedores en un archivo:

provider "aws" { region = "us-west-2" }
provider "google" { credentials = file("account.json") }

# Configurar alias para proveedores:

provider "aws" { alias = "primary" }

# Configurar proveedores personalizados:

provider "custom" { version = "1.2.3" }

# Utilizar proveedores específicos en módulos:

provider "aws" { region = "us-east-1" }