Terraform 26: Locking del state, drift y refresh
easy⏱ 5 mincourseterraform
El locking evita la corrupción concurrente
Cuando una operación escribe el state, el backend azurerm toma un blob lease sobre el archivo de state. Un segundo apply que empiece mientras tanto falla rápido con un error de lock en vez de competir y corromper el state. El lock se libera automáticamente cuando la corrida termina. Esta es una gran razón por la que los backends remotos le ganan a los archivos locales para equipos.
# A concurrent run refuses to proceed:
#
# Error: Error acquiring the state lock
# Lock Info:
# ID: 3f1c...
# Operation: OperationTypeApply
# Who: ci-runner@build-agent-7
#
# Only force it if you are SURE no run is active:
# terraform force-unlock 3f1c...
Drift y refresh
Drift es cuando el recurso real diverge del state — alguien lo editó en el portal, u otra herramienta lo cambió. Antes de planificar, Terraform hace refresh: relee cada recurso de la nube y actualiza los valores registrados del state, así el plan compara tu config contra la realidad actual y propone reconciliar la diferencia.
terraform refresh está deprecado — usá flags de plan/apply
El comando suelto terraform refresh mutaba el state en silencio y está deprecado. En su lugar, el refresh ocurre automáticamente dentro de plan/apply. Para solo reconciliar el drift sin cambiar la config, corré terraform apply -refresh-only; para saltear el refresh por velocidad, corré terraform plan -refresh=false.
# See drift without proposing config changes:
terraform plan -refresh-only
# Accept the refreshed reality into state:
terraform apply -refresh-only
Detectá el drift
Implementá detectDrift(desired, actual) que devuelva un array ordenado de las claves cuyos valores difieren entre los dos objetos (asumí las mismas claves). El starter compara { sku: "Standard", minTls: "1.2" } contra { sku: "Premium", minTls: "1.2" } y loguea el resultado — se espera ["sku"].