이제 후 처리기에 대해 알아보도록 하겠습니다. 패커가 이미지를 빌드하고 산출물을 만드는데, 이 산출물을 artifact라고 합니다. 그리고 후 처리기는 이 artifact를 가지고 또다른 산출물을 만들게 됩니다.
https://www.packer.io/docs/post-processors
Packer by HashiCorp
Post-processors run after the image is built by the builder and provisioned by the provisioner(s).
www.packer.io
이 공식문서를 기반으로 현재 활용가능한 post-processor를 간단히 활용해 보도록 하겠습니다.
/versions.pkr.hcl
packer {
required_version = "~> 1.7"
required_plugins {
amazon = {
version = "~> 1.0"
source = "github.com/hashicorp/amazon"
}
}
}
/sources.pkr.hcl
source "amazon-ebs" "ubuntu" {
instance_type = "t2.micro"
region = "ap-northeast-2"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-focal-20.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
여기까지는 다 비슷비슷합니다. amazon-ebs를 이용하여 ubuntu 이미지를 하나 만들었습니다.
/main.pkr.hcl
build {
name = "fastcampus-packer"
source "amazon-ebs.ubuntu" {
name = "nginx"
ami_name = "fastcampus-packer"
}
post-processor "manifest" {}
post-processors {
post-processor "shell-local" {
inline = ["echo Hello World! > artifact.txt"]
}
post-processor "artifice" {
files = ["artifact.txt"]
}
post-processor "compress" {}
}
post-processors {
post-processor "shell-local" {
inline = ["echo Finished!"]
}
}
}
여기서는 packer의 manifest post-processor를 맨 처음 사용했습니다. 이의 Artifact BuilderId는 packer.post-processor.manifest파일입니다. 이는 JSON파일을 반환합니다. 이는 결과 아티펙트의 AMI, IDs, docker containers,...등을 결과물로 반환합니다. 이는 각각의 빌드타임미다 생성됩니다.
또한 다음과 같이 각각의 빌드 아티펙트는 post-process의 블럭 마다 하나씩 들어갑니다. 그리고 post-processors안에는 post-processor블럭이 하나씩 실행됩니다. 블럭 하나의 출력결과가 다음 post-processor의 입력물이 됩니다. 두번쨰 post-processors블럭은 shell-local로 Hello World라는 내용의 artifact.txt를 작성하고, 이를 입력으로서 comproess post-processor를 해서 gzip으로 압축해서 로컬에 반환합니다. 또한 마지막으로 shell-local로 Finished!를 찍습니다.
한번 빌드해보겠습니다.
/packer-manifest.json
{
"builds": [
{
"name": "ubuntu",
"builder_type": "amazon-ebs",
"build_time": 1659444539,
"files": null,
"artifact_id": "ap-northeast-2:ami-00d0309de0618b05b",
"packer_run_uuid": "2026f929-17a2-007a-1894-5cf03808264a",
"custom_data": null
}
],
"last_run_uuid": "2026f929-17a2-007a-1894-5cf03808264a"
}
일단 다음과 같이 manifest파일이 나옵니다.
또한 위와같이 산출물인 packer_ubuntu_amazon_ebs를 압축을 풀고 그 안의 내용을 확인했더니 Hello World!가 잘 찍혀 있는 것을 확인할 수 있습니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 Provisioner와 EC2 Userdata (0) | 2022.08.03 |
---|---|
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 디버깅하는 방법 (Debugging) (0) | 2022.08.02 |
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 데이터 소스 활용 ( Data-source ) (0) | 2022.08.02 |
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 프로비저너 (Provisioner) (0) | 2022.08.02 |
[ DevOps ] - (패커를 이용한 머신 이미지 관리) - 기초 && 빌더 (0) | 2022.08.02 |