Terraform lưu một state file ghi ánh xạ giữa tài nguyên trong code và tài nguyên thực trên cloud (id, thuộc tính, quan hệ phụ thuộc). Nhờ state, khi chạy plan Terraform biết cái gì cần tạo / sửa / xóa thay vì hỏi lại toàn bộ.
Vấn đề và giải pháp:
- Làm việc nhóm: state cục bộ trên máy một người thì người khác không thấy → dùng remote backend (S3, Terraform Cloud, GCS) để lưu state dùng chung.
- State locking: nếu hai người apply cùng lúc, state có thể hỏng → backend khóa state trong lúc apply (vd backend S3 — từ Terraform 1.10 có native S3 locking, trước đây cần thêm DynamoDB) để chỉ một thao tác ghi tại một thời điểm.
- Drift: ai đó sửa tay trên console → thực tế lệch state; plan/refresh phát hiện chênh lệch.
- Bảo mật: state có thể chứa giá trị nhạy cảm (mật khẩu, key) → cần mã hóa và hạn chế truy cập. Không sửa state bằng tay; dùng terraform state command khi thật cần.