Intro
AWS에서 가상 머신의 이미지(AMI, Amazon Machine Image)를 만들고 관리하는 일은 애플리케이션 배포와 인프라 관리에서 매우 중요한 부분입니다. 특히, 동일한 이미지를 여러 인스턴스에서 일관되게 사용할 수 있기 때문에, 배포 과정에서의 오류를 줄이고 안정성을 높일 수 있습니다. 이번 블로그에서는 HashiCorp의 Packer를 사용해 AWS에서 AMI 이미지를 자동으로 생성하는 방법을 단계별로 소개하겠습니다.
Packer란?
Packer는 HashiCorp에서 개발한 오픈 소스 도구로, 다양한 클라우드와 가상화 환경에서 사용할 이미지를 자동으로 빌드해주는 도구입니다. AWS, Azure, GCP, VMware 등 여러 플랫폼에 배포할 이미지를 쉽게 만들 수 있게 해줍니다. Packer는 JSON 또는 HCL(HashiCorp Configuration Language)로 작성된 설정 파일을 기반으로 이미지를 정의하고, 동일한 이미지가 여러 환경에서 일관되게 배포될 수 있도록 합니다.
사전 준비
Packer를 사용해 AWS AMI 이미지를 만들기 위해서는 다음과 같은 준비가 필요합니다:
- AWS 계정 및 IAM 설정:
- AWS에 로그인하여 EC2 인스턴스를 생성할 권한이 있는 IAM 사용자 또는 역할을 준비합니다.
- 필요 권한:
ec2:Describe*
,ec2:CreateImage
,ec2:RunInstances
,ec2:TerminateInstances
등이 포함된 권한이 필요합니다.
- Packer 설치:
- Packer 공식 사이트에서 운영체제에 맞는 설치 파일을 다운로드한 후 설치합니다.
- 설치 후 터미널에
packer -v
명령을 입력하여 설치 확인이 가능합니다.
- AWS CLI 설정:
- AWS CLI를 설치하고,
aws configure
명령을 통해 Packer가 AWS와 연결할 수 있도록 기본 설정을 완료합니다.
- AWS CLI를 설치하고,
Packer로 AWS AMI 이미지 생성하기
1. Packer 설정 파일 작성
Packer 설정 파일을 작성하여, 어떤 소스 이미지에서 시작할지, 어떤 프로비저닝 단계를 거칠지, 결과적으로 어떤 AMI 이미지를 생성할지를 정의합니다. 설정 파일은 보통 build.pkr.hcl
과 같은 이름으로 생성하며, 주요 내용은 다음과 같습니다:
# build.pkr.hcl
# 1. 변수 정의
variable "aws_region" {
type = string
default = "us-west-2"
}
variable "instance_type" {
type = string
default = "t2.micro"
}
# 2. 빌드 소스 정의
source "amazon-ebs" "example" {
region = var.aws_region
instance_type = var.instance_type
source_ami_filter {
filters = {
virtualization-type = "hvm"
name = "amzn2-ami-hvm-*-x86_64-gp2"
root-device-type = "ebs"
}
most_recent = true
owners = ["123456789012"]
}
ami_name = "packer-example-{{timestamp}}"
}
# 3. 프로비저닝 정의
build {
sources = ["source.amazon-ebs.example"]
provisioner "shell" {
inline = [
"sudo yum update -y",
"sudo yum install -y httpd",
"sudo systemctl enable httpd",
"sudo systemctl start httpd"
]
}
}
이 예제에서는 Amazon Linux 2 AMI를 기반으로 t2.micro
인스턴스 타입을 사용하여 새로운 이미지를 생성합니다. provisioner
블록에서는 Apache 웹 서버를 설치하고 활성화하는 예제 명령어를 포함하고 있습니다.
2. 변수 파일 작성 (선택 사항)
빌드 설정을 유연하게 관리하기 위해 variables.pkrvars.hcl
파일을 작성하여 변수 값을 외부에서 정의할 수 있습니다.
# variables.pkrvars.hcl
aws_region = "us-east-1"
instance_type = "t3.small"
3. Packer 빌드 실행
설정 파일이 준비되었으면, 다음 명령어를 실행하여 AMI 이미지를 생성할 수 있습니다:
packer init .
packer validate .
packer build -var-file=variables.pkrvars.hcl build.pkr.hcl
위 명령어를 통해 Packer
는 설정된 소스 AMI에서 인스턴스를 생성하고, 지정된 프로비저닝을 거쳐 최종적으로 새로운 AMI 이미지를 만듭니다. 이 과정에서 Packer는 자동으로 생성된 인스턴스를 종료하고 정리해 줍니다.
AMI 이미지 확인
Packer 빌드가 성공하면 AWS 콘솔에서 생성된 AMI 이미지를 확인할 수 있습니다. 이를 통해 동일한 설정으로 여러 환경에 배포할 수 있는 이미지를 쉽게 재사용할 수 있습니다.
이번 블로그에서는 Packer를 이용해 AWS AMI 이미지를 자동으로 생성하는 방법을 알아보았습니다. Packer를 활용하면 클라우드 인프라에서 일관성 있는 배포 환경을 구성하고, 이미지 생성 과정을 효율적으로 자동화할 수 있습니다. Packer로 구축한 이미지는 CI/CD 파이프라인에서 쉽게 통합할 수 있어, DevOps 프로세스를 더욱 간소화하고 빠른 배포를 지원합니다.
'IT > 네트워크' 카테고리의 다른 글
[네트워크] GSLB와 AWS Route 53 비교 (3) | 2024.11.13 |
---|---|
[네트워크] 통신사별 공개 DNS서버 (+google) (0) | 2024.11.07 |
[네트워크] Proxy server와 NAT차이 (0) | 2024.10.29 |
[네트워크] Proxy server 란? (reverse proxy, forward proxy) (0) | 2024.10.29 |
[네트워크] NAT(Network Address Translator)란?? (0) | 2024.10.25 |