【小ネタ】PackerでAMIを作成する時にAMI_IDとAMI名を付けませんか?

2018.06.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちわ、吉江です。
構築作業が楽しいです、ですがEC2インスタンスを作成するためにAMIを作っては投げ、作っては投げを繰り返して心が摩耗していることに気づきました。
なので、弊社内でユーザーが多いPackerを使用してAMIを作成するようになりました。
今度は、AMI作成作業中にふと作成されたAMIはプラットフォームがOther Linuxとなり、元々使用していたAMI_IDがわからないことに気づきました。

※このあたりの説明は尊敬出来る先輩のリンクをご参照頂ければと思います。
【小ネタ】AMIに表示されるOSについての勘違いと実際の動き

例えば、私が新しくシステム管理者になったとして、EC2のアップデートを企てたとします。
その際、Packerを使ったAMIを全インスタンスで使用されている前提で、ざっくりいつ頃のAMIを使ったEC2インスタンスなのかを知りたいという時にSSHやSSMを使ってログインして確認するしかないかと思います。

※1~2台までならsshは許せます、3台以上はSSMが使えないと一瞬にしてモチベーションは下がります

イメージとしては以下の形です。

素のAmazonLinux_AMIから作成した情報

EC2画面

AMI画面

Packerで作成したAMI情報

EC2画面

AMI画面

せめてAMI_IDかAMI名を知れると嬉しいと思いまして、Packerのドキュメントを見ると簡単にタグ情報にAMI_IDとAMI名を入れ込むことが出来るようなのでやってみました。

やってみましょう。

作業は簡単でした。
簡単に書くとbuildersに変数を入れ込むだけです。

{
    "builders":
    [
        {
            "type": "amazon-ebs",
            "ami_name": "API-{{isotime \"2006-0102-0304\" | clean_ami_name}}",
            "region": "ap-northeast-1",
            "source_ami": "ami-92df37ed",
            "instance_type": "t2.micro",
            "ssh_username": "ec2-user",
            "tags": {
                "Base_AMI_ID": "{{ .SourceAMI }}",
                "Base_AMI_NAME": "{{ .SourceAMIName }}"
            }
        }
    ],
    "provisioners": [

~ hogehoge ~

    ]
}

やったことは作成するAMIのタグにBase_AMI_IDBase_AMI_NAMEを追加しました。
それぞれのタグに{{ .SourceAMI }}{{ .SourceAMIName }}の値を入れ込むことでソースとして使ったAMI情報が入れ込まれます。

作成結果

上記の設定を入れたAMIは以下のようになります。
無事、タグ情報にAMI_IDとAMI名が入りました。

詳細はPackerのドキュメントを見ると良いかもしれません。
Build template data

最後に

自分の中の大指針である運用フェーズで少し役に立つ情報かと思いました。
入れておいて損はないと思いますので、Packerをご利用されている方は是非ご一考頂ければと。