概要
AWS OpsWorks スタックでは、Chef Supermarketで公開されているCookbooksを適用する方法もありますが、自前で作成したCustom Chef cookbooksを適用することもできます。
今回はAWS OpsWorks スタックにおいて、自前で作成したCustom Chef cookbooksを適用する方法を紹介します。
Custom Chef cookbooksの作成
test-chefという名前のPublicリポジトリを作成
test-chefという名前のPublicリポジトリを作成します。そして、下記のようなフォルダ構成にします。
naoshihoshi 10:03:00 test-chef$ pwd
/Users/naoshihoshi/test-chef
naoshihoshi 10:03:02 test-chef$ tree
.
└── hoge
└── recipes
└── default.rb
Opsworksではrecipesディレクトリ直下のdefault.rbがデフォルト呼ばれることになります。 default.rbの内容は下記の通りです。とりあえず動かしてみるだけのコードですね。
# hoge/recipes/default.rb log "Hello Chef"
ログに"Hello Chef"と出力されれば、動作していることがわかります。
AWS OpsWorksでCustom Chef cookbooksの適用
Stack Setting
OpsWorksでスタックを追加し、さきほど作成したcookbooksを適用します。

スタック作成画面で
1. Use custom Chef cookbooksをYesに変更
2. Repository URLは先ほど作成したtest-chefのリポジトリのURLを指定
Layer Setting
Layerを追加し、Recipesの変更を行います。
今回は、Setup時に先ほどのレシピを実行させたいので、このような設定になります。

gitで管理しているリポジトリの直下にあるディレクトリを設定すれば、その配下にあるrecipesディレクトリのdefault.rbが呼び出されるという仕組みです。
naoshihoshi 10:03:02 test-chef$ tree
.
└── hoge <===== このディレクトリが設定された場合、
└── recipes
└── default.rb <===== これが呼び出される
インスタンスを作成し、起動
インスタンスを作成し、起動をすると、setupで設定したレシピが実行されます。 インスタンス起動後にログがみれるので、インスタンス名をクリックし、ページ下部のログのshowリンクでログを確認します。

無事にHello Chefが表示されていますね!
任意のレシピを作成し、実行する
default.rb以外に実行したい場合は任意のファイルを作成後hoge::任意のファイル名とします。
.
└── hoge
└── recipes
├── configure.rb
└── default.rb
configure.rbを作成した場合、Layerの設定ではhoge::configureとなります。
まとめ
小さなコードではありますが、OpsWorksで自前で用意したCustom Chef cookbooksを動かすことができました。 また、レシピを複数用意して、任意のレシピを実行する方法もとてもシンプルで簡単でした。 動かし方さえわかってしまえば、あとはプロビジョニングのためのコードを書き足していくだけです!