デプロイ自動化(CodeDeploy + CodePipeline + CodeCommit)

こんにちは。katoです。

今回はAWS環境におけるアプリケーションのデプロイ自動化をご紹介したいと思います。

利用するサービスはCodeDeploy、CodePipeline、CodeCommitになります。

 

概要

今回構築する環境は下図の通りとなります。

なお、今回はScaling GroupへのデプロイをBlue/Green方式にて行います。

 

Scaling Groupへのデプロイ

 

今回の構成における各サービスの役割は以下の通りとなります。

・CodeDeploy → アプリケーションのデプロイ
・CodePipeline → デプロイの検知(トリガー)
・CodeCommit → リポジトリ

 

エージェントインストール

初めに、CodeDeployを利用するためのエージェントをインストールしていきます。
エージェントのインストールが必要となるのは、アプリケーションサーバおよびデプロイサーバになります。

今回は、Scaling Groupでのデプロイを行うので、エージェントをインストールしたAMIが必要となります。

なお、各インスタンスにはEC2、CodeDeploy、CodePipelineへのアクセスを許可するようIAMロールを割当てています。

 

##codedeploy agentのインストール
# yum install ruby wget
# wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
# chmod +x ./install
# ./install auto
 
##関連パッケージのインストール
# yum install git
# curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
# python get-pip.py
# pip install awscli
# curl -o /usr/local/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && sudo chmod +x /usr/local/bin/jq

 

リポジトリの作成

エージェントのインストールが完了したら、CodeCommitでリポジトリを作成します。

CodeCommitのサービスページにアクセスし、リポジトリの作成を行います。

リポジトリの作成自体は簡単です。
リポジトリ名を指定するだけで作成できます。

リポジトリの作成が完了すると、Eメール設定の画面が表示されますが、今回はスキップして先に進みます。

リポジトリの作成後、デプロイサーバにて以下のコマンドを実行します。

 

# git config --global credential.helper '!aws --region ap-northeast-1 codecommit credential-helper $@'
# git config --global credential.UseHttpPath true

# cat ~/.gitconfig
[credential]
        helper = !aws --region ap-northeast-1 codecommit credential-helper $@
        UseHttpPath = true
# git config --global user.email "test@example.com"
# git config --global user.name "test"
# git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/your-repository-name

# cd your-repository-name

# git init

 

アプリケーションの作成

リポジトリの作成が完了したら、CodeDeployでアプリケーションを作成していきます。

今回の構成では、ALBおよびScaling Groupが必要となるのであらかじめ用意しておいて下さい。

CodeDeployのサービスページにアクセスし、アプリケーションを作成します。

「カスタムデプロイ」を選択し、以下の設定にてアプリケーションの設定を行います。
記載のない個所は適宜指定してください。

・コンピューティングプラットフォーム → EC2/オンプレミス
・デプロイタイプ → Blue/Greenデプロイ
・環境設定 → Auto Scalingグループの自動コピー
・待機時間(デプロイ設定の編集) → 5分

 

AWS CodeDeployページ

 

アプリケーションの作成

 

デプロイ設定

 

デプロイ設定の編集

 

パイプラインの作成

アプリケーションの作成が完了したら、CodePipelineでCodeCommitとCodeDeployを関連付けていきます。

CodePipelineのサービスページにアクセスし、パイプラインを作成します。

ソースプロバイダにCodeCommit、デプロイプロバイダにCodeDeployを選択し、パイプラインを作成します。

 

パイプラインの作成

 

ソースプロバイダにCodeCommit

 

ビルドプロバイダ設定

 

デプロイ設定

 

AWSサービスロール

 

デプロイの実行

デプロイ自動化のための環境がここまでの設定で整ったので、実際にデプロイの動作を見てみましょう。

デプロイサーバにてデプロイの動作を記載した設定ファイルを作成します。

今回はindexファイルの書き換えを行うスクリプトを実行します。

 

# vi appspec.yml
version: 0.0
os: linux
hooks:
    BeforeInstall:
        - location: script/sample.sh

# mkdir script
# vi script/sample.sh
#!/bin/sh

echo "deploy success" > /var/www/html/index.html

# git add *
# git commit -m "deploy"
# git push origin master

 

上記設定ファイルは、指定のスクリプトを実行するという単純なものになります。
ファイルの配置等も可能ですが、同名ファイルが存在する場合デプロイが失敗するので注意して下さい。

上記のgit push実行後、CodePipelineのサービスページを確認すると、デプロイが進行していることがわかります。
また、CodeCommitのサービスページにはコミットが作成されます。

 

 

 

デプロイの完了後、デプロイが反映された新しいターゲットグループへルーティングされます。

 

 

まとめ

AWS環境でのアプリケーションのデプロイに当たって、ダウンタイムなしでのデプロイやAuto Scalingしているサーバに対してのデプロイといったものが必要になってきます。

上記のようなデプロイ環境の構築にあたって便利になるのが、今回紹介させていただいたCodeDeploy、CodePipeline、CodeCommitのサービスになります。

デプロイの自動化だけでなく、一斉デプロイやバージョニング管理といった機能も提供するので、AWS環境でのアプリケーション構築/運用の際には、導入をお考えになってみてはいかがでしょうか。