はじめに
2015年12月にリリースされたOpsWorksのChef12対応(OpsWorks Chef 12 for Linux)、とても便利になりました。chef.ioのblog記事にて紹介されていたDjangoのdeployを早速試してみました。
Chef Community Cookbooks with AWS OpsWorks Chef 12
便利になった点
まず、何が嬉しいのか、便利になった点をまとめます。
- OpsWorks内部で使用しているCookBookとの、Namespaceの衝突が発生しない
- Chef12以降でないと動作しないCommunity Cookbookが使えるようになった
- Chef searchを用いてAWSのリソース(Stack、Layer、インスタンス、ELB、RDSなど)を取得できるようになった
なお、従来から利用できるChef11 Stackではbuilt-in LayerとしてRails、Node.js、PHP、Java等やMySQL、HAProxy等が提供されていましたが、Chef12 for Linuxでは提供が無くなりました。そのかわりに、SupermarketなどのCommunity Cookbookを使う形で様々なアプリをDeployできるようになったので、Chefの一般的な使い方により近づいたと言えます。
今回は、Namespaceの衝突が発生しなくなった点を体感するべく、blog記事にある Django + dpaste のdeployを試してみます。
Djangoのアプリをdeployしてみる
sample wrapper Cookbook をSupermarketからダウンロードする
git clone git@github.com:chef-cookbooks/opsworks-linux-demo-cookbook-django.git
Recipeの中身を確認
opsworks-linux-demo-cookbook-django.git の中身を確認すると、次のCookbookがCommunity Cookbook として依存(depend)していることが分かります。
- application_python
- build-essential
- poise-python
実際にOpsWorksを用いてdeployする
OpsWorksを用いたdeployはとても簡単にできますが、注意点としては、Community Cookbookを含んだ形のCookbookアーカイブを事前にberkshelfにて作成した上でCookbookのRepositoryにアップロードする必要があります。
- berks package コマンドを実行します
- ファイル(cookbooks-(timestamp).tar.gz)が生成されるので、S3またはgithubのCookbookのRepositoryにアップロードします
- OpsWorksのStackをCustom Cookbookを有効にして作成します
- Custom Layerを作成します
- recipe(opsworks-linux-demo-cookbook-django)をSetupに追加します
- appを作成します。ソースコードに、https://github.com/bartTC/dpaste.git を指定します
- インスタンスを追加し、起動します
- http://(Public IP of your instance)/ にアクセスし、dpaste が動作していることを確認します
application_pythonを使うことで、とても簡単にDjangoのアプリをインストールすることができました。