ServicesChefPackerProvisioningクラウドこんにちは。自称Chef導入委員長の国平です。立て続けの投稿になってしまいますが、今回はPackerの紹介記事を書かせて頂きます。仮想マシンイメージの作成ツールであるPackerがChef-Soloからのマシンイメージ作成に対応しました。AMIを作成してみます。Packerとは仮想環境のマシンイメージを作ってくれるツールです。一つの設定を元に複数のプラットフォームに対してマシンイメージを作成出来ます。シェルスクリプトやChef-Soloを使ってマシンイメージを構築します。ChefやAnsibleの様なプロビジョニングフレームワークはマシン環境の構築にとどまらず、EC2の操作などかなり幅広く利用出来ます。反面、それらのツールで実行する役割を増やすほど設定が複雑化してしまいます。Packerを利用するとマシンイメージの作成をPackerにまかせることができ、ユーザはマシン設定に集中する事が出来ます。Packerの利点Packerを利用する事で以下のメリットを得られます。複数プロバイダー間の連携テスタビリティの確保インフラ構築の高速化Packerを利用する事で、そのマシンイメージの作成コストを下げることができ、マシンイメージを起動するだけで、利用可能な環境を手に入れる事が出来ます。VMWareなど複数のプラットフォームに対応しています。Packerの設定一つで、AWSとローカルマシンの両方に同じ設定を行ったマシンイメージを作成する事が出来ます。それぞれのプラットフォーム間の違いは、Packerが吸収してくれるので、最終的なマシンイメージを統一して用意する事が出来ます。テスタビリティの確保Packerを使う事で上記のように複数のプラットフォームにマシンイメージ作成できます。そのため、一つの環境でテストを行う事で、他の環境が期待される結果になっている事を保証されます。個人的に気に入った機能が、fixコマンドです。Packerがバージョンアップした際に、古いバージョンのJSONを新バージョンに変換してくれます。変換結果は、標準出力に吐き出されるので、Linuxであれば以下のコマンドで、最新のJSONを取得できます。new.json一度書いた設定が動くことが保証される、もしくは、容易に動く状態にできるというのは、運用が長期化したり、運用するサーバ設定が複数ある場合に非常に助かると思います。インストールUNIX/Linuxでは、~/packerもしくは/usr/local/packerにインストールすることが推奨されています。インストールするためには、公開されているzipファイルをhttp://www.packer.io/downloads.htmlからダウンロードし、解凍しパスを通します。Linuxマシンに対してインストールを行うには以下のコマンドを実行します。ご利用の環境に応じて、適宜ダウンロードURLは変更してください。PATH=$PATH:/usr/local/packer正常にインストールが完了し、パスが通っていれば、packerコマンドを実行すると以下のように、表示されます。format.Macの場合は、Homebrewを使ったインストールも可能なようです。詳しくは、公式サイトを参照してください。使ってみるPackerを使って、NginxをインストールしたAWSのAMIを作成してみます。以下のJSONを作成します。どの様なマシンイメージを作成するかを設定します。amazon-ebsにし、resionなどの設定をしています。secret_keyは、それぞれAWSアカウントで作成して入力します。作成するマシンイメージに対して行う処理を設定します。Packerの動作を確認するために、typeにshellを指定し、シェルスクリプトを実行してNginxをインストールしてみましょう。JSONを作成したら以下のコマンドを実行します。ami-shell.jsonこれでAMIの作成が開始されます。AWSのConsoleから、EC2が起動する事が確認出来ると思います。EC2が起動すると、provisionersで指定した通りのシェルが実行されます。yumコマンドが実行されNginxがインストールされると、AMIの作成に入ります。最終的にAMIが作成されると起動したEC2インスタンスはterminateされます。ami_nameに指定したように、”Packer-“後にタイムスタンプが追加された名前のAMIが作成されます。ProvisionarsにChef-Soloを利用するPackerのバージョン0.3.6からProvisionersにChef-Soloを指定出来るようになりました。Recipeを用意するまずはChefRepositoryを用意します。今回のお題もまたまたNginxをソースからインストールします。レシピの準備を手軽に実施するために、Berkshelfを利用してChefRecipeを取得します。Berkshelfについては、以前の記事や、以前の発表資料で紹介しています。Recipeが依存するRecipeが用意されます。実行後はpacker-sampleフォルダ内は以下の状態になっていると思います。...Packer設定ファイルの用意Chefリポジトリが用意出来たので、次にPackerの設定ファイルを記述します。作成するので、以下のようなファイルを作成します。Chef-Soloを利用するので、typeにchef-soloを指定し、cookbookのパスや、run_list、attributeを書いたJSONフィールドを設定しています。まとめ実は以前にPacker+Chef-Soloと同じ事をしてくれるフレームワークを自作してたりしてました。(ec2_automation)しかし、当たり前ですがPackerの方がずっと使いやすいです。複数のプラットフォームに対応Chef-Solo以外のProvisionerも利用可能など、Packerの優位な点が非常に多くあります。非常に素性がよく、設定も書きやすいので環境構築の自動化と高速化に取り組まれている方々にはPackerは非常にお勧め出来るツールです。先日バージョン0.3.7がリリースされ、新たにPuppetをProvisionerとして利用出来るようになりました。開発が活発でこれからどんどん便利になって行く事が期待出来ます。