버전 제약
버전 제약 (Version constraints)
이 주제는 Terraform 구성 언어에서 버전 제약 구문에 대한 참조 정보를 제공해요. Terraform은 구성에 정의한 컴포넌트에 대해 허용 가능한 버전 범위를 지정할 수 있게 해 주며, 컴포넌트의 버전을 제약하기 위해 특별한 형식의 문자열을 기대해요. 이 페이지에서는 버전 제약 구문, 동작 방식, 그리고 모범 사례를 다룰게요.
출처: 문서
본문
이 주제는 Terraform 구성 언어에서 버전 제약 구문에 대한 참조 정보를 제공해요.
소개 (Introduction)
Terraform은 구성에 정의한 컴포넌트에 대해 허용 가능한 버전 범위를 지정할 수 있게 해 줘요. Terraform은 컴포넌트의 버전을 제약하기 위해 특별한 형식의 문자열을 기대해요. 다음 컴포넌트를 구성할 때 버전 제약을 지정할 수 있어요:
- 모듈
- 프로바이더 요구 사항
terraform블록의required_version설정
버전 제약 구문 (Version constraint syntax)
버전 제약은 쉼표로 구분된 하나 이상의 조건을 포함하는 문자열 리터럴이에요.
각 조건은 연산자와 버전 번호로 구성돼요. 버전 번호는 마침표로 구분된 숫자들의 나열로, 예를 들어 1.2.0이에요. 베타 릴리스를 나타내는 접미사를 포함할 수 있지만 선택 사항이에요. 추가 정보는 사전 릴리스 버전 지정을 참고해요.
버전 제약을 지정하려면 다음 구문을 사용해요:
version = "<operator> <version>"
다음 예시에서 Terraform은 버전 1.2.0 이상과 2.0.0 미만 버전을 설치해요:
version = ">= 1.2.0, < 2.0.0"
다음 표는 버전 제약을 구성하는 데 사용할 수 있는 연산자를 설명해요:
| 연산자 | 설명 |
|---|---|
=, 연산자 없음 |
정확히 하나의 버전 번호만 허용해요. 다른 조건과 결합할 수 없어요. |
!= |
정확한 버전 번호를 제외해요. |
>, >=, <, <= |
버전 번호 사이의 비교. >와 >= 연산자는 새 버전을 요청하고, <와 <= 연산자는 이전 버전을 요청해요. 여러 연산자를 함께 사용해 허용 가능한 버전 번호의 범위를 만들 수 있어요. |
~> |
맨 오른쪽 버전 구성 요소만 증가하도록 허용해요. 예시: - ~> 1.0.4: Terraform이 1.0.5와 1.0.10은 설치하지만 1.1.0은 설치하지 않도록 허용해요. - ~> 1.1: Terraform이 1.2와 1.10은 설치하지만 2.0은 설치하지 않도록 허용해요. |
버전 제약 동작 (Version constraint behavior)
Terraform은 적용되는 모든 제약을 충족하는 버전을 사용해요.
Terraform은 버전 제약을 참조해 자체, 필요한 프로바이더 플러그인, 필요한 모듈의 허용 가능한 버전을 보유하고 있는지 결정해요. 플러그인과 모듈의 경우 Terraform은 적용되는 제약을 충족하는 설치된 버전 중 가장 새로운 것을 사용해요.
Terraform이 필요한 플러그인이나 모듈의 허용 가능한 버전을 갖고 있지 않으면, 적용되는 제약을 충족하는 가장 새로운 버전을 다운로드하려고 시도해요.
Terraform이 외부 의존성의 허용 가능한 버전을 얻을 수 없거나 자체의 허용 가능한 버전이 없으면, terraform plan, terraform apply, terraform state 작업을 진행하지 않아요.
루트 모듈과 자식 모듈은 Terraform 버전과 모듈이 사용하는 프로바이더 버전을 제약할 수 있어요. Terraform은 이 제약들을 동등하게 간주하며, 모두 충족될 때만 진행해요.
사전 릴리스 버전 지정 (Specify a pre-release version)
사전 릴리스 버전은 대시로 시작하는 접미사를 포함하는 버전 번호로, 예를 들어 1.2.0-beta예요. Terraform이 사전 릴리스 버전을 선택하도록 구성하려면 = 연산자를 사용해 정확한 버전 번호를 설정해요. 연산자를 생략하고 정확한 사전 릴리스 버전을 지정할 수도 있어요. Terraform은 >, >=, <, <=, ~> 연산자에서는 사전 릴리스 버전을 일치시키지 않아요.
모범 사례 (Best practices)
버전 제약을 구성할 때 다음 모범 사례를 구현할 것을 권장해요.
모듈 버전 (Module versions)
- 인프라가 타사 모듈에 의존할 때는 특정 버전을 요구해 업데이트가 사용자에게 편리할 때만 일어나도록 해요.
- 조직이 관리하는 모듈에 대해 일관되게 시맨틱 버전 관리를 사용할 때는 버전 범위를 지정해요.
- 조직이 원치 않는 업데이트를 피하는 잘 정의된 릴리스 프로세스를 따를 때는 버전 범위를 지정해요.
Terraform 코어와 프로바이더 버전 (Terraform core and provider versions)
- 재사용 가능한 모듈은 Terraform과 프로바이더의 최소 허용 버전만 제약해야 해요. 예를 들어
>= 0.12.0처럼요. 이렇게 하면 알려진 비호환성을 피하면서도 모듈 사용자가 모듈을 수정하지 않고 더 새로운 Terraform 버전으로 업그레이드할 수 있는 유연성을 얻을 수 있어요. - 루트 모듈은 의존하는 각 프로바이더의 버전에 하한과 상한을 모두 설정하려면
~>제약을 사용해요.