OpsWorks + CodeDeploy = Useful !?
AWSにはアプリケーションのデプロイが実施できるサービスととして Elastic Beanstalk をはじめ、OpsWorks や CodeDeploy があり、それぞれ特徴があるためどれを選択するか悩みどころとなります。
それぞれのサービスには良い点があるため一つに絞り込むことができない、とお嘆きの場合、いっその複数のサービスを組み合わせて使うのはいかがでしょう。
本ドキュメントでは、OpsWorks + CodeDeploy の組み合わせについて、メリットをまとめました。また、実際の使い方について一例を挙げさせていただきましたので、ご参考になれば幸いです。
メリット・デメリット
OpsWorks + CodeDeployを組み合わせるメリットとしては、次のような使い方ができるようになります。
- インスタンスのOS設定やミドルウェア設定については、supermarket.io のパブリック Cookbook や独自の Cookbook が使用できる。既に Chef 資産を持っている場合は、そのまま活用することができる
- CodeDeployのデプロイ機能には OneAtTime や AllAtTime など、豊富なオプションを選択できる。appspec.yml によるデプロイはスクリプトを走らせるだけのシンプルな構成のため、blue/green Deployment によるシンプルなアプリのデプロイには十分であり、扱いやすい場合もある
デメリットとしては、次のような点が考えられます。
- OpsWorks と CodeDeploy の使い方を両方マスターする必要があるため、学習コストが増加するかもしれない
- インスタンス上に opsworks-agent と codedeploy-agent の2つがインストールされるため、何となくリソース消費の観点ではもったいない (どちらも、それほどリソースを消費するソフトウェアではありませんが..)
構築手順
Opsworks + CodeDeploy の構築手順について解説します。
基本的な考え方としては、インスタンスのOS設定やミドルウェア設定については OpsWorks の Chef recipe にて実施し、アプリのデプロイについては CodeDeploy を用います。OpsWorks ではインスタンスに tag が設定されるので、こちらを用いて CodeDeploy のデプロイ先を識別させます。
codedeploy-agent インストールのレシピを作成
codedeploy-agent のインストールについては、Chefレシピで実施します。
次のような Cookbook を作成します。なお、本ドキュメントでは Chef12 を使用します。おそらく、Chef11.x系についても同様の構成で動作すると思います。
codedeploy/
├── Berksfile
├── metadata.rb
└── recipes/
└── agent-install.rb
source "https://supermarket.getchef.com"
name 'codedeploy'
recipe 'codedeploy::agent-install', 'Fetches, installs, and starts the AWS CodeDeploy host agent'
remote_file "#{Chef::Config[:file_cache_path]}/codedeploy-install.sh" do
source "https://s3.amazonaws.com/aws-codedeploy-us-east-1/latest/install"
mode "0744"
owner "root"
group "root"
end
execute "install_codedeploy_agent" do
command "#{Chef::Config[:file_cache_path]}/codedeploy-install.sh auto"
user "root"
end
service "codedeploy-agent" do
action [:enable, :start]
end
sogabe@sherco:~/cloud/aws.int/ops
上記ファイルを作成したら、zipコマンドにて固めて S3 にアップロードします。または、github へアップロードしても構いません。
zip -r codedeploy-cookbooks.zip codedeploy
aws s3 cp codedeploy-cookbooks.zip s3://(bucketname)/codedeploy-cookbooks.zip
OpsWorks StackおよびLayerの作成
つぎに、OpsWorksマネジメントコンソールにてStackおよびLayerを作成します。Custom Cookbook には、先ほど作成したリポジトリを指定します。また、Layer の設定にて、Setup に "codedeploy::agent-install" を追加します。
インスタンスを追加して起動すると、codedeploy::agent-install のレシピが実行され、codedeploy-agent がインストールされます。
CodeDeployによるデプロイの実施
つぎに、CodeDeployの設定をします。CodeDeployについては、特に特別な設定をする必要はなく、デプロイグループの設定にて次のような tag を指定します。
- キー
- opsworks:stack
- 値
- (Stack name)
上記の例では Stack name を用いましたが、Layer name を使用することもできます。