Packer v1.12 릴리스 노트

Packer v1.12 릴리스 노트

이 페이지는 v1.12의 Packer 변경 사항을 설명해요. 모든 릴리스에 대한 정보는 Packer 저장소를 참고해 주세요.

출처: Packer 공식 문서

본문

새로운 기능 (New features)

이 릴리스에는 다음과 같은 업데이트가 포함돼요.

HCP Packer SBOM 지원 (HCP Packer SBOM Support)

Packer 1.12에서는 소프트웨어 자재 명세서(SBOM, software bill of materials)를 HCP Packer에 업로드하고 아티팩트 버전에 연결할 수 있어요. SBOM은 시스템에 대한 정보를 내보내는 표준화된 방법이에요. Packer의 경우 아티팩트의 SBOM에서 흔히 찾을 수 있는 유용한 정보는 설치된 패키지 목록과 함께, 빌드된 시스템의 추가 정보(OS, 버전, 커널, 아키텍처 등)예요.

빌드의 일부로 SBOM을 HCP Packer에 업로드하는 것을 지원하지만, SBOM을 생산하기 위한 전용 provisioner나 도구는 제공하지 않아요. 대신 서드파티 스캐너를 사용해 프로비저닝 중인 VM에서 SBOM을 만들고, Packer 빌드가 완료되면 hcp-sbom provisioner로 업로드하는 걸 권장해요.

데이터 소스와 Locals 평가 순서 변경 (Data source and Locals evaluation order changes)

이전 버전의 Packer는 단계 기반 접근법을 사용했어요. 데이터 소스를 먼저 평가한 뒤 로컬 변수를 평가하는 식이었죠. 그래서 데이터 소스가 로컬 변수를 참조하는 게 불가능했어요.

Packer 1.12는 데이터 소스와 locals를 평가하는 데 방향성 비순환 그래프(DAG, Directed Acyclic Graph) 접근법을 도입해요. 이는 이 구성 요소들 사이의 의존 순서를 느슨하게 만들어서, 이제 두 컨텍스트에서 서로를 참조할 수 있어요.

이 변경은 Packer 빌드의 모든 것을 평가하는 데 DAG를 사용하는 완전한 전환을 향한 한 걸음이고, 향후 릴리스에서 이로 인한 다른 개선도 기대할 수 있어요.

Packer-Plugin 통신용 직렬화 포맷 업그레이드 (Serialisation format upgrades for Packer-Plugin communication)

1년 이상 전에 우리 의존성(go-cty)이 gob 인코딩 지원을 중단했어요. 이 때문에 플러그인 개발자들이 더 최신 버전의 HCL2 라이브러리로 업그레이드할 수 없게 됐죠. 그렇게 하면 플러그인이 Packer와 통신할 수 없게 되기 때문이에요. 우리는 go-cty 저장소를 포크하고 모든 Packer 플러그인에 대체 지시문을 도입해 이 문제를 임시로 해결했어요. 이 수정은 기능했지만 장기적인 해결책으로는 바람직하지 않아서, 더 영구적인 수정을 찾고 있었어요.

이제 Packer는 플러그인과 통신할 때 gob에 의존하는 대신 protobuf/msgpack 하이브리드 방식을 사용해요. 우리는 이 변경을 지금 비파괴적인 방식으로 도입하고 있어요. 현재 지원되는 모든 플러그인은 당분간 Packer와 계속 동작할 것으로 예상되며, 이 새 직렬화 방식 사용으로 전환하는 것은 여러분에게 투명하게 이루어져요.

새로운 HCL2 함수 (New HCL2 functions)

Packer 1.12의 일부로 HCL2 템플릿에서 쓸 수 있는 함수를 더 도입했고, 하나(aws_secretsmanager_raw)는 레거시 JSON과 HCL2 템플릿 양쪽에서 쓸 수 있어요.

  • anytrue: 컬렉션에 true 값이 하나 이상 있는지 확인해요.
  • alltrue: 컬렉션에 true 값만 있는지 확인해요.
  • aws_secretsmanager_raw: AWS Secrets Manager에서 원시(raw) 비밀을 가져와요. aws_secretsmanager와 달리 모든 타입에서 동작해요.
  • base64gzip: 바이너리 blob을 gzip 압축하고 base64로 인코딩된 string으로 노출해서 템플릿의 다른 곳에서 사용해요.
  • strcontains: 문자열이 다른 문자열을 포함하는지 확인해요.

HTTP 데이터 소스가 GET 외의 메서드 지원 (HTTP data source support methods other than GET)

Packer에 내장된 HTTP 데이터 소스는 원격 서버에서 HTTP로 데이터를 가져올 수 있게 해줘요. 이전 버전의 Packer는 이를 위해 GET만 지원했어요. Packer 1.12는 HEAD, GET, POST, PUT, DELETE, OPTIONS, PATCH를 허용하도록 이것을 느슨하게 해요.

버그 수정 (Bug fixes)

macOS 바이너리에 LC_UUID 포함 (Include LC_UUID in macOS binaries)

macOS 사용자들은 OS 버전을 업그레이드한 뒤 Packer를 사용할 때 권한 관련 문제가 생기기 시작했어요. 이 문제는 macOS의 네트워크 사용 정책 업데이트 때문에 발생했는데, 이제 로컬 루프 인터페이스를 사용해 네트워크로 통신하려는 바이너리는 유효한 UUID를 포함해야 해요. Packer 1.12부터 모든 macOS 바이너리는 유효한 LC_UUID를 포함해서 이 문제를 해결했어요.

HCL2 템플릿의 오류 메시지 중복 줄이기 (Less duplication of error messages in HCL2 templates)

템플릿의 최상위 HCL2 템플릿에 오류가 있으면 Packer는 파싱 오류를 만들어요. Packer 템플릿을 작성할 때 이는 예상된 동작이에요. 도구가 문법 위반을 지적해서 고칠 수 있게 도와주는 거죠. 하지만 HCL 관련 오류의 일부에서 이전 버전의 Packer는 같은 메시지를 최대 다섯 번 표시했어요. 커뮤니티 기여 덕분에 Packer 1.12부터는 더 이상 이런 일이 없어요.