TechBlogSideCIのエンジニアによる技術ブログです。Otherこんにちは、家から捕まえられるポケモンだけを捕まえて僕のポケモンGoは終了しました。@wata727です。弊社ではインフラ自動化の一環として、AMIの作成にPackerを利用しています。PackerはAMIを作るまでは自動化してくれるものの、作成されたAMIは残り続け、使わなくなった古いAMIは手動で削除しなくてはいけません。HashiCorp.と述べており、Atlasを使ってくれという立場です。いえ、そこまで大げさな話でもないし、毎回手動で削除しないといけないのは面倒臭い、そうだ、Packerにはプラグインの仕組みがあるじゃないか、プラグインを作ろう、となったのが今回の経緯です。Packerプラグインの仕組みPackerはGo言語で作られており、本体は単独で実行可能なバイナリとして提供されています。Packerのプラグインも同様にGo言語で作成し、単独のバイナリとして提供されます。内部的には、RPCを使ってPacker本体とやり取りをすることで、独自の処理を追加することができます。詳しくは公式のドキュメントに書いてありますが、大まかに言うと以下のような処理をmainに書いて、自作プラグインの処理を登録します。server.Serve()}github.com/mitchellh/packer/packer/pluginがPackerのプラグインを作る上で必要なものをすべて持っているので、基本的にはこれをimportすれば動作させることができます。後は追加したい処理をプラグインのインターフェイスを満たすようにゴリゴリ実装します。プラグインの種類はいろいろありますが、今回はAMIを作成したタイミングで、古いAMIを削除できれば良いので、最後に処理を挟むpost-processorプラグインを選択しました。作ったもので、完成したものがこちらになります。名前が異常に長いですが、packer-post-processorまでは命名規則なのと、他のpost-processor、amazon-importなどにあわせた結果、こんな名前になりました。いい名前があったかもしれません...インストールビルド済みのバイナリをダウンロードしてきて~/.packer.d/pluginsに配置するだけで動作します。最初はpluginsディレクトリが無いこともあるので、その場合には作ってください。~/.packer.d/plugins使い方post-processorとしてamazon-ami-managementを以下のように指定します。}]}AMIを作成するときにAmazon_AMI_Management_Identifierをキーに、任意の値のタグを設定しておけば、そのタグの値を指定することで世代管理の対象とすることができます。何世代まで維持するかどうかはkeep_releasesで指定できます。現状はgomockを使ってSDKのモックを自動生成してそれを使っているのですが、もっと良い方法があればぜひ知りたいです。ルールを見ていこうの会あけましておめでとうございます。