AWS OpsWorksでカスタムChefレシピを実行をする方法
AWSソリューションアーキテクトの舟崎です。
今回は自分で作成したChefレシピ単体をAWS OpsWorks(以下、OpsWorks)の環境で実行する方法について紹介します。こちらの方法は、作成したカスタムChefレシピを実際にインスタンス上で1つずつ実行して、問題なく動くかの動作テストや、あるいはレシピが正しく実行できないときには、そのトラブルシューティングなどの用途に使えます。その手順の大まかな流れは以下です。
- カスタムChefレシピを作成
- ソースコードリポジトリに作成したChefレシピをpush
- OpsWorks Stack / Layer / Instanceを作成、起動
- 作成したカスタムChefレシピをInstanceにチェックアウトさせて実行
以下詳細です。
1.カスタムChefレシピの作成
今回はシンプルにhello.txtをホームディレクトリに作成するだけの簡単なChefレシピを作成します。まずはcookbookおよびrecipe用のディレクトリを作成します。
$ mkdir –p ~/site-cookbooks/hello/recipes
通常はknifeコマンドを使ってcookbook用のディレクトリを作成します。ですが、今回使用するのはcookbook名/recipesディレクトリのみのため、mkdirで作成しています。
次にレシピファイルを作成します。
$ vi ~/site-cookbooks/hello/recipes/default.rb
default.rbファイルの中身は以下です。
file "/home/ec2-user/hello.txt" do action :create end
2.ソースコードリポジトリにChefレシピをpushする
今回はGitHubを利用しています。GitHub上にリポジトリは作成済みとします。
まず、site-cookbooks用ディレクトリに移動して、git初期化します。
$ cd ~/site-cookbooks
$ git init
次にgit addして、コミットします。
$ git add .
$ git commit –m “first commit”
リモートのGitHubのリポジトリを追加してpushします。
$ git remote add origin https://github.com/xxxxxx/test-cookboooks.git
$ git push -u origin master
GitHubの場合、GItHub用のユーザー名とパスワードを入力すればpushが成功します。
3.OpsWorks Stack / Layer / Instanceを作成、起動する
OpsWorks Stackを作成します。
Stackの設定をします。Name、Region、Default Operating System、Default SSH Keyを設定します。今回はAmazon Linuxで、後程SSHでログインもしてみるため、SSH keyを設定して、Advancedを選択します。
Advancedをクリックして、Use custom Chef cookbooksをYesにします。Repository URLに今回はhttps://github.com/xxxxx/test-cookbooks.gitを指定します。
Stack作成後にLayerを作成します。
Layerの設定をします。今回はStatic Web ServerのLayerを作成します。
Layerを追加後、インスタンスを追加します。
インスタンスの設定で、今回は後程SSHでのログインを試みるため、SSHのキーを指定しておきます(ログインの必要がない場合は、指定不要です)。
4.カスタムChefレシピを実行する
インスタンスのステータスがonlineになったら、Stackの画面に移動します。
Run Commandの画面でUpdate Custom Cookbooksを選択して実行します。これにより、インスタンス内部に作成したカスタムChefレシピが、指定したソースコードリポジトリから展開されます。
Update Custom Cookbooks実行が成功したことを確認します。
後に、今度は同様にStackの画面からRun Commandを選択して、以下のようにExecute Recipeを選択して実行します。
helloレシピの実行が成功したことを確認後、実際にインスタンスにSSHでログインして/home/ec2-userディレクトリにhello.txtが作成されていることを確認してみてください。レシピの実行が成功していることを実際のファイルを見て確認できるはずです!
ご参考までにChefのレシピは、インスタンス内部の/opt/aws/opsworks/current/site-cookbooks/に格納されています。こちらはChefレシピのキャッシュとなっており、ソースコードリポジトリ側でChefレシピの更新があった場合には、適宜Update Custom Cookbooksを実行することで、インスタンス内部に更新済みのChefレシピが展開されます。
是非今回のカスタムChefレシピ実行を試してみて頂ければと思います!
コメント