Khai báo moved block.
Terraform nhận diện resource theo địa chỉ trong config, nên đổi tên mà không khai báo bị hiểu là destroy cái cũ + create cái mới.
hcl
moved {
from = aws_instance.api
to = module.api_service.aws_instance.this
}Cách cũ là chạy lệnh trên state:
bash
terraform state mv aws_instance.api module.api_service.aws_instance.thismoved block tốt hơn vì nó được review trong PR, chạy tự động trong CI, và ai đọc lịch sử cũng thấy việc di chuyển đã xảy ra. state mv chạy trên laptop một người thì không ai biết.
Quy trình refactor an toàn: viết cấu trúc mới, thêm moved, chạy plan và kiểm tra output không có create/destroy nào, rồi mới apply.
Refactor từng phần nhỏ và apply ngay, đừng gom một đợt lớn tạo ra plan dài mấy trăm dòng mà không ai đọc hết.