Khi làm việc với Terraform, rất nhiều người mới thường chỉ tập trung vào file cấu hình (.tf) mà chưa nhận thức hết tầm quan trọng của Terraform State. Thực tế, Terraform State chính là “xương sống” của Terraform, nếu mất state thì Terraform gần như “mù” trước hạ tầng.
1. Terraform State là gì?
Terraform State là một file lưu trữ thông tin về toàn bộ hạ tầng mà Terraform đã tạo ra.
- Tên mặc định:
terraform.tfstate
- Định dạng: JSON
- Vai trò: lưu lại metadata của tất cả resource đã được Terraform triển khai
Có thể coi Terraform State như cơ sở dữ liệu (database) của Terraform. Terraform không query trực tiếp cloud provider để nhớ tài nguyên, mà dựa vào State file.
2. Terraform State dùng để làm gì?
Terraform State được sử dụng cho resource tracking (theo dõi tài nguyên).
Trong State file sẽ lưu:
- Resource đã tạo (EC2, VPC, Database, …)
- ID resource 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
3. Luồng hoạt động của Terraform
Bước 1: Terraform Configuration
Bạn viết các file cấu hình:
- Application Server
- Network (VPC / VNet)
- Database
Ví dụ:
- EC2 trên AWS
- VPC trên AWS
- Database trên Azure
Bước 2: Terraform Apply
Khi chạy:
terraform init
terraform plan
terraform apply
Terraform sẽ:
- Tạo resource trên cloud
- Sau khi tạo xong → ghi lại toàn bộ thông tin vào terraform.tfstate
Bước 3: Terraform đọc State để quản lý hạ tầng
Terraform luôn đọc State trước, sau đó mới:
- So sánh cấu hình mới (
.tf) - So với cấu hình hiện tại trong State
- Tính toán delta (sự thay đổi)
4. Terraform State giúp Terraform làm được những gì?
Cập nhật tài nguyên (Update)
Nếu bạn:
- 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
Xoá tài nguyên (Destroy)
Khi chạy:
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
Tính toán chính xác thay đổi (Delta)
Khi chạy:
terraform plan
Terraform sẽ cho bạn biết:
- Resource nào sẽ được tạo
- Resource nào sẽ bị xoá
- Resource nào sẽ bị update
5. Terraform State được lưu ở đâu?
Mặc định (Local State)
- Lưu ngay trong thư mục chạy Terraform
- File:
terraform.tfstate
Remote State
Do State rất quan trọng, nên Terraform cho phép lưu ở remote backend:
Ví dụ:
- AWS S3
- Azure Blob Storage
- Google Cloud Storage
Lợi ích:
- Backup an toàn
- Tránh mất State
- Nhiều người dùng chung
- Có thể lock State (tránh ghi đè)