Skip to content

Terraform: introduccion e instalacion

Terraform es una herramienta de infraestructura como codigo (IaC) de HashiCorp. Describe recursos cloud o on-premise en archivos declarativos y los crea, actualiza o destruye de forma reproducible mediante un plan de ejecucion.

Capitulos

  1. Introduccion e instalacion
  2. Providers resources y state
  3. Variables outputs y locals
  4. Modulos
  5. Workspaces y entornos
  6. Plan apply y drift
  7. Backends remotos
  8. Buenas practicas

Que problema resuelve

Sin IaC:

  • Configuracion manual en consola web (no reproducible).
  • "Funciona en mi cuenta" sin documentacion.
  • Drift entre entornos staging y produccion.

Con Terraform:

txt
main.tf + variables -> terraform plan -> terraform apply -> infraestructura real

El estado (terraform.tfstate) registra que recursos gestiona Terraform.

Conceptos clave

ConceptoDescripcion
ProviderPlugin (AWS, Azure, GCP, Docker, Kubernetes…)
ResourceObjeto a crear (aws_instance, azurerm_resource_group)
Data sourceLeer recursos existentes sin crearlos
StateMapa recurso logico -> ID real
PlanDiff entre codigo y estado
ApplyAplicar cambios

Instalacion

Windows (winget)

powershell
winget install HashiCorp.Terraform

Linux / macOS

bash
# Ejemplo con tfenv (gestor de versiones)
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
tfenv install 1.9.0
tfenv use 1.9.0

Verifica:

bash
terraform version

Fija version en equipos y CI (.terraform-version o required_version).

Primer proyecto

bash
mkdir terraform-demo && cd terraform-demo
terraform init

main.tf:

hcl
terraform {
  required_version = ">= 1.6.0"
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "~> 2.4"
    }
  }
}

provider "local" {}

resource "local_file" "hello" {
  content  = "Hola desde Terraform"
  filename = "${path.module}/hello.txt"
}
bash
terraform init
terraform plan
terraform apply

plan muestra cambios; apply los ejecuta (confirma con yes o -auto-approve en CI).

Estructura de carpetas tipica

txt
infra/
  main.tf
  variables.tf
  outputs.tf
  versions.tf
  modules/
    network/
    compute/
  environments/
    staging/
    production/

Flujo de trabajo

txt
editar .tf -> fmt + validate -> plan -> review -> apply -> commit

Comandos utiles:

bash
terraform fmt -recursive
terraform validate
terraform plan -out=tfplan
terraform apply tfplan

Terraform vs alternativas

HerramientaEnfoque
TerraformDeclarativo, multi-cloud, ecosistema HCL
PulumiIaC con lenguajes generalistas (TS, Python)
CloudFormationSolo AWS, nativo
AnsibleMas orientado a configuracion; puede complementar TF

Buenas practicas iniciales

  • Versiona .tf en git; nunca commitees terraform.tfstate con secretos.
  • Usa backend remoto en equipo (capitulo 7).
  • terraform fmt antes de cada commit.
  • Un directorio por entorno o workspaces claros.
  • Documenta variables en variables.tf.

Errores comunes

  • Aplicar sin revisar el plan.
  • State local compartido por copia manual (conflictos).
  • Provider sin pin de version (version = "~> 5.0").
  • Recursos creados a mano fuera de Terraform (drift).
  • Secrets en texto plano en .tf (usa variables sensibles + vault).

Siguiente paso

El capitulo 2 profundiza en providers, recursos y el fichero de estado.