📷
HCLを使ったPackerとAnsibleでAMIを作成
事前準備
- Packerのインストールはこちら
- Ansibleのインストールはこちら
-
こちらを参照してAWS CLIのCredentialsの設定もしておいてください。
※AWS CLIを使用したことがある方は既に設定済みだと思います。
Packer実行用のファイルを作成
まずは sources.pkr.hcl
を作成してAMIを作成する際に利用するsourceを定義します。
sources.pkr.hcl
source "amazon-ebs" "test" {
source_ami_filter {
filters = {
name = "amzn2-ami-hvm-*-x86_64-gp2"
}
owners = ["137112412989"]
most_recent = true
} //公式が用意しているAmazon Linux2の最新AMIをベースにします。
region = var.region // 変数
instance_type = var.instance_type // 変数
ssh_username = "ec2-user"
ssh_timeout = "5m"
ami_name = "test-ami-{{timestamp}}" // 末尾にtimestampが付与されます。
}
次に build.pkr.hcl
を作成してビルドの設定をします。
sourceに上記 sources.pkr.hcl
で定義した amazon-ebs とスクリプトにAnsibleを使用するように設定しています。
後ほど「/scripts/main.yaml」を用意します。
build.pkr.hcl
build {
sources = [
"source.amazon-ebs.test"
]
provisioner "ansible" {
playbook_file = "./scripts/main.yaml"
user = "ec2-user"
extra_arguments = ["-vvvv"]
}
}
variables.pkr.hcl
を作成して先ほど使用していた変数の定義をします。
variables.pkr.hcl
variable "region" {
default = "ap-northeast-1"
}
variable "instance_type" {
default = "t2.micro"
}
AnsibleのPlaybookを作成
/scripts
ディレクトリを用意して、その中にAnsibleのPlaybookを用意します。
「hosts」は下記のようにdefault
と設定してください。
今回はcreate-file
というロールを作成します。
/scripts/main.yaml
- hosts: default
remote_user: ec2-user
become: yes
roles:
- create-file
/scripts
に下記のようにディレクトリとファイルを用意します。
├── sources.pkr.hcl
├── build.pkr.hcl
├── variables.pkr.hcl
├── variables.json
└── scripts
└── roles
└── create-file/
├── tasks/
│ └── main.yaml
└── files/
└── test.txt
test.txt
の中身は適当に何か記載しておいてみてください。
test.txt(例)
Hello Packer and Ansible!
では/scripts/create-file/tasks
ディレクトリのmain.yaml
に/tmp
ディレクトリにtest.txt
をコピーするような内容を記載します。
/scripts/create-file/tasks/main.yaml
---
- name: Create Textfile
copy:
src: test.txt
dest: /tmp
完了したら sources.pkr.hcl
等が配置されているディレクトリで、Packerのビルドを行いましょう。
$ packer build .
実行されて下記のように表示されたらPackerの実行は成功です。AMIが作成されるのを待ちましょう。
==> amazon-ebs.test: Creating AMI test-ami-****** from instance i-**********
amazon-ebs.test: AMI: ami-**********
==> amazon-ebs.test: Waiting for AMI to become ready...
下記のように表示されたらAMIの作成は完了です。
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs.test: AMIs were created:
ap-northeast-1: ami-**********
作成されたAMIを使用して新しくインスタンスを起動してみてください。
新しく作成されたインスタンスに/tmp/test.txt
が作成されているのが確認出来たら成功です🎉
Discussion