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
でリセットしておく