Kết quả của lệnh không được ghi vào state, nên Terraform chỉ biết provisioner đã chạy hay chưa, không biết máy đang ở cấu hình nào.
Lệnh fail giữa chừng để lại resource tainted.
hcl
# tranh
provisioner "remote-exec" {
inline = ["apt-get install -y nginx"]
}Thay bằng, theo thứ tự ưu tiên:
1. AMI dựng sẵn bằng Packer — Terraform chỉ launch máy từ image. Máy chủ thành thứ thay thế được: đổi cấu hình thì build AMI mới và replace instance.
2. user_data / cloud-init — chạy lúc boot, được provider quản lý.
3. Ansible/Chef chạy sau khi máy đã tạo, tách hẳn khỏi Terraform.
Ngoại lệ chấp nhận được: local-exec gọi một webhook báo deploy xong. Nhưng nhớ rằng nó không idempotent, nên đừng đặt logic quan trọng vào đấy.