search

05-Terraform State là gì? Tại sao nó quan trọng?

calendar_today Đăng ngày: 28/04/2026

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ẽ:

  1. Đọc State hiện tại
  2. So sánh với file .tf mới
  3. 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ì.

Luồng hoạt động với State

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ẽ:

  1. Đọc State hiện tại
  2. So sánh với file .tf
  3. 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 apply cù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.