terraform 0.12upgrade 명령
terraform 0.12upgrade 명령
terraform 0.12upgrade 명령은 Terraform v0.11용으로 작성된 모듈을 Terraform v0.12에서 사용할 수 있도록 준비하는 데 도움이 되는 여러 자동 업그레이드 규칙을 적용하는 명령이에요.
출처: 문서
본문
이 명령은 Terraform v0.12 릴리스에서만 사용할 수 있어요. 자세한 내용은 Terraform v0.12 업그레이드 가이드를 참고하세요.
사용법 (Usage)
사용법: terraform 0.12upgrade [options] [dir]
기본적으로 0.12upgrade는 현재 작업 디렉터리의 구성 파일을 변경해요. 그러나 원하면 다른 디렉터리에 대한 명시적 경로를 제공할 수도 있는데, 이는 같은 저장소의 여러 모듈 마이그레이션을 자동화할 때 유용해요.
다른 옵션 없이 실행하면 명령은 먼저 무엇을 할지 설명하고 확인을 요청해요:
$ terraform 0.12upgrade
This command will rewrite the configuration files in the given directory so
that they use the new syntax features from Terraform v0.12, and will identify
any constructs that may need to be adjusted for correct operation with
Terraform v0.12.
We recommend using this command in a clean version control work tree, so that
you can easily see the proposed changes as a diff against the latest commit.
If you have uncommitted changes already present, we recommend aborting this
command and dealing with them before running this command again.
Would you like to upgrade the module in the current directory?
Only 'yes' will be accepted to confirm.
Enter a value: yes
0.12upgrade 하위 명령은 구성에서 사용되는 프로바이더에 접근해 그들의 리소스 유형을 분석해야 하므로, 먼저 terraform init을 실행해 이를 설치하는 것이 중요해요. 드물게 v0.11에서 작동했던 구성이 v0.12에서 문법 오류를 가질 수 있는데, 이 경우 terraform init은 업그레이드 명령을 실행하기에 충분한 것만 설치하는 특수 모드로 실행되고, 그 후 terraform init을 다시 실행해 초기화를 완료할 수 있어요.
많은 재작성 규칙은 완전히 자동이지만, 어떤 경우 도구는 구성만으로는 결정을 내리기에 충분한 정보를 판단할 수 없어 사용자 검토를 위해 구성에 주석을 추가해요. 모든 그러한 주석은 찾기 쉽도록 TF-UPGRADE-TODO 문자열을 포함해요.
업그레이드 후 구성은 표준 Terraform 스타일로 다시 포맷되고 표현식은 더 읽기 쉬운 v0.12 문법 기능을 사용하도록 다시 작성돼요.
깨끗한 버전 관리 작업 트리에서 이 명령을 실행할 것을 권장해요. 그러면 VCS 도구를 사용해 제안된 변경(모든 TF-UPGRADE-TODO 주석 포함)을 검토하고, 변경을 커밋하기 전에 필요한 수정을 가할 수 있어요.
업그레이드 후 구성은 더 이상 Terraform v0.11 및 이전 버전과 호환되지 않아요. 여러 구성에서 호출되는 공유 모듈을 업그레이드할 때는 점진적 업그레이드를 허용하기 위해 기존 구성을 이전 버전으로 고정해야 할 수도 있어요. 모듈이 Terraform 레지스트리를 통해 게시된다면, 업그레이드된 모듈 소스에 새 메이저 버전 번호를 지정해 이것이 v0.11 호출자에게 파괴적 변경임을 나타내세요. 모듈이 Git 같은 버전 관리 시스템에서 직접 설치된다면 특정 리비전 사용으로 각 호출자가 어떤 버전을 사용하는지 제어하세요.
커맨드 라인 옵션은 모두 선택적이에요. 사용할 수 있는 옵션은 다음과 같아요:
- -yes - 초기 소개 메시지와 대화형 확인을 건너뛰어요. 스크립트에서 명령을 배치로 실행할 때 사용하세요.
- -force - 구성이 이미 v0.12 이상용으로 작성되었는지 감지하려는 휴리스틱을 재정의해요. 이 명령이 만드는 일부 변환은 멱등적이지 않으므로, 같은 모듈에 다시 실행하면 모듈의 일부 표현식 의미가 변경될 수 있어요.
배치 사용법 (Batch Usage)
몇 가지 한정된 상황에서 0.12upgrade 명령을 실험한 후, 여러 모듈이 포함된 저장소가 있다면 모두 일괄 업그레이드하고 함께 검토하고 싶을 수 있어요. 도구 자체는 재귀 업그레이드를 지원하지 않지만, Unix 계열 시스템에서는 find 명령을 사용해 다음과 같이 달성할 수 있어요:
find . -name '*.tf' -printf "%h\n" | uniq | xargs -n1 terraform 0.12upgrade -yes
Mac OS X에서는 시스템에 포함된 find가 -printf 인자를 지원하지 않아요. Homebrew로 GNU find를 설치해 그 인자를 사용할 수 있어요:
brew install findutils
설치 후 위 명령줄을 find 대신 gfind로 실행하세요.
위 명령은 대화형 프롬프트를 재정의하는 -yes 옵션을 포함하므로, 실행하기 전에 깨끗한 작업 트리가 있는지 확인하세요.
업그레이드는 구성의 프로바이더 플러그인에 접근해야 하므로, 위 명령을 실행하기 전에 모든 디렉터리를 terraform init으로 초기화해야 해요.