Intro
이번 블로그에서는 Packer를 사용해 AWS AMI 이미지를 생성하는 심화 과정에 대해 다루어보겠습니다. Packer의 설정 파일을 여러 개로 나누고, 쉘 스크립트를 프로비저닝 단계에서 동작시키는 방법을 상세히 알아보도록 할게요. 이를 통해 좀 더 유연하고 구조화된 설정 관리가 가능해지며, 이미지 빌드 과정에서 추가 작업을 자동화할 수 있습니다.
Packer 파일 구조화
project-root/
├── build.pkr.hcl
├── plugins.pkr.hcl
├── source.pkr.hcl
├── variables.pkr.hcl
├── variables.pkrvars.hcl
└── scripts/
└── install_software.sh
build.pkr.hcl
- 빌드 작업의 단계와 프로비저닝 설정을 정의합니다.plugins.pkr.hcl
- 필요한 Packer 플러그인 설정을 관리합니다.source.pkr.hcl
- 소스 이미지 및 AWS 인스턴스 설정을 정의합니다.variables.pkr.hcl
- 빌드 과정에서 사용할 변수를 선언합니다.variables.pkrvars.hcl
- 선언된 변수의 값을 구체적으로 지정합니다.scripts/install_software.sh
- 프로비저닝 과정에서 실행할 쉘 스크립트입니다.
packer 코드 작성 방법
1. build.pkr.hcl
- 역할: 빌드 작업의 단계와 프로비저닝 설정을 정의합니다.
- 설명:
build
블록은 Packer가 어떤 작업을 수행해야 하는지, 어떤 소스를 사용할지, 프로비저닝 방식이 무엇인지를 정의합니다. 예를 들어, AWS 환경에 맞는 빌드를 설정하고, 쉘 스크립트를 호출하여 소프트웨어 설치나 설정 작업을 자동화할 수 있습니다.
예시 파일 내용:
# build.pkr.hcl
build {
sources = ["source.amazon-ebs.example"]
provisioner "shell" {
script = "./scripts/install_software.sh"
}
}
위 설정에서 Packer는 source
로 정의된 인스턴스를 빌드한 후, install_software.sh
라는 스크립트를 실행합니다.
2. plugins.pkr.hcl
- 역할: 필요한 Packer 플러그인 설정을 관리합니다.
- 설명: Packer는 다양한 클라우드 제공자와 가상화 플랫폼을 지원하는 플러그인을 통해 기능을 확장할 수 있습니다. 이 파일에서 Packer가 사용할 플러그인을 정의하고 설정합니다. AWS를 위한 플러그인을 설치해 EC2 인스턴스의 AMI 빌드를 할 수 있도록 설정할 수 있습니다.
예시 파일 내용:
# plugins.pkr.hcl
packer {
required_plugins {
amazon = {
version = ">= 1.0.0"
source = "github.com/hashicorp/amazon"
}
}
}
이 파일은 Packer가 amazon
플러그인을 사용하여 AWS 관련 빌드 작업을 수행할 수 있도록 설정합니다.
3. source.pkr.hcl
- 역할: 소스 이미지 및 AWS 인스턴스 설정을 정의합니다.
- 설명:
source
블록은 어떤 이미지를 기반으로 새로운 이미지를 생성할지 정의합니다. 여기에는 소스 AMI, 인스턴스 유형, 리전 등을 설정할 수 있습니다. 주로 AWS, Azure, Docker와 같은 환경에 맞춰 설정을 구성합니다.
예시 파일 내용:
# source.pkr.hcl
source "amazon-ebs" "example" {
region = var.aws_region
instance_type = var.instance_type
source_ami_filter {
filters = {
name = "amzn2-ami-hvm-*-x86_64-gp2"
root-device-type = "ebs"
virtualization-type = "hvm"
}
owners = ["123456789012"]
most_recent = true
}
ami_name = "packer-example-{{timestamp}}"
}
이 파일에서는 Amazon Linux 2를 기반으로 최신 AMI 이미지를 생성하도록 설정되어 있습니다.
4. variables.pkr.hcl
- 역할: 빌드 과정에서 사용할 변수를 선언합니다.
- 설명: 변수 블록은 이미지 빌드 시 필요한 값을 미리 정의할 수 있도록 하여 빌드 설정의 유연성을 높입니다. 여기서는 리전, 인스턴스 타입 등 변수들을 선언할 수 있습니다.
예시 파일 내용:
# variables.pkr.hcl
variable "aws_region" {
type = string
default = "us-west-2"
}
variable "instance_type" {
type = string
default = "t2.micro"
}
5. variables.pkrvars.hcl
- 역할: 선언된 변수의 값을 구체적으로 지정합니다.
- 설명: 파일에 정의된 변수의 값을 구체적으로 설정하여 특정 환경에서 빌드할 때 유동적으로 사용할 수 있도록 합니다. 예를 들어, 빌드에 사용할 리전과 인스턴스 유형을 다른 값으로 지정할 수 있습니다.
예시 파일 내용:
# variables.pkrvars.hcl
aws_region = "us-east-1"
instance_type = "t3.small"
이렇게 설정하면, aws_region
과 instance_type
이 us-east-1
과 t3.small
로 오버라이드됩니다.
6. 쉘 스크립트 파일: install_software.sh
프로비저닝 단계에서 실행할 쉘 스크립트를 작성하여, 필요한 소프트웨어를 자동으로 설치할 수 있습니다. 예를 들어, Apache 웹 서버를 설치하고 시작하는 스크립트를 작성해보겠습니다.
예시 스크립트 파일 (scripts/install_software.sh
):
#!/bin/bash
# install_software.sh
# Apache 설치 및 시작
sudo yum update -y
sudo yum install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpd
Packer는 이 스크립트를 실행하여 생성하는 AMI에 Apache 서버가 설치되고 자동으로 시작되는 환경을 구축할 수 있습니다.
Packer 빌드 실행
위 파일들이 준비되었다면, Packer를 이용해 이미지 빌드를 시작할 수 있습니다. 다음과 같은 명령어를 사용하여 빌드를 진행합니다:
packer init .
packer validate .
packer build -var-file=variables.pkrvars.hcl build.pkr.hcl
validate
명령은 설정 파일의 문법 오류를 확인하는 데 유용하며, build
명령을 통해 모든 설정과 프로비저닝이 적용된 AMI 이미지를 생성합니다.
이와 같이 Packer 파일을 여러 개로 나누어 구성하고, 프로비저닝 단계에서 쉘 스크립트를 실행하면 더 복잡한 이미지를 쉽게 구성할 수 있습니다. 이러한 방식은 유지 관리와 확장성이 뛰어나기 때문에 실무에서 자주 활용됩니다. Packer사용하면 자동화된 AWS AMI 생성 과정을 더욱 체계적으로 관리가 가능합니다.
'IT > DevOps' 카테고리의 다른 글
[DevOps] Helm Chart 란? (3) | 2024.11.18 |
---|---|
[DevOps] 서비스 메쉬(Service Mesh)와 Istio에 대해 (2) | 2024.11.18 |
[DevOps] Packer 란? (이미지 빌드 자동화의 필요성) (4) | 2024.11.08 |
[DevOps] CI/CD구성시 고려해야 될 것들 (Application/DB/Infra/Network 관점에서) (1) | 2024.11.07 |
[DevOps] CI/CD란? (3) | 2024.11.07 |