✔️ Packer란 ?
HashiCorp 사가 제공하는 자동화된 클라우드 이미지 및 컨테이너 이미지 빌더이다.
테라폼은 file, local-exec, remote-exec 프로비저너를 이용해서 ansible을 간접적으로 사용했지만
Packer는 ansible 프로비저너을 지원하여 ansible 사용에 아주 편리하다.
Packer는 도커 이미지보다는 클라우드 이미지를 만들 때 자주 사용한다.
참고로 vagrant 이미지도 Packer로 만들어 놓은 것이다.
✔️ Packer 설치
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install packer
✔️ Packer Template
Packer는 Pacekr Template
를 사용한다.
이미지를 빌드하기 위한 선언과 명령으로 구성된 파일이다.
- HCL2
- Packer 1.5.0 부터 사용
- Packer 1.7.0 부터 공식/기본 방법
- 현재 버전 1.8.X(2022-04-27 기준)
.pkr.hcl
- JSON
.pkr.json
✔️ Block
- packer: Packer 버전 및 플러그인 버전 정의
- source: 빌드할 이미지의 소스 정의
- build: 이미지 빌드(source, provisioner, post-processor 구성)
- provisioner: 프로비저닝 플러그인
- post-processor: 프로비저닝 후 실행할 작업 정의
- variable: 변수
- locals: 로컬 값
- data
✔️ AWS 이미지 빌드 예제
mkdir -p packer/aws-ubuntu
cd packer/aws-ubuntu
aws-ubuntu.pkr.hcl
packer {
required_plugins {
amazon = { # 아마존 리눅스 이미지를 빌드하기 위해
version = ">= 0.0.1" # 현재의 버전
source = "github.com/hashicorp/amazon"
}
}
}
source "amazon-ebs" "ubuntu" { # 소스에 사용할 ebs
ami_name = "learn-packer-linux-aws"
instance_type = "t2.micro" # 이미지를 만들기 위해 인스턴스를 만든다.
region = "us-west-2" # 어느 리전에 배포할 것인지
source_ami_filter {
filters = { # filter를 이용해 원하는 이미지를 가져온다.
name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"] # 내 계정 ID 값을 넣으면 내 AMI 목록에서 가져올 수 있다.
}
ssh_username = "ubuntu" # ssh 접속 할 계정
}
build {
name = "learn-packer"
sources = [
"source.amazon-ebs.ubuntu" # source "amazon-ebs" "ubuntu"에서 시작한다.
] # 이 소스를 가지고 와서 vm을 만들 것이다.
provisioner "shell" { # 실제로 vm을 만든 다음 실행할 프로비저너
environment_vars = [ # 가장 기본적인 shell 프로비저너로
"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",
]
}
}
✔️ Packer init
packer init .
점(.) 현재 디렉토리를 의미한다.
테라폼처럼 하단 내용의 플러그인을 다운받게 된다.
required_plugins {
amazon = { # 아마존 리눅스 이미지를 빌드하기 위해
version = ">= 0.0.1" # 현재의 버전
source = "github.com/hashicorp/amazon"
}
✔️ Packer fmt
Packer 코드의 형식을 맞춰준다. Terraform fmt
과 동일하다.
packer fmt .
✔️ Packer validate
Packer 코드의 형식이 유효한지 확인한다. Terraform validate
와 동일하다.
packer validate .
✔️ Packer build
Packer 소스를 이용해 이미지를 빌드한다.
packer build .
인벤토리의 host를 디폴트로 잡아놓으면 현재 패커에 의해 생성된 인스턴스를 지칭한다.
인스턴스를 실행한뒤 인스턴스를 알아서 중단하고 (이미지를 만들기 위해) ssh key, 보안 그룹 등을 만들고 AMI 이미지를 만든다.
모든 작업을 실행하고 실행 과정에서 만든 리소스(인스턴스)를 알아서 정리한다.
어떤 vpc에 올려서 작업 할 것인지 지정할 수도 있다.
✔️ Packer build 덮어쓰기 옵션
한번 빌드가 끝난 이미지를 다시 빌드 하려고 하면 빌드에 실패한다.
이미 이미지가 존재하기 때문이다.
방법
1) 생성할 이미지의 이름을 바꾸기
2) force_deregister = ture → 덮어 쓴다.
'Useful' 카테고리의 다른 글
vi 편집기 명령어 정리 (0) | 2023.08.20 |
---|---|
oh-my-zsh 로 터미널 환경 구성하기 (0) | 2022.05.06 |
Chocolatey 개념 및 설치 방법 (0) | 2022.05.03 |
Ansible playbook 작성을 위한 VScode Extensions 세팅 (0) | 2022.04.15 |
WinSCP를 이용해 Windows에서 Linux 가상 머신으로 파일 전송하기 (0) | 2022.04.13 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!