본문 바로가기

DevOps

[Packer] 패커로 AMI(이미지) 만들기

Packer란? 하나의 소스 설정으로부터 여러 여러 플랫폼에 대해 동일한 머신 이미지(AMI)를 생성할 수 있는 오픈 소스 도구입니다.

Windows에 패커를 설치해봅시다.

아래 명령어를 실행하기 전에 Windows용 무료 오픈 소스 패키지 관리 시스템인 Chocolatey이 설치되어 있어야 합니다.

$ choco install packer

Packer를 설치한 후 명령 프롬프트를 열고 설치가 제대로 됐는지 확인합니다.

$ packer
Usage: packer [--version] [--help] <command> [<args>]

Available commands are:
    build           build image(s) from template
    console         creates a console for testing variable interpolation
    fix             fixes templates from old versions of packer
    fmt             Rewrites HCL2 config files to canonical format
    hcl2_upgrade    transform a JSON template into an HCL2 configuration
    init            Install missing plugins or upgrade plugins
    inspect         see components of a template
    validate        check that a template is valid
    version         Prints the Packer version

packer를 찾을 수 없다는 오류가 발생하면 PATH 환경 변수가 제대로 설정되지 않은 것입니다. 환경 변수에서 Packer가 설치된 디렉토리를 포함시키면 됩니다.

이제 패커로 이미지(AMI)를 만들어 봅시다.

먼저, 패커 구성 파일을 작성해야 합니다. aws-ubuntu.pkr.hcl 파일을 만듭니다.

packer {
  required_plugins {
    amazon = {
      version = ">= 0.0.2"
      source  = "github.com/hashicorp/amazon"
    }
  }
}

source "amazon-ebs" "ubuntu" {
  ami_name      = "learn-packer-linux-aws"
  instance_type = "t2.micro"
  region        = "us-west-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 {
  name    = "learn-packer"
  sources = [
    "source.amazon-ebs.ubuntu"
  ]
}

위 코드는 us-west-2 리전에서 AWS Ubuntu AMI를 구축하는 Packer 템플릿입니다.

코드를 간단히 설명하면,

packer 블록에는 Pakcer 버전을 포함한 설정이 들어있습니다.

source 블록에는 베이스가 될 이미지에 대한 설정을 적습니다.

build 블록에는 Packer가 시작된 후 EC2 인스턴스로 수행해야 하는 작업들을 적습니다.

위 코드로 AWS에 AMI를 생성하려면 AWS 자격 증명을 Packer에 제공해야 합니다.

$ export AWS_ACCESS_KEY_ID="<YOUR_AWS_ACCESS_KEY_ID>"
$ export AWS_SECRET_ACCESS_KEY="<YOUR_AWS_SECRET_ACCESS_KEY>"

다음 명령어로 Packer를 빌드합니다. 순서대로 입력해야 합니다.

# Packer 구성 초기화
$ packer init .

# Packer 템플릿 형식 지정 및 유효성 ㄱ머사
$ packer fmt .
$ packer validate .

# 이미지 빌드
$ packer build aws-ubuntu.pkr.hcl

AWS AMI 페이지를 방문하여 Packer가 AMI를 성공적으로 구축했는지 확인하십시오.