はじめに
上の記事で CodeDeploy を触っていてソースコードが更新されたら自動でデプロイする仕組みは無いものかなと調べていたら CodePipeline ですぐに出来そうだったので試してみた。既に S3 のイベント通知機能と Lambda を利用した例は以下のように紹介されているが、CodePipeline を利用すれば Lambda ファンクション書かずとも実現出来るのは非常に有り難い。
CodePipeline で CodeDeploy でのデプロイを自動化する
CodePipeline とは
CodePipelineはソフトウェアの継続的デリバリーサービスです。皆さんのソフトウェアをリリースするために必要なステップをモデル化し可視化し自動化することができます。コードがチェックインからビルドされテストされ、そしてデプロイされるまでの全てのステップを定義し完全にカスタマイズすることができます。
こちらより抜粋。
ざっくり言うと...
- アプリケーションの継続的デリバリーにひつような各種要素をモデル化
- モデル化した要素を自由に組み合わせることが出来る
- さらに組み合わせた手順を自動化することが出来る
うーむ、自分で書いて分かり辛いけど、以下のような例えで...
GitHub に push した時点で CodePipeline が検知し、ステージング環境へデプロイ、デプロイした環境に対してテストを実施、テストに問題なければ本番環境へデプロイという作業を一気通貫に実施してくれるサービスと言える。
ざっくり手順
既に CodeDeploy に登録しているアプリケーションを利用するという前提で...
- S3 バケットのバージョニングを有効にする
- 既に CodeDeploy 作成済みのアプリケーションと Deployment group を利用する
- Pipeline を作成する
尚、詳細な手順は以下の Blog が詳しい。
でお値段は?
尚、CodePipeline の利用料金は...
アクティブなパイプライン毎に毎月$1が課金されます(最初に1つはAWS無料枠として課金されずに利用可能です)。アクティブなパイプラインとは1ヶ月の間に少なくとも1度のコードの変更が流れたものになります。
とあるので Pipeline 1 個 1 ドルと考えると良いのかもしれない。
どこのリージョンで使えるの?
現時点(2015/07/15)では...
CodePipelineは今から利用可能であり今日からUS East (Northern Virginia)リージョンで使い始められます。また他のリージョンへの拡張も(いつもどおり)時間をかけて行っていく計画です。
ヴァージニアのみで利用可能となっている。
駆け足で CodePipeline
詳しいことは追々調べるとして...
駆け足で(スクショ)で Pipeline のセットアップ振り返る。
尚、構成は上記の通り前回の記事の環境を流用。
事前にソースコードを置く S3 バケットのバージョニングを有効にする
Pipeline を作成
Source location を指定
CodeDeploy で利用した S3 バケットを指定する。
Build を指定
今回は Build は行わないが、Jenkins でのビルドを行うことが出来る。
Beta 環境へのデプロイを指定
Deployment Provider として CodeDeploy を指定する。
CodeDeploy を指定すると既存のアプリケーションと Deployment Group を指定することが出来る。
Service Role を指定
Pipeline に AWS リソースの利用を許可する為の権限を付与する。
設定を確認して Pipeline の作成完了
以下のような画面が表示される。
デプロイの自動化
早速...
デプロイの自動化を試してみたい。期待するのは S3 にソースコードを push したら(aws deploy push
したら)勝手に Deploy が始まってくれること。
S3 へ push
以下のような変更を加える。
$ cat scripts/install.sh echo "install" echo "installed" > /tmp/installed.log
S3 へ push する。
$ aws deploy push --application-name MyApp --s3-location s3://inokappa-codedeploy/MyApp.zip --source ./ --region us-east-1
以下のように出力される。
To deploy with this revision, run: aws deploy create-deployment --application-name MyApp --s3-location bucket=inokappa-codedeploy,key=MyApp.zip,bundleType=zip,eTag="5d5386797c8e0cae34b0abbd1e99b840",version=6RVcI5oAK7g7ZYfI9xvYBZT0DZV1Hzcm --deployment-group-name <deployment-group-name> --deployment-config-name <deployment-config-name> --description <description>
Pipeline を見ると...
push した後に CodePipeline のコンソールから Demo Pipeline を見ると...
Deploy が開始しているではないか...暫くすると...。
Deploy 完了。
成果物の確認
正しく Deploy が行われている場合には /tmp/installed.log
が作成されているはずなので確認してみる。
$ docker exec ubuntu01 cat /tmp/installed.log installed $ docker exec ubuntu02 cat /tmp/installed.log installed
おお、ちゃんと Deploy もされているようだ。
ということで...
CodePipeline を利用した CodeDeploy の Deploy 自動化は S3 のバージョニング機能を利用しているようだ。(イベント通知機能も利用しているかもしれないが詳細は引き続き調べてみたい。)