HCL 문법 레퍼런스
HCL 문법 레퍼런스 (HCL syntax reference)
이 주제는 Packer 템플릿을 만드는 데 사용할 수 있는 네이티브 HashiCorp 구성 언어(HCL) 문법에 대한 레퍼런스 정보를 제공해요. JSON에서의 HCL 구조에 대한 정보는 JSON 문법 레퍼런스를 참고하세요.
출처: Packer 공식 문서
본문
소개 (Introduction)
HCL 문법을 배우면 Packer 템플릿 구조가 어떤 빌딩 블록으로 만들어지는지 이해할 수 있어요. HCL은 사람이 읽고 쓰기 쉽게 설계된 풍부한 언어예요. 이 언어는 다른 애플리케이션의 설정 언어들에서도 사용되며, 특히 다른 HashiCorp 제품들에서도 사용돼요. Packer를 사용하기 위해 HCL의 모든 세부 사항을 알 필요는 없어서, 이 페이지는 가장 중요한 부분만 요약해요. 관심이 있다면 HCL 네이티브 문법 스펙에서 HCL 문법의 전체 정의를 찾을 수 있어요.
인자와 블록 (Arguments and Blocks)
HCL 문법은 두 가지 핵심 문법 구조를 중심으로 만들어져요: 인자(arguments)와 블록(blocks).
인자 (Arguments)
인자는 특정 이름에 값을 할당해요:
image_id = "abc123"
등호 앞의 식별자가 인자 이름이고, 등호 뒤의 표현식이 인자의 값이에요. 인자가 나타나는 컨텍스트가 어떤 값 유형이 유효한지 결정해요(예를 들어 각 소스 유형은 인자의 유형을 정의하는 스키마를 가져요). 하지만 많은 인자는 임의의 표현식을 받아들여, 값이 리터럴로 지정되거나 다른 값들로부터 프로그래밍 방식으로 생성되게 해요.
블록 (Blocks)
블록은 다른 내용을 위한 컨테이너예요:
source "amazon-ebs" "example" {
ami_name = "abc123"
tags = {
# ...
}
}
블록은 유형(type)을 가져요(이 예시에서는 source). 각 블록 유형은 유형 키워드 뒤에 몇 개의 레이블이 와야 하는지를 정의해요. source 블록 유형은 두 개의 레이블을 기대하는데, 위 예시에서 그것은 amazon-ebs와 example이에요. 특정 블록 유형은 요구되는 레이블이 여러 개일 수도 있고, 중첩된 tags 블록 유형처럼 전혀 요구하지 않을 수도 있어요.
블록 유형 키워드와 레이블 뒤에는 {와 } 문자로 블록 본문이 구분돼요. 블록 본문 안에서는 추가 인자와 블록이 중첩될 수 있어, 블록과 그와 연관된 인자의 계층 구조가 만들어져요.
HCL은 제한된 수의 최상위 블록 유형을 사용해요. 이는 설정 파일의 어떤 다른 블록 밖에도 나타날 수 있는 블록들이에요. Packer 기능의 대부분(리소스, 입력 변수, 출력 값, 데이터 소스 등을 포함)은 최상위 블록으로 구현돼요.
식별자 (Identifiers)
인자 이름, 블록 유형 이름, 그리고 리소스·입력 변수 같은 대부분의 Packer 특정 구조의 이름은 모두 식별자예요. 식별자는 문자, 숫자, 밑줄(_), 하이픈(-)을 포함할 수 있어요. 식별자의 첫 문자는 숫자일 수 없어요. 리터럴 숫자와의 모호성을 피하기 위해서예요.
완전한 식별자 규칙을 위해, Packer는 ASCII 하이픈 문자 -를 포함하도록 확장된 Unicode 식별자 문법을 구현해요.
주석 (Comments)
HCL은 주석에 세 가지 문법을 지원해요:
#— 한 줄 주석을 시작하며, 줄 끝에서 끝나요.//—#의 대안으로 한 줄 주석도 시작해요./*와*/— 여러 줄에 걸칠 수 있는 주석의 시작과 끝 구분자예요.
# 한 줄 주석 스타일이 기본 주석 스타일이며 대부분의 경우 사용해야 해요. 자동 설정 포맷 도구는 더블 슬래시 스타일이 관용적이지 않기 때문에, // 주석을 자동으로 # 주석으로 변환할 수도 있어요.
문자 인코딩과 줄바꿈 (Character Encoding and Line Endings)
Packer 설정 파일은 항상 UTF-8로 인코딩되어야 해요. 언어의 구분자는 모두 ASCII 문자이지만, Packer는 식별자, 주석, 문자열 값에서 비-ASCII 문자를 받아들여요.
Packer는 Unix 스타일 줄바꿈(LF만) 또는 Windows 스타일 줄바꿈(CR 다음 LF)을 가진 설정 파일을 모두 받아들이지만, 관용적인 스타일은 Unix 규약을 사용하는 것이에요. 따라서 자동 설정 포맷 도구는 CRLF 줄바꿈을 자동으로 LF로 변환할 수도 있어요.