はじめに

inokara.hateblo.jp

上の記事で CodeDeploy を触っていてソースコードが更新されたら自動でデプロイする仕組みは無いものかなと調べていたら CodePipeline ですぐに出来そうだったので試してみた。既に S3 のイベント通知機能と Lambda を利用した例は以下のように紹介されているが、CodePipeline を利用すれば Lambda ファンクション書かずとも実現出来るのは非常に有り難い。

aws.typepad.com

CodePipeline で CodeDeploy でのデプロイを自動化する

CodePipeline とは

CodePipelineはソフトウェアの継続的デリバリーサービスです。皆さんのソフトウェアをリリースするために必要なステップをモデル化し可視化し自動化することができます。コードがチェックインからビルドされテストされ、そしてデプロイされるまでの全てのステップを定義し完全にカスタマイズすることができます。

こちらより抜粋。

ざっくり言うと…

  • アプリケーションの継続的デリバリーにひつような各種要素をモデル化
  • モデル化した要素を自由に組み合わせることが出来る
  • さらに組み合わせた手順を自動化することが出来る

うーむ、自分で書いて分かり辛いけど、以下のような例えで…

GitHub に push した時点で CodePipeline が検知し、ステージング環境へデプロイ、デプロイした環境に対してテストを実施、テストに問題なければ本番環境へデプロイという作業を一気通貫に実施してくれるサービスと言える。

ざっくり手順

既に CodeDeploy に登録しているアプリケーションを利用するという前提で…

S3 バケットのバージョニングを有効にする
既に CodeDeploy 作成済みのアプリケーションと Deployment group を利用する
Pipeline を作成する
尚、詳細な手順は以下の Blog が詳しい。

aws.typepad.com

でお値段は?

尚、CodePipeline の利用料金は…

アクティブなパイプライン毎に毎月$1が課金されます(最初に1つはAWS無料枠として課金されずに利用可能です)。アクティブなパイプラインとは1ヶ月の間に少なくとも1度のコードの変更が流れたものになります。

とあるので Pipeline 1 個 1 ドルと考えると良いのかもしれない。

どこのリージョンで使えるの?

現時点(2015/07/15)では…

CodePipelineは今から利用可能であり今日からUS East (Northern Virginia)リージョンで使い始められます。また他のリージョンへの拡張も(いつもどおり)時間をかけて行っていく計画です。

ヴァージニアのみで利用可能となっている。

駆け足で CodePipeline

詳しいことは追々調べるとして…

駆け足で(スクショ)で Pipeline のセットアップ振り返る。

20150715214533

尚、構成は上記の通り前回の記事の環境を流用。

事前にソースコードを置く S3 バケットのバージョニングを有効にする

20150715183518

Pipeline を作成

20150715183020

Source location を指定

CodeDeploy で利用した S3 バケットを指定する。

20150715183032

Build を指定

今回は Build は行わないが、Jenkins でのビルドを行うことが出来る。

20150715183043

Beta 環境へのデプロイを指定

Deployment Provider として CodeDeploy を指定する。

20150715183107

CodeDeploy を指定すると既存のアプリケーションと Deployment Group を指定することが出来る。

Service Role を指定

Pipeline に AWS リソースの利用を許可する為の権限を付与する。

20150715183116

設定を確認して Pipeline の作成完了

20150715183125

以下のような画面が表示される。

20150715184342

デプロイの自動化

早速…

デプロイの自動化を試してみたい。期待するのは 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-config-name  --description 

Pipeline を見ると…

push した後に CodePipeline のコンソールから Demo Pipeline を見ると…

20150715184927

Deploy が開始しているではないか…暫くすると…。

20150715185216

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 のバージョニング機能を利用しているようだ。(イベント通知機能も利用しているかもしれないが詳細は引き続き調べてみたい。)

元記事はこちら

CodePipeline をちょっと試す(CodePipeline で CodeDeploy でのデプロイを自動化する)