Terraform 5: El flujo central — init, plan, apply, destroy
easy⏱ 5 mincourseterraform
init: descarga providers, configura el backend
terraform init lee required_providers, descarga los plugins de provider en .terraform/ y configura el backend (dónde vive el estado). Corrélo una vez por directorio de trabajo y de nuevo cuando agregás un provider o cambiás el backend. No toca infraestructura real.
# In the directory with your .tf files
terraform init
# Initializing the backend...
# Initializing provider plugins...
# - Installing hashicorp/azurerm v3.100.0...
# Terraform has been successfully initialized!
plan: previsualiza los cambios
terraform plan compara tu config contra el estado y el mundo real, y luego imprime las acciones exactas de crear/actualizar/eliminar sin aplicarlas. Guardalo con -out para que apply ejecute exactamente ese plan — sin diferencia entre lo que revisaste y lo que corre.
terraform plan -out=tfplan
# Plan: 2 to add, 0 to change, 0 to destroy.
# Saved the plan to: tfplan
apply y destroy: cambian el mundo
terraform apply ejecuta el plan y actualiza el estado. terraform destroy elimina todo lo que la config administra. Ambos piden confirmación salvo que pases -auto-approve (reservalo para CI, nunca una terminal de prod compartida).
# Apply the saved plan (no second prompt when a plan file is given)
terraform apply tfplan
# Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
# Tear it all down
terraform destroy
# Plan: 0 to add, 0 to change, 2 to destroy.
Solo apply y destroy mutan la realidad
init y plan son seguros/de solo lectura; apply y destroy cambian infraestructura real y estado. Regla de oro: nunca hagas apply de un plan que no acabás de leer. En CI, plan -out en el PR y apply de ese archivo al mergear.
Modelá el pipeline del flujo
Creá workflow, un arreglo ordenado de { command: string; mutates: boolean } para init, plan, apply, destroy. Logueá los comandos que mutan infraestructura, en orden del pipeline, separados por coma (esperá apply, destroy).