Part 13 · CI/CD, Git & Cloud

Terraform: state, graph và production workflow

Terraform không chỉ là viết HCL. Vận hành an toàn phụ thuộc state ownership, provider graph, review plan, identity và recovery khi apply bị gián đoạn.

1. Core workflow

terraform fmt → init → validate → plan → review/policy → apply
                         ↑ refresh state/remote objects ↓
                              state update

init tải providers/modules và cấu hình backend; validate kiểm tra syntax/internal consistency nhưng không chứng minh credentials/quota/runtime; plan dự đoán diff tại thời điểm đó; apply thực hiện graph và cập nhật state. Saved plan giảm plan/apply mismatch nhưng vẫn cần kiểm soát stale external state.

2. Resource graph

Terraform suy dependency từ references, không từ thứ tự file. depends_on chỉ dùng cho dependency ẩn không thể biểu diễn bằng data flow. Excessive explicit dependencies làm graph tuần tự và tạo unknown values. Lifecycle như create_before_destroy, prevent_destroyignore_changes thay replacement/drift semantics nên phải dùng có chủ đích.

3. State và backend

State ánh xạ resource address sang remote object ID/attributes, phục vụ diff và dependency. State có thể chứa secrets dù variable được đánh dấu sensitive.

4. Providers, modules và versions

Pin Terraform/provider constraints và commit dependency lock file. Module nhỏ có typed inputs, validation, outputs tối thiểu và version release. Root module composition thuộc environment; child module không nên tự cấu hình provider aliases mơ hồ hoặc che ownership tài nguyên.

Không dùng workspace như security boundary: CLI workspaces chia state names nhưng thường cùng backend/credentials/code. Production isolation mạnh hơn dùng account/subscription, identity, backend và pipeline riêng.

5. Variables, locals, data sources và outputs

6. Drift, import và refactor

Drift là remote object khác desired config/state. Scheduled plan phát hiện nhưng cần quyết định: revert console change, cập nhật code, hoặc import/adopt. Import chỉ đưa object vào state; vẫn phải viết configuration khớp. Refactor address bằng moved block để tránh destroy/create ngoài ý muốn.

7. Failure và recovery

8. CI/CD guardrails

PR chạy fmt/validate/security-policy scan và tạo plan bằng read/plan identity. Apply chỉ từ reviewed revision/saved plan trong protected environment với short-lived OIDC identity. Redact plan artifacts, đặt retention/access và tách approval khỏi người sửa code khi risk cao.

9. Checklist phỏng vấn

Tài liệu: Terraform State · Plan · Module Development · Import