packer 블록
packer 블록
이 주제는 packer 블록에 대한 레퍼런스 정보를 제공해요.
출처: Packer 공식 문서
본문
설명 (Description)
packer 블록은 Packer 버전 요구사항을 구성하고, 초기화 시 설치할 플러그인을 지정해요.
Packer 블록 문법 (Packer Block Syntax)
Packer 설정은 packer 블록 안에 모아져요.
packer {
# ...
}
각 packer 블록은 Packer의 동작과 관련된 여러 설정을 담을 수 있어요. packer 블록 안에서는 상수 값만 사용할 수 있어요. 인자는 리소스나 입력 변수 같은 이름이 붙은 객체를 참조할 수 없고, Packer 언어의 내장 함수도 사용할 수 없어요.
packer 블록 안에서 지원되는 다양한 옵션은 다음 섹션들에서 설명해요.
필수 Packer 버전 지정하기 (Specifying a Required Packer Version)
required_version 설정은 버전 제약(constraint) 문자열을 받아요. 이는 어떤 Packer 버전이 설정과 함께 사용될 수 있는지를 지정해요. 실행 중인 Packer 버전이 지정된 제약과 일치하지 않으면, Packer는 오류를 발생시키고 추가 조치 없이 종료해요.
협업 환경에서 Packer 버전 제약을 사용하면 모두가 특정 Packer 버전을 사용하도록, 또는 설정이 기대하는 동작을 갖는 최소 Packer 버전 이상을 사용하도록 보장할 수 있어요.
플러그인 요구사항 지정하기 (Specifying Plugin Requirements)
:::note
required_plugins 블록은 Packer v1.7.0 이상에서만 사용할 수 있어요.
:::
required_plugins 블록은 현재 템플릿이 요구하는 모든 플러그인을 지정해요. 각 로컬 플러그인 이름을 소스 주소와 버전 제약에 매핑해요.
packer {
required_plugins {
happycloud = {
version = ">= 2.7.0"
source = "github.com/hashicorp/happycloud"
}
}
}
required_plugins 블록을 사용해 템플릿에서 packer build를 호출하는 데 필요한 플러그인을 명문화하는 건, 다양한 플랫폼이나 호스트에서 일관된 빌드를 보장하는 좋은 방법이에요.
이 블록은 재현 가능한 빌드를 보장하기 위해 중요한 두 가지 정보를 명문화해요.
- 필수 플러그인의 source는 사용자에게 플러그인이 어디서 다운로드됐는지, 그리고 플러그인에 문제가 생겼을 때 어디로 연락하면 되는지를 알려줘요.
- 필수 플러그인의 version은 빌드에 필요한 정확한 버전 또는 최소 버전을 사용자에게 알려줘요. 이는 환경이나 팀 전반에 설치할 수 있는 승인된 플러그인 버전을 고정(pin)하는 좋은 방법이에요.
플러그인에 대한 자세한 내용은 Plugins를 참고하세요.
플러그인 소스 정의하기 (Define plugin source)
source 필드에 플러그인 소스 코드의 경로를 다음 형식으로 지정해요:
<HOSTNAME>/[SUBFOLDER/]<NAMESPACE>/<TYPE>
<Hostname>— 플러그인을 배포하는 위치 또는 서비스의 호스트 이름을 지정해요. GitHub 릴리스로 게시된 플러그인에는github.com을 사용하세요. 다른 호스트 이름은 필요한 플러그인-소스 디렉터리 구조를 서비스하는 HTTPS 엔드포인트여야 해요. 예를 들어 내부 미러나 아티팩트 저장소가 있죠. 자세한 내용은 다음을 참고하세요: 소유한 플러그인 소스 호스팅, init 명령어, plugins install.<Subfolder>— 서브폴더 경로 세그먼트는 주소의 선택적 부분이에요. 커스텀 주소에서 플러그인 소스를 다운로드할 수 있게 해 줘요. 최대 13개의 전체 경로 세그먼트를 가진 소스를 지정할 수 있어요.<Namespace>— 지정된 호스트 안의 조직 네임스페이스. 흔히 플러그인을 게시하는 조직이에요.Type— 플러그인이 관리하는 플랫폼 또는 시스템의 짧은 이름. 유형은 보통 플러그인이 선호하는 로컬 이름이에요.
예를 들어 myawesomecloud라는 플러그인의 source 필드 값은, 그것이 호스트 github.com의 hashicorp 네임스페이스에 속한다면 github.com/hashicorp/myawesomecloud이에요. myawesomecloud가 실제로 나오는 저장소는 항상 github.com/hashicorp/packer-plugin-myawesomecloud 형식의 이름을 가져야 하지만, required_plugins 블록은 간결함을 위해 중복된 packer-plugin- 저장소 접두사를 생략해요.
버전 제약 (Version Constraints)
Packer가 어떤 것에 대해 허용 가능한 버전 범위를 지정하게 하는 모든 곳에서는, 버전 제약(version constraint)이라 불리는 특별히 포맷된 문자열을 기대해요.
버전 제약 문법 (Version Constraint Syntax)
Packer의 버전 제약 문법은 Bundler와 NPM 같은 다른 의존성 관리 시스템이 사용하는 문법과 매우 유사해요.
required_version = ">= 1.2.0, < 2.0.0"
버전 제약은 하나 이상의 조건을 담은 문자열 리터럴이며, 조건들은 콤마로 구분돼요. 각 조건은 연산자와 버전 번호로 구성돼요. 버전 번호는 마침표로 구분된 일련의 숫자여야 해요(1.2.0처럼), 선택적으로 베타 릴리스를 나타내는 접미사를 가질 수 있어요.
유효한 연산자는 다음과 같아요.
=(또는 연산자 없음) — 정확히 하나의 버전 번호만 허용해요. 다른 조건과 결합할 수 없어요.!=— 정확한 버전 번호를 배제해요.>,>=,<,<=— 지정된 버전과 비교해서, 비교가 참인 버전을 허용해요. "크다"는 더 새로운 버전을 요청하고, "작다"는 더 오래된 버전을 요청해요.~>— 지정된 버전과, 지정된 버전 번호의 가장 구체적인 세그먼트만 증가시키는 더 새로운 버전을 허용해요. 예를 들어~> 0.9는>= 0.9, < 1.0과 동일하고,~> 0.8.4는>= 0.8.4, < 0.9와 동일해요. 이것을 보통 비관적 제약 연산자(pessimistic constraint operator)라고 불러요.
버전 제약 동작 (Version Constraint Behavior)
모든 적용 가능한 제약을 충족하는 버전 번호가 허용 가능한 것으로 간주돼요. Packer는 버전 제약을 참고해 자신의 허용 가능한 버전이 있는지 판단해요.
프리릴리스(pre-release) 버전은 1.2.0-beta처럼 대시로 도입된 접미사를 포함하는 버전 번호예요. 프리릴리스 버전은 정확한 버전 제약(= 연산자 또는 연산자 없음)으로만 선택될 수 있어요. 프리릴리스 버전은 >=, ~> 같은 비정확 연산자와는 일치하지 않아요.