📦
HashiCorp PackerでAmazon マシンイメージ (AMI) を作る時のおすすめ設定
これはなに
packerでAmazon マシンイメージ (AMI) を作る時のおすすめ設定です。
同じAMI名でも上書きして作る
デバッグ中など同じAMIを何度も作る時に向けて入れておくと良い。
force_deregister と force_delete_snapshot
運用の中ではAMI名にコミットIDとかを付与すると思うので、あくまでデバッグ向け。
設定
## Source
source "amazon-ebs" "app" {
// snip
force_deregister = true
force_delete_snapshot = true
}
Ansible実行ユーザとしてec2-userを指定する
CICDの中でPackerを実行してAMIを作る時に設定する。
user
CICDの中でPackerを実行してAMIを作るとrootユーザなどでEC2へSSHしてしまう。
BaseAMIとするAmazonLinux2には(SSHログインできるユーザとして)ec2-userしか存在しないのでAMIを作るときはuserとしてec2-userを指定する
build {
sources = [
"source.amazon-ebs.example"
]
provisioner "ansible" {
playbook_file = "./playbook.yml"
user = "ec2-user" // Here!!
}
}
AMI名およびNameタグにタイムスタンプを付与する
設定
locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
}
source "amazon-ebs" "ubuntu" {
ami_name = "packer-ami-${local.timestamp}"
// snip
tags = {
"Name" = "packer-ami-${local.timestamp}"
}
クロスアカウント共有のAMIを作る
たとえば検証環境で作ったAMIをステージングがプロダクションにAMI共有&AMIコピーする時。
ami_users
この設定を入れておくと、指定したAWSアカウント向けに共有設定がされる。
共有先のAMI画面でプライベートを選択すると、検証環境で作成したAMIを参照することができる。
snapshot_users
この設定を入れておくと、指定したAWSアカウント向けにEBSの共有設定がされる。
共有先で共有されたAMIをコピーすることができる。
この設定が不足していると、共有先で共有されたAMIをコピーする時、「You do not have permission to access the storage of this ami」というエラーが発生する。
設定
下記2個の設定を追加する。
## Source
source "amazon-ebs" "app" {
// snip
// AMI Share
ami_users = [
"123456789012", // Stg
"123456789012"] // Prd
snapshot_users=[
"123456789012", // Stg
"123456789012"] // Prd
}
参考
Packerのドキュメントはなぜか縦にめちゃ長いけど色々書いてあるので読みましょう。
Discussion