리소스 이동

리소스 이동 (Move Resources)

Terraform의 상태(state)는 각 실제 객체를 특정 리소스 주소(resource address)의 구성된 리소스와 연결해요. 리소스의 속성을 변경할 때는 이 연결이 자연스럽게 유지되지만, 리소스의 이름을 바꾸거나 다른 모듈로 옮기거나 프로바이더를 변경하면 Terraform이 리소스를 추적하지 못하게 돼요.

출처: 문서

본문

보통 이 경우는 문제없어요. Terraform은 기존 리소스를 파괴하고, 새로운 리소스 주소를 가진 새 리소스로 교체한 뒤, 그 속성에 의존하는 리소스들을 갱신해요.

기존 인프라 객체를 보존하는 게 중요한 상황에서는, 그 객체를 다른 구성된 리소스와 연결하도록 명시적으로 Terraform에게 알려줄 수 있어요.

대부분의 경우, Terraform 언어의 리팩토링 기능을 사용해서 모듈에 리소스 이름이 시간에 따라 어떻게 바뀌었는지 문서화하는 것을 권장해요. Terraform은 계획(plan) 중에 이 정보를 자동으로 감지해서, 모듈 사용자가 특별한 추가 단계를 거칠 필요가 없도록 해 줘요.

다만 상태를 명시적으로 수정해야 하는 다른 상황들도 있어요. 그럴 때는 다음 Terraform 명령들을 고려해 보세요.

  • terraform state mv 명령은 구성에서 특정 실제 객체와 연결되는 리소스 주소를 변경해요. 리소스 이름을 바꾸거나 리소스를 하위 모듈 안팎으로 이동할 때 객체를 보존하는 데 사용해요.
  • terraform state rm 명령은 해당 실제 객체를 파괴하지 않고, 현재 작업 디렉터리와 워크스페이스의 일부로 리소스 관리를 중단하도록 Terraform에 지시해요. (나중에 terraform import를 사용해서 다른 워크스페이스나 다른 Terraform 구성에서 해당 리소스 관리를 시작할 수 있어요.)
  • terraform state replace-provider 명령은 기존 리소스를 재생성하지 않고 새 프로바이더로 전환해요.

리소스를 이동할 때는 상태가 꼬이지 않도록 terraform plan으로 영향을 먼저 확인하고 진행하는 게 안전해요.

더 알아보기 (Learn more)

  • terraform state mv 명령
  • terraform state rm 명령
  • terraform state replace-provider 명령
  • Terraform 언어 리팩토링 기능 문서