All Articles

Packer で作った AMI を EC2 で動かすまで

Packer とは

HashiCorp が提供していツール。定義ファイルから、複数のプラットフォームで利用できるマシンイメージを作成できる。
Terraform は infra の構成管理、Packer は構成に絡むマシンイメージを管理するのに役立つ。更に言うと、マシンイメージ内部の冪等性は Ansible で担保できる。繰り返しになるが、もう少し噛み砕くと Terraform はマシンの管理/デプロイ。Packer はどんなマシンを作るかの管理。Ansible はマシンをどうやって作るかの管理を担うという理解でいる。

Hello Packer

Packer Tutorial を実行。aws-cli を扱うための認証はしている前提。

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        = "ap-northeast-1"
  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"
  ]
}
$ packer init .
$ packer build aws-ubuntu.pkr.hcl

ここまでで EC2 の AMI に learn-packer-linux-aws が作られる。

deploy してみる

terraform を使って AMI を EC2 に展開してみる

$ tfenv install
$ tfenv use 1.0.11

ec2.tf

provider "aws" {
  region = "ap-northeast-1"
}
resource "aws_instance" "web" {
  ami           = "<< created ami image id >>"
  instance_type = "t2.micro"
  tags = {
    Name = "packer-tutorial"
  }
}
$ terraform init
$ terraform apply

ec2 ができるので、確認できたら ec2.tf の下記削除して再度

resource "aws_instance" "web" {
  ami           = "<< created ami image id >>"
  instance_type = "t2.micro"
  tags = {
    Name = "packer-tutorial"
  }
}
$ terraform apply

でリセットしておく

参考