post-processor 블록

post-processor 블록

이 주제는 post-processor 블록에 대한 레퍼런스 정보를 제공해요.

출처: Packer 공식 문서

본문

설명 (Description)

post-processor 블록은 포스트-프로세서가 어떻게 구성되는지를 정의해요.

# builds.pkr.hcl
build {
  # ... build image
  post-processor "checksum" { # checksum image
    checksum_types = [ "md5", "sha512" ] # checksum the artifact
    keep_input_artifact = true           # keep the artifact
  }

  post-processor "amazon-import" { # upload image to amazon
  }
}

각 post-processor는 정의된 각 빌드가 끝난 뒤에 실행돼요. 포스트-프로세서는 빌드로부터 Artifact를 받아요. 포스트-프로세서는 선택 사항이며, 아티팩트를 업로드하거나, 다시 패키징하거나, 더 많은 작업을 하는 데 사용할 수 있어요. 사용 가능한 포스트-프로세서 목록은 post-processors 섹션에서 찾을 수 있어요.

post-processor는 post-processors 블록 목록(즉 연결된 포스트-프로세서들의 목록)에 정의될 때 다른 포스트-프로세서로부터 Artifact를 받을 수도 있어요.

:::note 포스트-프로세서가 받는 입력 'artifact'는 기본적으로 자동으로 삭제돼요. :::

입력 아티팩트 유지하기 (Keep an input artifact)

입력 아티팩트가 삭제되는 것을 막으려면 keep_input_artifact 필드를 true로 설정해서 Packer가 두 아티팩트 모두를 유지하게 할 수 있어요. 예를 들어 아티팩트를 checksum하고 그 아티팩트를 유지하고 싶다면:

# builds.pkr.hcl
build {
  # ...
  post-processor "checksum" {
    checksum_types = [ "md5", "sha512" ]
    keep_input_artifact = true
  }
}

특정 빌드에서만 실행하기 (Run on Specific Builds)

only 또는 except 설정을 사용해 특정 소스에서만 포스트-프로세서를 실행할 수 있어요. 이 두 설정은 이름 그대로 동작해요. only는 지정된 소스에서만 포스트-프로세서를 실행하고, except는 지정된 소스를 제외한 나머지에서 포스트-프로세서를 실행해요.

only가 사용된 예시를 아래에서 보여드릴게요. except의 사용법도 사실상 동일해요.

# builds.pkr.hcl
build {
  # ...
  post-processor "checksum" {
    checksum_types = [ "md5", "sha512" ]
    keep_input_artifact = true
    only = ["amazon-ebs.example"]
  }
}

only나 except 안의 값은 빌더 유형이 아니라 소스 이름이에요.

커맨드라인에서 packer build를 실행할 때 특정 포스트-프로세서를 제외하고 싶다면 이렇게 할 수 있어요. packer build --except=checksum mytemplate.pkr.hcl는 checksum 포스트-프로세서를 실행하지 않아요. 이 커맨드라인 제외는 포스트-프로세서 이름을 참조해서 동작해요. 기본적으로 포스트-프로세서는 위의 checksum 예시에서처럼 그 유형의 이름을 따서 이름 지어져요. 각 포스트-프로세서 블록에 "name" 필드를 추가하면 포스트-프로세서의 이름을 고유하게 만들 수 있어요.

-except 플래그는 커맨드라인에서 포스트-프로세서를 걸러낼 수 있지만, -only 플래그는 포스트-프로세서에 동작하지 않아요. 특정 소스 빌드에 대해서만 포스트-프로세서를 실행하고 싶다면, 위에서 설명한 대로 hcl 템플릿 안에서 only=[source] 문법을 사용해야 해요.

빌드 컨텍스트 변수 (Build Contextual Variables)

Packer는 포스트-프로세서에서 연결 정보와 기본 인스턴스 상태 정보에 접근할 수 있게 해 줘요. 이 정보는 build 변수에 저장돼요. 자세한 내용과 사용 예시는 Contextual Variables 문서를 확인하세요.

  • post-processors 블록은 빌드와 프로비전 단계의 출력을 받을 포스트-프로세서들의 체인을 하나 이상 정의할 수 있게 해 줘요.

더 알아보기 (Learn more)