Nhiều người mới học chứng chỉ HashiCorp Certified: Terraform Associate thường chỉ tập trung vào việc viết file .tf mà bỏ qua một thứ quan trọng không kém: Terraform State. Bài này mình sẽ giải thích Terraform State là gì, nó hoạt động ra sao, và tại sao mất State thì coi như Terraform “mù” trước hạ tầng của bạn.
Xem thêm:
04-Terraform Workflow – init, plan, apply, destroy
Terraform Remote Backend – Lưu State trên AWS S3
14-Terraform Workspace – Quản lý nhiều môi trường từ một codebase
1. Terraform State là gì?
Terraform State là file lưu trữ toàn bộ thông tin về hạ tầng mà Terraform đã tạo ra. Có thể coi nó như database của Terraform — mọi thứ Terraform cần biết về hạ tầng hiện tại đều nằm ở đây.
- Tên mặc định:
terraform.tfstate - Định dạng: JSON
- Vai trò: lưu metadata của tất cả resource đã được Terraform triển khai
Terraform không query trực tiếp lên cloud provider để “nhớ” tài nguyên — nó đọc State file. Đây chính là lý do State quan trọng đến vậy.
2. State dùng để làm gì?
Mapping với thế giới thực
State giúp Terraform biết resource nào trong file .tf tương ứng với resource nào đang chạy thực tế trên cloud. Mỗi remote object chỉ tham chiếu đến đúng một resource instance trong config.
Sau khi tạo resource trên cloud, Terraform ghi lại “danh tính” của resource đó vào State — bao gồm:
- Resource ID trên cloud
- Metadata (CPU, RAM, disk, network, tags…)
- Provider (AWS, Azure, GCP…)
- Cấu hình hiện tại của resource
Chỉ những resource có trong State thì Terraform mới quản lý được.
Theo dõi thứ tự phụ thuộc (Metadata)
State còn giúp Terraform hiểu được thứ tự dependency giữa các resource — điều này đặc biệt quan trọng khi destroy.
Ví dụ, nếu bạn tạo VPC và Internet Gateway gắn vào VPC đó:
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true
tags = {
Name = "vpc"
}
}
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "internet-gateway"
}
}
Terraform đọc config, nhận ra internet_gateway phụ thuộc vào vpc → tạo VPC trước, Gateway sau. Khi destroy thì ngược lại: xóa Gateway trước, VPC sau. Thứ tự này được Terraform suy ra từ State và dependency graph.
Cải thiện hiệu năng
Với hạ tầng lớn, nếu Terraform phải query cloud provider mỗi lần chạy plan thì sẽ rất chậm vì:
- Số lượng resource nhiều, query mất thời gian
- Một số cloud provider không hỗ trợ query nhiều resource cùng lúc
- API rate limiter của cloud provider
State giải quyết vấn đề này bằng cách cache giá trị các thuộc tính của resource. Terraform đọc cache từ State thay vì gọi API liên tục.
3. Luồng hoạt động với State
Viết file .tf → terraform apply → Tạo resource trên cloud
↓
Ghi vào terraform.tfstate
↓
Lần sau: đọc State → so sánh với .tf → tính delta
Khi bạn chạy terraform plan, Terraform sẽ:
- Đọc State hiện tại
- So sánh với file
.tfmới - Tính toán delta — resource nào cần tạo, update, hay xóa
Khi chạy terraform destroy, Terraform không scan cloud mà dựa hoàn toàn vào State để biết cần xóa những gì.

Ví dụ nếu bạn cập nhật tài nguyên (Update):
- Tăng size EC2
- Thêm subnet
- Đổi instance type
Terraform sẽ:
- Đọc State hiện tại
- So sánh với file
.tf - Chỉ update phần thay đổi, không đụng phần còn lại
Khi xoá tài nguyên (Destroy)
terraform destroy
Terraform:
- Không đoán
- Không scan cloud
Mà dựa hoàn toàn vào State file để biết cần xoá resource nào
4. State được lưu ở đâu?
Local State (mặc định)
Terraform lưu State ngay trong thư mục làm việc, file terraform.tfstate. Đủ dùng cho môi trường cá nhân hoặc học tập, nhưng không phù hợp cho team.
Remote State
Do State rất quan trọng, nên Terraform cho phép lưu ở remote backend:
Khi làm việc nhóm hoặc môi trường production, nên chuyển sang Remote Backend:
| Backend | Provider |
|---|---|
| S3 + DynamoDB | AWS |
| Blob Storage | Azure |
| GCS | Google Cloud |
| Terraform Cloud | HashiCorp |
Lợi ích của Remote State:
- Backup an toàn: không lo mất file local
- Dùng chung: nhiều người trong team cùng truy cập
- State locking: tránh trường hợp hai người
applycùng lúc gây ghi đè
5. Tóm lại
State là thứ làm cho Terraform “nhớ” được hạ tầng của bạn. Không có State, Terraform không biết resource nào đang tồn tại, không tính được delta, không destroy được đúng thứ tự. Hiểu rõ cơ chế này giúp bạn tránh được nhiều lỗi khó debug sau này — đặc biệt khi làm việc với môi trường production hoặc làm chung trong team.