Qué vas a construir
Un experimento local con estado antes/después.
Validar state, módulos, policy y recuperación antes de conectar un provider o ejecutar apply.
Límite de seguridad: La validación comprometida no usa credenciales, provider real, apply ni recursos facturables.
Mapa mental
El plan es una decisión revisable; apply solo viene después de entender costo, superficie y destrucción.
Validar state y locking.
Revisar contratos de módulo.
Aplicar policy al plan.
Ensayar recuperación con evidencia.
Prerrequisitos y lecturas conectadas
Antes de ejecutar
- Node.js 20 o superior.
- No exportar credenciales cloud.
Artículos que alimentan el lab
01Validar state y locking
Comprobar que el backend conserva memoria y excluye escritores concurrentes.
node tools/labs/terraform-lab-network/validate-plan.mjs state
Checks
- ✓ Backend remoto declarado.
- ✓ Cifrado y versionado activos.
- ✓ Locking y restauración ensayados.
Evidencia
JSON con state=true.
02Validar el contrato de módulo
Evitar módulos que oculten provider o filtren estado innecesario.
node tools/labs/terraform-lab-network/validate-plan.mjs modules
Checks
- ✓ Inputs tipados.
- ✓ Outputs acotados.
- ✓ Provider no oculto.
- ✓ Fixture probado.
Evidencia
JSON con modules=true.
03Aplicar policy al plan
Detener costo, exposición o tipos no revisados antes de apply.
node tools/labs/terraform-lab-network/validate-plan.mjs policy
Checks
- ✓ Plan JSON revisado.
- ✓ Costo <= 5 USD.
- ✓ Sin ingress público.
- ✓ Allowlist cerrada.
Evidencia
JSON con policy=true.
04Ensayar recuperación
Practicar evidencia y orden antes de force-unlock, import o state surgery.
node tools/labs/terraform-lab-network/validate-plan.mjs recovery
Checks
- ✓ Copia preservada.
- ✓ Propietario del lock identificado.
- ✓ Objetos remotos comparados.
- ✓ Plan posterior al import.
Evidencia
JSON con recovery=true y blindForceUnlock=false.
Criterios de aceptación, cleanup y fallas típicas
Aceptar el lab
- El script pasa.
- No se usan secretos.
- Puedes explicar por qué cada guardrail bloquea apply.
Cleanup
Teardown futuro
terraform destroy -auto-approveFixture actual
No crea recursos; no hay estado remoto que eliminar.Troubleshooting
allowedResources=false
Causa: El plan contiene un tipo no revisado.
Fix: Revisa riesgo y costo antes de ampliar la allowlist.
state=false
Causa: Falta versionado, locking o prueba de restauración.
Fix: Corrige el contrato; no uses force-unlock para ocultar el hueco.
recovery=false
Causa: La secuencia omite evidencia previa al cambio.
Fix: Preserva state, identifica escritor y compara objetos antes de importar.