6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS CodeDeployでEC2にBlue/Greenデプロイする

Last updated at Posted at 2019-04-19

概要

AWS CodeDeployを使ってEC2にBlue/Greenデプロイをする。

流れ

auto_deploy_small.png

デプロイ対象の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 → ロードバランサー より作成を行う。

ALB_1.png

AutoScalingGroupの作成

マネジメントコンソール → EC2 → Auto Scaling グループ より作成を行う。

新しい起動設定を作成するを選択する。

  • AMIの選択
    マイAMIから先程作成したAMIイメージを選択する。
    AutoScall_3_.png

  • インスタンスタイプの選択
    インスタンスタイプを選択する

  • 詳細設定
    起動設定の名前を入力。
    IAMロールはAmazonS3ReadOnlyAccessをアタッチしたIAMロールを指定する。
    AutoScall_4.png

この後の手順は省略する。セキュリティグループの設定を忘れずに行う。
ここまででAutoScalingGroupで利用する起動設定が作成完了。

  • AutoScalingGroup本体の作成
    起動設定は先程作成した起動設定を選択する。
    グループ名を入力し、VPCとサブネットの選択を行う。
    (少なくとも2つ以上のAZになるように設定しておくことを推奨する。)

この後の手順は省略する。

builderサーバの準備

AmazonS3FullAccessAWSCodeDeployDeployerAccessをアタッチした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/オンプレミス」を選択。
code_deploy_2.png

デプロイグループの作成

  • デプロイグループ名
    任意の名前を入力

  • サービスロール
    CodeDeployのフルアクセス権限をアタッチしたIAMロールを指定
    code_deploy_3.png

  • デプロイタイプ
    「Blue/Green」を選択
    code_deploy_4.png

  • 環境設定
    「Amazon EC2 Auto Scaling グループの自動コピー」を選択し、作成したAmazon EC2 Auto Scaling グループを選択する。
    code_deploy_5.png

  • デプロイ設定
    デプロイ成功後インスタンス削除するか選択し、待機時間を指定。
    デプロイ設定を選択。
    code_deploy_6.png

デプロイ設定 条件内容
CodeDeployDefault.AllAtOnce 一回で全部のインスタンスにデプロイしようとする
CodeDeployDefault.HarfAtATime 半分ずつデプロイする
CodeDeployDefault.OneAtATime 1つずつデプロイする
  • ロードバランサー
    作成したロードバランサーを選択。

code_deploy_7.png

  • 詳細
    必要に応じて設定する。

デプロイの作成

  • デプロイグループ
    先程作成したデプロイグループを選択。
  • リビジョンタイプ
    Amazon S3を選択。
  • リビジョンの場所
    アップロード済みのソースコードの場所を選択。
    作成したAmazon S3 バケット名がdeploy-test-bucket、ソースコードのファイル名がmy-appの場合以下のようになる。
    s3://deploy-test-bucket/my-app.zip
    code_deploy_9.png

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}


BlueOseanでGitHubとJenkinsの連携

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?