terraform providers lock 커맨드

terraform providers lock 커맨드

terraform providers lock는 참조된 프로바이더를 초기화하지 않고 의존성 잠금 파일에 새 프로바이더 선택 정보를 추가해요. 커맨드를 실행하면 Terraform이 업스트림 레지스트리를 조회해서 프로바이더 의존성 정보를 의존성 잠금 파일에 기록해요.

출처: 문서

본문

소개 (Introduction)

커맨드를 실행하면 Terraform이 업스트림 레지스트리를 조회하고 프로바이더 의존성 정보를 의존성 잠금 파일에 기록해요. 잠금 파일에 대한 자세한 내용은 Terraform 구성 언어 레퍼런스 문서의 의존성 잠금 파일을 참고하세요.

의존성 잠금 파일을 갱신하는 일반적인 방법은 terraform init 중 정상적인 프로바이더 설치의 부수 효과로 이루어져요. 하지만 그 자동 방식으로는 충분하지 않은 상황이 몇 가지 있어요:

  • 파일시스템 또는 네트워크 미러 같은 대체 프로바이더 설치 방법을 사용하는 환경에서 Terraform을 실행한다면, 일반적인 프로바이더 설치가 프로바이더의 원본 레지스트리에 접근하지 않으므로 Terraform은 선택된 프로바이더 버전에 대한 가능한 모든 패키지 체크섬을 채울 수 없어요. terraform lock를 사용해 프로바이더의 공식 릴리스 체크섬을 의존성 잠금 파일에 기록하면, 이후 terraform init 실행이 선택한 미러에서 사용 가능한 패키지를 이전에 기록된 공식 체크섬과 대조해서 검증해요. 이렇게 하면 미러가 주장하는 프로바이더 패키지를 실제로 제공하고 있는지에 대한 추가적인 확신을 얻을 수 있어요.

  • 팀이 여러 플랫폼(예: Windows와 Linux 모두)에서 Terraform을 실행하고, 프로바이더의 업스트림 레지스트리가 최신 해싱 체계로 서명된 체크섬을 제공하지 못한다면, 다른 플랫폼에서의 후속 Terraform 실행이 잠금 파일에 추가 체크섬을 추가할 수 있어요. terraform providers lock 커맨드로 사용하려는 모든 플랫폼의 해시를 미리 채우면 이를 피할 수 있어요.

사용법 (Usage)

사용법: terraform providers lock [options] [providers...]

추가 명령줄 인자가 없으면 terraform providers lock은 현재 작업 디렉터리의 설정을 분석해서 의존하는 모든 프로바이더를 찾고, 해당 프로바이더에 대한 필요한 데이터를 원본 레지스트리에서 가져온 다음, 의존성 잠금 파일에 각 프로바이더에 대한 선택된 버전과 프로바이더 개발자의 암호화 서명으로 커버되는 모든 패키지 체크섬을 포함하도록 갱신해요.

경고: terraform providers lock 커맨드는 무엇을 가져왔는지와 각 패키지가 암호화 서명으로 서명되었는지에 대한 정보를 출력하지만, 프로바이더가 신뢰할 수 있고 로컬 시스템 정책 또는 관련 규정을 준수하는지 자동으로 검증하지는 못해요. 원래 잠금 파일을 버전 관리 시스템에 커밋하기 전에 출력의 서명 키 정보를 검토해서 모든 서명자를 신뢰하는지 확인하세요.

명령줄에 하나 이상의 프로바이더 소스 주소를 나열하면 terraform providers lock은 해당 프로바이더에 대해서만 작업을 제한하고, 다른 프로바이더(있다면)의 잠금 항목은 변경하지 않아요.

다음 추가 옵션으로 기본 동작을 사용자 정의할 수 있어요:

  • -fs-mirror=PATH - 업스트림 레지스트리 대신 주어진 로컬 파일시스템 미러 디렉터리에서 프로바이더 패키지를 찾도록 Terraform에 지시해요. 주어진 디렉터리는 일반적인 파일시스템 미러 디렉터리 레이아웃을 사용해야 해요.

  • -net-mirror=URL - 업스트림 레지스트리 대신 주어진 네트워크 미러 서비스에서 프로바이더 패키지를 찾도록 Terraform에 지시해요. 주어진 URL은 Terraform 프로바이더 네트워크 미러 프로토콜을 구현해야 해요.

  • -platform=OS_ARCH - 이 Terraform 설정으로 작업하려는 플랫폼을 지정해요. Terraform은 모든 프로바이더가 주어진 플랫폼에서 사용 가능한지 확인하고, 명시된 플랫폼을 이상으로 지원하도록 잠금 파일에 충분한 패키지 체크섬을 저장해요. 여러 대상 시스템의 체크섬을 포함하려면 이 옵션을 여러 번 사용하세요. 대상 플랫폼 이름은 운영 체제와 CPU 아키텍처로 구성돼요. 예를 들어 linux_amd64는 AMD64 또는 x86_64 CPU에서 실행되는 Linux 운영 체제를 선택해요. 이 옵션에 대한 자세한 내용은 다음 섹션에서 다룹니다.

  • -enable-plugin-cache - 전역 구성 플러그인 캐시의 사용을 활성화해요. 이렇게 하면 잠금 과정이 빨라져요. 플러그인 캐시는 권위 있는 소스가 아니므로 기본적으로 활성화되지 않아요. terraform providers lock 커맨드는 신뢰할 수 없는 프로바이더 버전이 사용되지 않도록 하는 데 사용되므로, 캐시에서 플러그인을 설치하는 것은 위험한 것으로 간주돼요.

  • -var 'NAME=VALUE' - 설정의 루트 모듈에 선언된 단일 입력 변수에 값을 설정해요. 여러 변수를 설정하려면 이 옵션을 여러 번 사용하세요. 자세한 내용은 명령줄의 입력 변수를 참고하세요.

  • -var-file=FILENAME - 설정의 루트 모듈에 선언된 많은 입력 변수.tfvars 파일의 정의를 사용해 값을 설정해요. 여러 파일의 값을 포함하려면 이 옵션을 여러 번 사용하세요. 루트 모듈의 입력 변수에 값을 설정하는 방법은 -var-var-file 옵션 외에도 여러 가지가 있어요. 자세한 내용은 입력 변수에 값 할당을 참고하세요.

대상 플랫폼 지정 (Specifying Target Platforms)

예를 들어 환경에 Windows 또는 macOS 워크스테이션에서 Terraform 설정을 작업하는 개발자와, Linux에서 설정을 적용하는 자동화 시스템이 모두 있을 수 있어요. 그런 상황에서 모든 프로바이더가 이 모든 플랫폼을 지원하는지 확인하고 필요한 체크섬으로 잠금 파일을 미리 채우려면, 다음처럼 세 플랫폼을 지정해서 terraform providers lock을 실행할 수 있어요:

terraform providers lock \
  -platform=windows_amd64 \ # 64-bit Windows
  -platform=darwin_amd64 \  # 64-bit macOS
  -platform=linux_amd64     # 64-bit Linux

(위 예제는 가독성을 위해 Unix 스타일 셸 줄바꿈 문법을 사용했어요. Windows에서 커맨드를 실행한다면 모든 인자를 한 줄에 넣고 백슬래시와 주석을 제거해야 해요.)

사내(자체) 프로바이더의 잠금 항목 (Lock Entries for In-house Providers)

사내 프로바이더는 실제 Terraform 프로바이더 레지스트리에 게시되지 않고, 특정 조직 내에서만 개발·사용되며 파일시스템 미러나 네트워크 미러를 통해 배포되는 프로바이더예요.

기본적으로 terraform providers lock은 모든 프로바이더가 Terraform 프로바이더 레지스트리에서 사용 가능하다고 가정하고, 프로바이더 패키지에 대한 가장 상세한 정보에 접근하기 위해 원본 레지스트리에 접속하려고 해요.

로컬 미러에서만 사용 가능한 특정 프로바이더에 대한 잠금 항목을 만들려면, -fs-mirror 또는 -net-mirror 명령줄 옵션을 사용해서 프로바이더의 원본 레지스트리를 조회하는 기본 동작을 재정의할 수 있어요:

terraform providers lock \
  -fs-mirror=/usr/local/terraform/providers
  -platform=windows_amd64 \
  -platform=darwin_amd64 \
  -platform=linux_amd64 \
  tf.example.com/ourcompany/ourplatform

(위 예제는 가독성을 위해 Unix 스타일 셸 줄바꿈 문법을 사용했어요. Windows에서 커맨드를 실행한다면 모든 인자를 한 줄에 넣고 백슬래시를 제거해야 해요.)

위 커맨드에 프로바이더 소스 주소 tf.example.com/ourcompany/ourplatform이 포함되어 있으므로, terraform providers lock은 해당 특정 프로바이더에만 접근을 시도하고 다른 프로바이더의 잠금 항목은 변경하지 않아요. 서로 다른 소스에서 다양한 프로바이더를 사용할 수 있다면, terraform providers lock을 여러 번 실행해서 매번 다른 프로바이더 부분집합을 지정할 수 있어요.

-fs-mirror-net-mirror 옵션은 프로바이더 설치 방법 설정filesystem_mirrornetwork_mirror 블록과 같은 의미를 갖지만, 패키지 체크섬 정보를 어디서 도출할지 명확히 하기 위해 단일 메서드만 지정해요.

원본 레지스트리만 원래 개발자의 암호화 서명으로 커버되는 공식 체크섬을 제공할 수 있다는 점을 유의하세요. 따라서 파일시스템 또는 네트워크 미러에서 만든 잠금 항목은 요청한 정확한 플랫폼만을 커버하고, 기록된 체크섬은 원본 레지스트리의 공식 체크섬이 아닌 미러가 보고한 값이에요. 기록된 체크섬이 원래 프로바이더 게시자가 서명한 값이 되도록 하려면 -fs-mirror-net-mirror 옵션 없이 이 커맨드를 실행해서 모든 정보를 원본 레지스트리에서 가져오세요.

원한다면 사내 프로바이더 레지스트리를 통해 사내 프로바이더를 게시할 수도 있어요. 그러면 특별한 옵션이나 추가 CLI 설정 없이 해당 프로바이더를 잠그고 설치할 수 있어요. 자세한 내용은 프로바이더 레지스트리 프로토콜을 참고하세요.

더 알아보기 (Learn more)