Từ thấp lên cao: default trong block variable, rồi TF_VAR_, rồi terraform.tfvars / .auto.tfvars, rồi -var-file, cao nhất là -var trên CLI.
bash
export TF_VAR_db_password=... # env, thấp
terraform apply -var-file=prod.tfvars # cao hơn
terraform apply -var="instance_type=t3.large" # thắng tất cảCấu trúc thường dùng: mỗi env một file prod.tfvars / staging.tfvars, commit vào repo, trừ secret. Khác biệt giữa hai env nằm rõ trong diff file đó.
Secret thì không đặt trong tfvars đã commit. Ba cách phổ biến:
- TF_VAR_* inject từ CI secret store.
- data "aws_secretsmanager_secret_version" đọc động lúc apply.
- Cho AWS tự sinh (manage_master_user_password = true) rồi chỉ tham chiếu ARN.
Đánh sensitive = true chỉ che output, không mã hoá, giá trị vẫn nằm nguyên trong state.