こんにちは。katoです。
今回はAWS環境におけるアプリケーションのデプロイ自動化をご紹介したいと思います。
利用するサービスはCodeDeploy、CodePipeline、CodeCommitになります。
概要
今回構築する環境は下図の通りとなります。
なお、今回はScaling GroupへのデプロイをBlue/Green方式にて行います。
今回の構成における各サービスの役割は以下の通りとなります。
・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分
パイプラインの作成
アプリケーションの作成が完了したら、CodePipelineでCodeCommitとCodeDeployを関連付けていきます。
CodePipelineのサービスページにアクセスし、パイプラインを作成します。
ソースプロバイダにCodeCommit、デプロイプロバイダにCodeDeployを選択し、パイプラインを作成します。
デプロイの実行
デプロイ自動化のための環境がここまでの設定で整ったので、実際にデプロイの動作を見てみましょう。
デプロイサーバにてデプロイの動作を記載した設定ファイルを作成します。
今回は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環境でのアプリケーション構築/運用の際には、導入をお考えになってみてはいかがでしょうか。