概要
AWS CodeDeployを使ってEC2にBlue/Greenデプロイをする。
流れ
デプロイ対象のEC2インスタンスを作成
IAMロールを設定する
AmazonS3ReadOnlyAccess
をアタッチしたIAMロールを指定する。
アプリケーションが動作する環境を作成
アプリケーションが動作する環境を作成する。
AWS CodeDeploy エージェントをインストール
東京リージョンの場合は下記手順でインストールする。
$ sudo yum update
$ sudo yum install ruby
$ sudo yum install aws-cli
$ cd /home/ec2-user
$ aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
$ chmod +x ./install
$ sudo ./install auto
下記のコマンドで導入が確認できればOK
sudo service codedeploy-agent status
デプロイ対象のEC2インスタンスで利用するAMIイメージを作成する
EC2インスタンスの起動イメージであるAMIイメージを作成する。
作成したインスタンスを元にAMIイメージを作成する。
ロードバランサーの作成
マネジメントコンソール → EC2 → ロードバランサー より作成を行う。
AutoScalingGroupの作成
マネジメントコンソール → EC2 → Auto Scaling グループ より作成を行う。
新しい起動設定を作成するを選択する。
この後の手順は省略する。セキュリティグループの設定を忘れずに行う。
ここまででAutoScalingGroupで利用する起動設定が作成完了。
- AutoScalingGroup本体の作成
起動設定は先程作成した起動設定を選択する。
グループ名を入力し、VPCとサブネットの選択を行う。
(少なくとも2つ以上のAZになるように設定しておくことを推奨する。)
この後の手順は省略する。
builderサーバの準備
AmazonS3FullAccess
とAWSCodeDeployDeployerAccess
をアタッチしたIAMロールを指定する。
デプロイ用ソースコードを格納するS3バケットを作成
非公開のS3バケットを作成する。
デプロイ対象のアプリケーション設定
appspec.yml
をデプロイ対象アプリケーションのプロジェクトルートに設置する。
アプリケーション再起動やミドルウェアの再起動等設定が可能。
appspec.yml(サンプル)
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/my-app
permissions:
- object: /
owner: ec2-user
group: ec2-user
mode: 777
pattern: "**"
hooks:
AfterInstall:
- location: run.sh
timeout: 1000
runas: root
run.sh
#!/bin/bash
mkdir -p /var/my-app/bin
chmod +x my-app
cp -f /home/ec2-user/my-app/my-app /var/my-app/bin/my-app
ln -f -s /var/my-app/bin/my-app /etc/init.d/my-app
service my-app start
appspec.yml
は公式ドキュメントをよく見ておく事をオススメする。
デプロイ設定の作成
AWSCodeDeployRole
をアタッチしたIAMロールを作成しておく。
アプリケーションの作成
アプリケーション名を入力。
コンピューティングプラットフォームは「EC2/オンプレミス」を選択。
デプロイグループの作成
-
デプロイグループ名
任意の名前を入力 -
環境設定
「Amazon EC2 Auto Scaling グループの自動コピー」を選択し、作成したAmazon EC2 Auto Scaling グループを選択する。
デプロイ設定 | 条件内容 |
---|---|
CodeDeployDefault.AllAtOnce | 一回で全部のインスタンスにデプロイしようとする |
CodeDeployDefault.HarfAtATime | 半分ずつデプロイする |
CodeDeployDefault.OneAtATime | 1つずつデプロイする |
- ロードバランサー
作成したロードバランサーを選択。
- 詳細
必要に応じて設定する。
デプロイの作成
- デプロイグループ
先程作成したデプロイグループを選択。 - リビジョンタイプ
Amazon S3を選択。 - リビジョンの場所
アップロード済みのソースコードの場所を選択。
作成したAmazon S3 バケット名がdeploy-test-bucket
、ソースコードのファイル名がmy-app
の場合以下のようになる。
s3://deploy-test-bucket/my-app.zip
builderサーバでの実行設定
builderサーバから以下のようなスクリプトを実行することでS3バケットにソースコードをアップロードしデプロイ要求を出すことができる。
BUILD_DIR=.
REGION=ap-northeast-1
APP_NAME=my-app
DEPLOYMENT_GROUP=deploy-test-group
DEPLOYMENT_CONFIG=CodeDeployDefault.AllAtOnce
S3_BUCKET=deploy-test-bucket
S3_KEY=${APP_NAME}.zip
aws deploy push \
--region ${REGION} \
--application-name ${APP_NAME} \
--s3-location s3://${S3_BUCKET}/${S3_KEY} \
--source ${BUILD_DIR}
ETAG=`aws deploy list-application-revisions --region ${REGION} \
--application-name ${APP_NAME} --s-3-bucket ${S3_BUCKET} --s-3-key-prefix ${S3_KEY} \
--sort-by registerTime --sort-order descending \
--query 'revisions[0].s3Location.eTag' --output text`
aws deploy create-deployment --region ${REGION} --application-name ${APP_NAME} \
--s3-location bucket=${S3_BUCKET},key=${S3_KEY},bundleType=zip,eTag=${ETAG} \
--deployment-group-name ${DEPLOYMENT_GROUP} --deployment-config-name ${DEPLOYMENT_CONFIG}