Locking chặn hai apply chạy song song trên cùng state.
Không có nó, hai người apply cùng lúc ghi đè state của nhau, hậu quả là resource mồ côi không nằm trong state nào.
hcl
terraform {
backend "s3" {
bucket = "acme-tfstate"
key = "prod/network/terraform.tfstate"
region = "ap-southeast-1"
encrypt = true
dynamodb_table = "tf-locks" # locking
}
}Checklist backend production:
- Encryption at rest — state chứa secret.
- Versioning trên bucket — restore được khi state hỏng.
- Locking — DynamoDB table, hoặc native lock của GCS / Terraform Cloud.
- IAM chặt — quyền đọc state gần bằng quyền đọc secret.
Bài toán bootstrap: bucket state cũng là hạ tầng. Cách làm phổ biến là tạo bucket + DynamoDB bằng một config nhỏ với local state, rồi thêm block backend và chạy terraform init -migrate-state để đẩy state lên chính bucket vừa tạo.