Github の CodeDeploy インテグレーションサービスで自動デプロイする

AWS CodeDeploy

こんにちは、藤本です。

Github リポジトリへのプッシュをトリガーに CodeDeploy によるデプロイを調べる機会があり、試してみたのでご紹介します。

2以上年前の記事ですが、AWS が公開しているブログの手順で実施できました。

試してみた

設定の流れは以下のようになります。

  1. Github リポジトリ作成
  2. CodeDeploy のアプリケーション作成
  3. Github から CodeDeploy へデプロイする IAMユーザー作成
  4. Github リポジトリへ CodeDeploy との連携設定
  5. Github のパーソナルアクセストークン作成
  6. Github リポジトリの自動デプロイサービス設定
  7. 動作確認

1. Github リポジトリ作成

Github のリポジトリを作成します。「Github リポジトリ作成」でググると作成方法はたくさん紹介されているのでここは割愛します。適当なテストコードをプッシュします。今回は CodeDeploy のサンプルアプリケーションを利用しています。

$ tree .
.
├── LICENSE.txt
├── appspec.yml
├── index.html
└── scripts
    ├── install_dependencies
    ├── start_server
    └── stop_server

1 directory, 6 files

2. CodeDeploy のアプリケーション作成

自動で EC2 インスタンスへデプロイするための CodeDeploy アプリケーションを定義します。CodeDeploy のアプリケーション作成は下記エントリをご参照ください。

[新サービス] AWS CodeDeployを触ってみた #reinvent

3. Github から CodeDeploy へデプロイする IAM ユーザー作成

Github リポジトリにプッシュされた時にデプロイするには Github から CodeDeploy へデプロイを実行します。そのため、Github から CodeDeploy のデプロイAPIを実行するための IAM ユーザー(アクセスキー)が必要となります。外部へ預けるアクセスキーなので権限は最小限としたいです。最初に紹介したブログにも記載がありますが、Github リポジトリの CodeDeploy インテグレーション画面でも案内してくれます。

Add_service 3

こちらを参考に CodeDeploy のリージョン、AWSアカウントID、アプリケーション名、デプロイメントグループ名を自身の環境に置き換えてください。

IAM_Management_Console_4

4. Github リポジトリへ CodeDeploy との連携設定

Github リポジトリに CodeDeploy と連携するための設定を入力します。Github リポジトリを開いて、上のメニューから [Settings] をクリックします。左メニューから [Integrations & services] を選択します。[Add service] - [AWS CodeDeploy] を選択します。

Integrations_and_services

設定内容は Install Notes に記載されいています。

Service_-_AWS_CodeDeploy

項目 説明
Application name 連携する CodeDeploy のアプリケーション名
Deployment group 連携する CodeDeploy アプリケーションのデプロイメントグループ名
AWS access key 発行した IAM ユーザーのアクセスキー
AWS region CodeDeploy のリージョン名
AWS secret access key 発行した IAM ユーザーのシークレットキー

5. Github のパーソナルアクセストークン作成

次の自動デプロイサービスを登録するためのパーソナルアクセストークンを作成します。Github のユーザーから、[Settings] をクリックします。前章はリポジトリの[Settings]で、今回はユーザーの[Settings]です。左メニューから [Personal access tokens] を選択します。[Generate new token] をクリックします。

Personal_Access_Tokens

Token description に任意の名前を入力し、Select scopes(権限)に repo_deployments (デプロイステータスの取得)を割り当てます。

New_personal_access_token

アクセストークンが払い出されます。一度しか表示されないので控えておきます。

Personal_Access_Tokens 2

6. Github リポジトリの自動デプロイサービス設定

自動デプロイサービスを登録します。4. のリポジトリの連携設定画面に戻ります。[Add service] - [GitHub Auto-Deployment] を選択します。

Integrations_and_services 2

前章で控えたパーソナルアクセストークンを入力します。

Add_service 2

7. 動作確認

それでは Github リポジトリにコードをプッシュして、CodeDeploy でデプロイされることをテストしましょう。

デプロイ前

CodeDeploy の Blue/Green デプロイのサンプルアプリケーションを利用しています。

現在インスタンスへアクセスすると青い画面が表示されます。

Sample_Deployment 2

ソースコードを変更して、プッシュ

index.html の背景色を緑に変更して、Github リポジトリへプッシュします。

$ git remote -v
origin  https://s-fujimoto@github.com/s-fujimoto/sampleapp.git (fetch)
origin  https://s-fujimoto@github.com/s-fujimoto/sampleapp.git (push)

$ sed -i '' 's/#0188cc/#00cc3a/g' index.html

$ git commit -am "change green"
git commit -am "change green"
[master 2f11297] change green
 1 file changed, 1 insertions(+), 1 deletions(-)

$ git push origin master
Password for 'https://s-fujimoto@github.com':
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/s-fujimoto/sampleapp.git
   edd9812..2f11297  master -> master

デプロイ

プッシュすると、すぐにデプロイが開始されます。

AWS_CodeDeploy_Management_4

今回はindex.html を配置して、httpd をストップ/スタートするだけなので1分ほどで完了します。

AWS_CodeDeploy_Management_2

デプロイ後

インスタンスへアクセスすると緑の画面が表示されます。

Sample_Deployment

Github リポジトリへのプッシュをトリガーに自動でデプロイすることができました。

まとめ

いかがでしたでしょうか?

CodePipeline、CodeBuild を利用することで色々なことができますが、単純に Github へのプッシュをトリガーにアプリケーションデプロイするだけであれば、こちらの設定だけで十分ですね。ビルドやテストをしたい、複数ブランチをインテグレーションしたいなどの要望があれば、CodePipeline、CodeBuildや、その他 CI サービスを活用する必要があります。