マシン・イメージを自動構築し、作業効率を高めるPacker入門
DigitalOceanとAWSの両方に展開する方法
Packerは、複数の環境に同時にビルドすることもできます。例えば、AWSの複数リージョンでAMIを作る必要がある場合や、DigitalOcean等、ほかの環境のマシン・イメージを作成したい場合です。これまではそれぞれの環境にあわせて準備をした上で、マシン・イメージを作る必要がありました。しかしPackerがあれば、共通したプロビジョニングを行えるだけでなく、複数の環境を並列に処理しますので、時間の節約にもつながります。
例えばDigitalOceanとAWSの環境で同時にビルドするには、1つのJSONテンプレートの中に複数のビルダーを定義します。具体的にはリスト3のような記述を行います。
これまでと変わった点は「builders」で囲まれたビルダーの中に、DigitalOceanとAWSの記述があるだけです。ファイル作成後「packer build」を実行するとし、2つの環境で同時にマシン・イメージの構築作業が始まります。最終的には、図6のように同時にビルドされた結果が表示されます。
Atlasにpushしてリモートビルド
リモートビルドを実現するAtlas連携
Packerは、HashiCorpの提供するサービスのAtlasと連携させることもできます。通常、Packerを使ってマシン・イメージを変換するには、自分の手元のPCや、ネットワーク上のサーバで作業をする必要があります。そのため、常にネットワークに接続していなくてはいけません。
この問題を解決するのがPackerとAtlasの連携です。Packerは手元のテンプレートをAtlasに送信(プッシュ)し登録することで、Atlasのサービスを通して自動的にビルドを実行(リモートビルド)できます。ビルド中の情報は自動的に記録されるため、AtlasのGUIからの参照もできます(図7)。さらに、作成されたアーティファクトの情報は、そのままAtlas上でも管理できます。これにより、Atlasを通したバージョン管理や、チームや社内でテンプレートやアーティファクトを共有できるようになります。
リモートビルドを使うには
Packerのpushコマンドを使い、テンプレートの情報をAtlasに送信します。事前準備として、AtlasにログインしてAPIのトークンを取得する必要があります。Atlasにログイン後、画面右上の自分の名前をクリックし、左メニューの「tokens」をクリックします。テキスト・フォームには「Packer」などを入力し、「Generate Token」(トークン生成)をクリックします。画面上にトークンが表示されますので、控えておきます。
Packerのテンプレートには、以下のように新たに「push」の項目を追加します。
"push": { "name": "<自分のAtlasユーザ名>/packer-tutorial" }
それから「packer push -create 」を実行すれば、Atlas上にテンプレートが登録されます。
$ export ATLAS_TOKEN=<Atlasのトークン> $ packer push -create example.json
この段階ではアクセスキーが登録されていないため、まだビルドはできません。登録するにはまずAtlasの「Operations」タブをクリックし、画面上の「BUILD CONFIGURATIONS」に先ほどpushしたテンプレート名が表示されているのを確認します。そこをクリックした後「Variables」をクリックし、KeyとValueに「aws_access_key」と「aws_secret_key」を登録します。
最後に「packer push example.json」を実行すれば、以降のビルドはAtlas上で進行させられます。手元でテンプレートを更新したら、そのたびにpacker pushを行う必要がある点に注意してください。
まとめ
Packerはコマンドラインで操作するツールであり、マシン・イメージをGUIで操作するより、正確かつ迅速に行えることが分かると思います。特に何度も同じような作業を繰り返すケースでは、Packerの導入で管理や作業が楽になります。
これまでの連載では、Vagrantで開発環境を整え、Packerを使って様々な環境向けのマシン・イメージを準備するまでを見てきました。次回はこのマシン・イメージを元に、クラウドの基盤上にサーバやオブジェクト・ストレージなどを自動的に構成するTerraformをご紹介します。
※本稿は、2015年4月現在のAtlasおよびPacker v0.7.5に対して確認を行っています。
【参考文献】
Packer(アクセス:2015/04)
PACKER DOCUMENTATION(アクセス:2015/04)
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- インフラの構成管理を自動化するTerraform入門
- 開発から運用に至るフローを一体化するAtlas
- SecretもPulumiで使いこなしたい! PulumiのSecurityを試してみよう
- コード化でDevOpsを支えるHashiCorpのツールと開発背景
- 開発環境の構築・共有を簡単にするVagrant入門
- 「Pulumi Stack」とは ー Pulumiによるマルチステージ環境の構築方法
- Pulumiの最新機能「Pulumi ESC」を使ってみよう
- 3scaleの基本的な使い方
- KubernetesのConfig&Storageリソース(その1)
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう