Packer 병렬 빌드 - 6편
by softPine이전 튜토리얼에서는 Packer 템플릿에서 매개변수를 설정하여 AMI 이름 등을 자동으로 업데이트하는 등의 튜토리얼을 했었다. 이번에는 병렬 빌드를 하도록 해보겠다.
병렬 빌드는 Packer의 유용하고 중요한 기능 중 하나로, 동일한 스크립트로 프로비저닝 된 AWS AMI와 VMware VM을 동시에 구축하여 거의 동일한 이미지를 생성할 수 있다. AMI의 경우 라이브 서비스 용도로 사용을 하고, VM의 경우는 개발에 사용할 수 있다.
다른 예로는 Packer를 사용하여 소프트웨어 어플라이언스를 작성하는 경우 지원되는 모든 플랫폼에 대해 단일 템플릿에서 병렬로 빌드할 수 있다.
또한 도커 이미지를 병렬 이미지로 빌드할 수 있다. 이 두번째 도커 이미지는 쉽게 다른 하이퍼바이저나 다른 클라우드 플랫폼에서 사용할 수 있다.
사전 준비 사항
이번에도 이전 튜토리얼을 잘 따라왔다면 준비 사항은 없다. 기존의 템플릿만 확인한다.
packer {
required_plugins {
amazon = {
version = ">= 0.0.1"
source = "github.com/hashicorp/amazon"
}
}
}
variable "ami_prefix" {
type = string
default = "learn-packer-linux-aws-redis"
}
locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
}
source "amazon-ebs" "ubuntu" {
ami_name = "${var.ami_prefix}-${local.timestamp}"
instance_type = "t2.micro"
region = "ap-northeast-2"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
build {
sources = [
"source.amazon-ebs.ubuntu"
]
provisioner "shell" {
environment_vars = [
"FOO=hello world",
]
inline = [
"echo Installing Redis",
"sleep 30",
"sudo apt-get update",
"sudo apt-get install -y redis-server",
"echo \"FOO is $FOO\" > example.txt",
]
}
provisioner "shell" {
inline = ["echo This provisioner runs last"]
}
}
템플릿에 병렬 빌드 추가하기
병렬 빌드를 사용하려면 기존의 source 블럭을 작성한 후 build 블록 내부에 있는 sources 어레이의 하위에 추가를 해주면 된다. 만약 source 가 동일한 유형일 경우 추가할 필요는 없다. 이렇게 하면 Packer는 빌드 시 여러 이미지를 빌드한다.
aws-ubuntu.pkr.hcl 파일에서 다음의 source 블럭을 추가한다. 기존에 있던 source 블럭과 유사하지만 ubuntu-focal-20.04 AMI를 사용하며 AMI의 이름에 -focal이란 값이 붙는다.
source "amazon-ebs" "ubuntu-focal" {
ami_name = "${var.ami_prefix}-focal-${local.timestamp}"
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"
}
추가적으로 build 블럭 하위의 sources 어레이의 하단에 새로운 source를 추가해준다.
build {
sources = [
- "source.amazon-ebs.ubuntu"
+ "source.amazon-ebs.ubuntu",
+ "source.amazon-ebs.ubuntu-focal"
]
## ...
}
추가가 완료되었다면 새로운 소스로부터 이미지를 빌드한다.
이미지 빌드 및 확인
이미지를 빌드하게 되면 각각의 빌드에 대해서 색상이 다른 코드를 출력해준다. 각각의 색상으로 해당 빌드의 현재 진행상황을 알아볼 수 있다. 이 예제에서는 기존의 ubuntu와 ubuntu-focal에 대해서 병렬 빌드가 되고 있는 것을 확인할 수 있다.
pk build .
amazon-ebs.ubuntu: output will be in this color.
amazon-ebs.ubuntu-focal: output will be in this color.
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs.ubuntu: AMIs were created:
ap-northeast-2: ami-0552325e9eeae3908
--> amazon-ebs.ubuntu-focal: AMIs were created:
ap-northeast-2: ami-0414acd6624994d86
'OpenSource > Packer' 카테고리의 다른 글
Packer 변수 - 5편 (0) | 2021.06.08 |
---|---|
Packer로 프로비저닝하기 - 4편 (0) | 2021.06.07 |
Packer로 이미지 만들어보기 - 3편 (0) | 2021.06.06 |
Packer 설치 - 2편 (0) | 2021.06.04 |
Packer란? - 1편 (0) | 2021.06.04 |
블로그의 정보
나의 삽질저장소
softPine