GitHubリポジトリと連携してAWS CodeDeployを使う(デプロイ編)


Posted on Nov 13


こんにちは、Cloud Automatorの柳瀬です。
前回の記事でCodeDeployを使うまでの準備が整ったので、今回はリポジトリを用意してEC2インスタンスにデプロイをしてみたいと思います。

リポジトリの用意とAppSpec File

デプロイするサンプルとして、GitHubにリポジトリを用意しました
scriptsディレクトリにはには後述するCodeDeployのライフサイクルで実行したいスクリプトを配置し、srcディレクトリには実際にデプロイするhtmlファイルをまとめています。README.mdは説明不要かと思いますが、ここで重要になってくるのがappspec.ymlです。

$ tree
.
├── README.md
├── appspec.yml
├── scripts
│   ├── httpd_start.sh
│   └── install.sh
└── src
    ├── error.html
    └── index.html

2 directories, 6 files

appspec.ymlの記載方法は公式ドキュメントで紹介されていますが、アプリケーションのソースコードをどこに配置するか、どのような権限で付与するか、CodeDeployのライフサイクルでどのような事を実行するかを定義する中心部分です。
versionセクションには執筆時点では0.0を記載するようになっており、osセクションにはlinuxもしくはwindowsと指定します。sourceセクションでデプロイするアプリケーションの場所を指定し、hooksセクションではライフサイクルイベントで実行されるスクリプトを指定します。hooksセクションを上手に使うとサービスのダウンタイムを最小限にしてデプロイが出来そうです。
今回用意したappspec.ymlは以下のようになっており、アプリケーションのデプロイ前にinstall.shhttpd_start.shを実行します。

AWS CodeDeployのApplicationとDeployment Groupを作成

リポジトリがGitHub上に用意出来たら、CodeDeployの管理単位であるApplicationとDeployment Groupを作成します。

  1. Management ConsoleでCodeDeployにアクセスしたら下記画像のように表示されるので、Get Started Nowをクリックします

  2. Custom DeploymentをチェックしてSkip Walkthroughをクリックします

  3. Application NameとDeployment Groupに任意の名前をつけます

  4. 次にこのDeployment Groupでデプロイ対象とするEC2インスタンスをタグで指定します

  5. Deployment Configurationでデプロイを実行するルールを、Service Role ARNで前回作ったOpsWorksのIAM Roleを指定してApplicationを作成します

AWS CodeDeployでデプロイ

いよいよGitHub上に配置されたリポジトリと連携してデプロイをします

  1. 先ほど作成したDeployment Groupを展開し、Deploy New Revisionをクリックします

  2. Revision TypeでMy application is stored in GitHubにチェックします

  3. Connect to Githubをクリックし、GitHubにログインをします

  4. Repository Nameとデプロイ対象のCommit IDを指定して、Deploy Nowをクリックします

  5. デプロイが実行され、成功したらSucceededと表示されます

  6. 以下のようにテストページが表示されることを確認して下さい

感想

GitHubのPublicなリポジトリで動作確認をしましたが、実際の運用を考えるとPrivateなリポジトリやBitbucket、その他Gitサーバへの対応が気になりました。実運用を想定すると、AppSpec Fileに定義するhooksセクションで定義する内容をきちんと設計した方が良さそうです。今回の構成はDeployment Groupが1つですが、いくつかのレイヤーを持ってるアプリケーションの場合はDeployment Groupを使い分けるイメージでしょうか。
CodeDeployはOpsWorksと比較すると対象としているレイヤーが違うようですし、タグでデプロイ対象を決めているので、OpsWorkで構成管理したStackにデプロイということも出来そうですね。
同じタイミングで発表された、AWS CodeCommitやAWS CodePipelineとの連携も気になるので、引き続き試してみたいと思います。

参考



By year

  1. 2014 (34)