JSON 템플릿용 커뮤니케이터 레퍼런스
JSON 템플릿용 커뮤니케이터 레퍼런스
이 주제는 JSON 형식으로 작성된 Packer 템플릿에서 커뮤니케이터(communicator)를 사용하는 방법을 설명해요.
:::note 이 페이지는 구식 스타일의 JSON Packer 템플릿에 관한 내용이에요. JSON 템플릿은 여전히 Packer 코어에서 지원되지만, Packer 코어에 추가된 새 기능은 JSON 템플릿에 구현되지 않을 수 있어요. 최상의 Packer 경험을 위해 가능한 한 빨리 HCL 템플릿으로 전환하는 걸 권장해요. 템플릿 업그레이드를 돕기 위해 hcl2_upgrade 명령어를 만들었어요. :::
출처: Packer 공식 문서
본문
설명 (Description)
Packer는 커뮤니케이터를 사용해 파일을 업로드하고, 스크립트를 실행하고, 만들어지는 머신에서 다른 작업을 수행해요. 커뮤니케이터는 builder 섹션에서 구성해요.
모든 커뮤니케이터는 다음 옵션을 가져요.
-
communicator(string) — Packer는 현재 세 가지 종류의 커뮤니케이터를 지원해요:none— 커뮤니케이터를 사용하지 않아요. 이 값이 설정되면 대부분의 프로비저너도 사용할 수 없어요.ssh— 머신에 SSH 연결이 수립돼요. 이것이 보통 기본값이에요.winrm— WinRM 연결이 수립돼요.
위에 더해, 일부 빌더는 사용할 수 있는 커스텀 커뮤니케이터를 가져요. 예를 들어 Docker 빌더는
docker exec와docker cp를 사용해 스크립트를 실행하고 파일을 복사하는 "docker" 커뮤니케이터를 가져요. -
pause_before_connecting(duration string | 예:"1h5m2s") — 게스트의 부트스트랩 스크립트에서 가장 마지막 단계로 SSH나 WinRM을 활성화하는 걸 권장해요. 하지만 때로는 Packer가 게스트에 연결을 시도하기 전에 기다려야 하는 경쟁 조건(race condition)이 있을 수 있어요. 그런 상황이라면 템플릿 옵션pause_before_connecting을 사용할 수 있어요. 기본적으로 일시 정지는 없어요. 예를 들어pause_before_connecting을10m으로 설정하면 Packer는 평소처럼 연결할 수 있는지 확인해요. 하지만 연결 시도가 성공하면, 연결을 끊은 다음 게스트에 연결하고 프로비저닝을 시작하기 전에 10분을 기다려요.
커뮤니케이터 사용 준비 (Getting Ready to Use the Communicator)
빌더에 따라, 커뮤니케이터가 "즉시(out of the box)" 동작하는 데 필요한 모든 것을 갖추지 못했을 수 있어요.
클라우드 이미지로부터 빌드한다면(예를 들어 Amazon에서 빌드), 클라우드 프로바이더가 이미지에 SSH를 미리 구성해 뒀을 가능성이 높아요. 그렇다면 Packer 템플릿에서 커뮤니케이터를 구성하기만 하면 돼요.
하지만 완전히 새롭고 구성되지 않은 운영체제 이미지로부터 빌드한다면, 게스트 머신에 SSH를 구성하기 위해 거의 항상 추가 작업을 해야 해요. 대부분의 운영체제 배포판에서 이 작업은 운영체제를 설치할 때 묻는 일반적으로 대화형인 질문들에 대한 답을 제공하는 파일을 참조하는 boot_command로 수행돼요. 이 파일의 이름은 운영체제마다 달라요. 몇 가지 흔한 예시로 Debian이 요구하는 "preseed" 파일, CentOS가 요구하는 "kickstart" 파일, Windows가 요구하는 "answer file"(Autounattend.xml이라고도 함)이 있어요. 간단히 하기 위해 문서의 나머지 부분에서는 이 파일을 "preseed" 파일이라고 부를게요.
이미지 자동 부트스트래핑을 위해 preseed 파일을 사용하는 방법에 익숙하지 않다면, 이미지 부트스트래핑에 대한 빠른 가이드를 보거나 특정 게스트 운영체제에 대한 자동 구성 방법을 조사해 보세요. 운영체제를 자동으로 초기화하는 방법을 아는 것은 Packer를 성공적으로 사용하는 데 중요해요.
커뮤니케이터별 옵션 (Communicator-Specific Options)
각 커뮤니케이터를 사용하는 방법에 대한 자세한 내용은 커뮤니케이터 페이지를 방문하세요.