Terraform 리소스 이름 바꿀 때 moved 블록 쓰기
조회 0 · 댓글 0
Terraform에서 리소스 이름을 바꾸거나 모듈 안으로 옮기면, 주소가 달라졌다는 이유로 기존 객체를 destroy 후 recreate 하려 듭니다. 이럴 때 terraform state mv로 상태를 직접 손대는 대신 설정 파일에 moved 블록을 넣으면 됩니다. plan을 만들기 전에 Terraform이 상태에서 from 주소의 객체를 찾아 to 주소로 이름만 바꾸므로, 재생성이 안 일어납니다. Terraform 1.1부터 쓸 수 있습니다.
이름 변경, 모듈 안으로 이동, count에서 for_each 전환까지 같은 방식으로 처리합니다. from과 to에는 리소스 주소, 인덱스([0], ["small"]), 모듈 경로(module.x...)를 넣을 수 있습니다.
moved {
from = aws_instance.a
to = aws_instance.b
}
# 모듈 안으로 이동
moved {
from = aws_instance.a
to = module.x.aws_instance.a
}
# count -> for_each 전환
moved {
from = aws_instance.c[0]
to = aws_instance.c["small"]
}주의: apply가 끝났다고 블록을 바로 지우면 안 됩니다. 예전 주소를 참조하던 설정 입장에서는 삭제 계획으로 잡히기 때문입니다. 공식 문서는 특히 배포된(published) 모듈이라면 과거 moved 블록을 계속 남겨두라고 권합니다. 사내 전용 모듈이고 모든 사용자가 새 버전을 apply 한 걸 확인했을 때만 정리하면 됩니다.
🔗 https://developer.hashicorp.com/terraform/language/block/moved
🔗 https://developer.hashicorp.com/terraform/language/modules/develop/refactoring
로그인 후 답글을 남길 수 있습니다.