packer hcl2_upgrade 커맨드 참조

packer hcl2_upgrade 커맨드 참조 (packer hcl2_upgrade command reference)

packer hcl2_upgrade 커맨드는 JSON 구성 템플릿을 포맷된 HCL2 대응 템플릿으로 변환(transpile)해요. 성공하면 종료 상태 0을, 실패하면 0이 아닌 값을 반환해요.

출처: Packer 공식 문서

본문

이 커맨드는 베타(beta) 상태예요. 프로덕션 환경에서 베타 기능을 쓰는 것은 권장하지 않아요. 이슈를 보고하고 피드백을 주려면 GitHub 이슈를 열어주세요.

Usage (사용법)

$ packer hcl2_upgrade my-template.json

Successfully created my-template.json.pkr.hcl

Upgrading variables file (변수 파일 업그레이드)

v1.7.1부터 hcl2_upgrade 커맨드는 변수 파일을 업그레이드할 수 있어요.

Original file (variables.json) → Result file (variables.pkr.hcl)

{
  "variables": {
    "aws_region": null,
    "aws_secondary_region": "{{ env `AWS_DEFAULT_REGION` }}",
    "aws_secret_key": "",
    "aws_access_key": ""
  },
  "sensitive-variables": ["aws_secret_key", "aws_access_key"]
}
variable "aws_access_key" {
  type      = string
  default   = ""
  sensitive = true
}

variable "aws_region" {
  type = string
}

variable "aws_secondary_region" {
  type    = string
  default = "${env(\"AWS_DEFAULT_REGION\")}"
}

variable "aws_secret_key" {
  type      = string
  default   = ""
  sensitive = true
}

Go template functions (Go 템플릿 함수)

hcl2_upgrade 는 Go 템플릿 호출을 HCL2로 최대한 변환해 줘요. 변환돼야 하는 호출 목록은 다음과 같아요.

  • {{ user my_var }} 는 $ {var.my_var} 가 돼요.
  • {{ env my_var }} 는 $ {var.my_var} 가 돼요. Packer HCL2는 입력 변수를 통해 환경 변수를 지원해요. 자세한 내용은 문서를 참고하세요.
  • {{ timestamp }} 는 $ {local.timestamp} 가 돼요. 생성된 모든 파일에 로컬 변수가 만들어져요.
  • {{ build ID }} 는 $ {build.ID} 가 돼요. 나머지 호출은 지금으로서는 Go 템플릿 호출로 남아 있어요. 시간이 지나면서 개선될 예정이에요.

참고: hcl2_upgrade 커맨드는 템플릿 호출을 JSON 대응으로 최선을 다해 변환하지만 실패할 수도 있어요. 그 경우 hcl2_upgrade 커맨드는 로컬 HCL2 블록을 변환 없이, 오류 메시지를 주석으로 담아 그대로 출력해요. 우리는 이 변환기 부분을 개선하기 위해 작업 중이에요.

Options (옵션)

  • -output-file — 생성된 hcl2 템플릿의 파일 이름. 기본값은 JSON_TEMPLATE.pkr.hcl이에요. 예를 들어 파일 이름이 "packerparty.json"이면 기본 output-file은 "packerparty.json.pkr.hcl"이 돼요.
  • -with-annotations — 생성된 HCL2 블록에 대한 정보와 함께 HCL 템플릿에 유용한 주석을 추가해요.

User variables using other user variables (다른 사용자 변수를 사용하는 사용자 변수)

Packer JSON은 최근 변수 파일에서 사용자 변수를 사용하는 것을 허용하기 시작했어요. HCL2에서 입력 변수는 함수나 다른 변수를 사용할 수 없고 사실상 정적이에요. 더 동적인 변수를 만들려면 로컬 변수(local variables)를 대신 사용해야 해요.

v1.7.0 이하에서는 hcl2_upgrade 가 변수를 로컬 변수로 업그레이드하지 않아요. 직접 수동으로 업그레이드해야 해요. v1.7.1로 업그레이드하면 커맨드가 자동으로 해 줘요.

다음은 문자열 입력 변수를 사용하는 로컬 변수 예시예요.

variable "foo" {
  default = "Hello,"
}

variable "bar" {
  default = "World!"
}

locals {
  baz = "${var.foo} ${var.bar}"
}

Upgrading templates that use third-party community plugins (서드파티 커뮤니티 플러그인을 사용하는 템플릿 업그레이드)

템플릿이 메인 Packer 바이너리에 번들되지 않은 플러그인을 참조한다면, 플러그인이 설치되어 있는지 확인해야 해요. 그렇지 않으면 unknown builder type 오류가 나요. Packer는 템플릿을 변환하려면 플러그인을 로드해야 하거든요.

더 알아보기 (Learn more)