最近Goを書こうかなと思ってとりあえず A Tour of Goを一通り進めた
ただやっぱり実際にものを作りながら身につけたいので何か作ることにした
最近業務でも個人でも使っているPackerがGoで作られれたので勉強がてらプラグインを作ってみる
Packerとは?
HashiCorp製でGCPやAWSなどのプラットームむけのマシンイメージを作成するためのコマンドラインツール
僕はDocker Imageを作成する時やAWSのAMIを作成する時に使用してたりする
PackerではTemplateと呼ばれるJSONファイルに中身を記載していきます
詳しくはこちら
Packerのプラグインについて
Packerでは
builders
と呼ばれる作成するマシンイメージの元になるイメージなどを定義したものprovisioners
と呼ばれる作成するマシンイメージに必要なパッケージをインストールするものpost-processors
と呼ばれる作成したイメージをどこかにアップロードしたりする後処理
を定義することが出来るがそれぞれにはPacker側でサポートされているものがあります (例: provisioners
でいえばChefやAnsible)
これらはユーザー自身が拡張してプラグインを追加できるように設計されています
プラグインを作るにあたって
まず既に作成されているプラグインなどを探す時は「packer plugin x」とググって探すそうです
プラグインのインストールについてはバイナリの名前をpacker-TYPE-NAME
にしてあげて適切な場所に配置する必要があります
例えば名前に関してで言うとamazon-ebsのbuilderプラグインを作るとしたらpacker-builder-amazon-ebs
みたいな
インストールする場所については下記の順番でよみこんでいき同じ名前のものがあった場合は後から見つかったものが使われるとのこと
- packerがあるディレクトリもしくはPATHが通ったディレクトリ
~/.packer.d/plugins
配下 windoewsだと%APPDATA%/packer.d/plugins
- カレントディレクトリ
プラグインについてはいずれも対応するinterfaceが存在しているのでそれを実装していく
開発をしていく中ではPACKER_LOG
を設定することで標準出力が出るので便利そう
プラグイン開発中にテストするためにはコンパイルされたプラグインのパスを指定すると良いらしい
{ "builders": { "hoge": "/home/packer-plugins/packer-builder-hoge" } }
Goのアプリケーションはプラットフォームごとに異なるのでクロスコンパイルする必要があり下記がオススメらしい
次からは実際にプラグインを作っていこうと思う