Edited at

EC2デプロイのためにCodeDeployを導入する

More than 3 years have passed since last update.


経緯

hubotのデプロイ用にCodeDeployを導入してみる。

色々と設定が多いので、まずは諸々下準備を行い、

その後CodeDeployのコンソール画面からデプロイを行う。


IAM作成

CodeDeploy用とデプロイ先EC2用のIAMをそれぞれ作成する

※参考資料

Create a Service Role for AWS CodeDeploy - AWS CodeDeploy

AWS CodeDeploy を使って Laravel アプリをデプロイしてみた - Qiita


CodeDeploy用IAM

IAMコンソールのロールから、「新しいロールの作成」をクリック

項目
入力

ロール名
適当に

ロールタイプ
AWSサービスロール>Amazon EC2

ポリシーのアタッチ
AWSCodeDeployRole

またTrust Relationships(信頼関係)も設定が必要。

設定内容はCreate a Service Role for AWS CodeDeploy - AWS CodeDeployを参照

# 例

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"codedeploy.us-east-1.amazonaws.com",
"codedeploy.us-west-2.amazonaws.com",
"codedeploy.eu-west-1.amazonaws.com",
"codedeploy.ap-southeast-2.amazonaws.com",
"codedeploy.ap-northeast-1.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}

あとで使うので、ロールのARNを確認しておく


EC2用IAM

IAMコンソールのロールから、「新しいロールの作成」をクリック

項目
入力

ロール名
適当に

ロールタイプ
AWSサービスロール>Amazon EC2

ポリシーのアタッチ
AmazonS3ReadOnlyAccess

あとで使うので、ロールのARNを確認しておく


EC2セットアップ


サーバ用意

先ほど作成したEC2用IAMを使って環境構築する必要があるが、

残念ながら既存のEC2へIAMを適用することができないらしい。

ということで、涙をのんで新しいEC2サーバをつくりなおす…(つд⊂)

インスタンス作成時にIAMロールを設定できるので、先ほどのEC2用IAMを入力する。


agent導入

CodeDeploy用のagentをインストールする。

AWS CodeDeploy Agent Operations - AWS CodeDeployの通りに進めていけばOK

今回は東京リージョンなので、こんな感じ。

$ 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


appspec作成

デプロイ内容を記載するymlを作成し、リビジョンのルートに置く

※参考資料

AWS CodeDeploy AppSpec File Reference - AWS CodeDeploy

AWS CodeDeploy の AppSpec を読み解く | Developers.IO

設定内容

項目
説明

version
デプロイバージョン

os
デプロイ先OS。linuxかwindows

files:source
リビジョンのどこを引っ張ってくるか。全部のファイルを持ってきたいときは"/"を入力。

files:destination
デプロイ先サーバのどのディレクトリにファイルを配置するか

hooks
デプロイの任意の過程で実行できるスクリプトの設定内容。location(スクリプトの場所),timeout(スクリプト実行のタイムアウト時間),runas(スクリプトを実行するユーザ)を設定できる。

今回はこんな感じにした。

version: 0.0

os: linux
files:
- source: /
destination: /opt/hubot
hooks:
ApplicationStart:
- location: scripts/codedeploy_start.sh
timeout: 180

ここまでできたら準備完了!


コンソール画面


CodeDeployログイン

https://aws.amazon.com/jp/codedeploy/


アプリケーション作成画面

「新しいアプリケーションの作成」をクリック


設定

以下に沿って設定していく

項目
設定内容

アプリケーション名
任意

デプロイグループ名
任意

インスタンスの追加(タグの種類)
デプロイ対象を特定する方法。EC2,Auto Scaling Group,On-Premises Instanceから選択できる

インスタンスの追加(キー、値)
タグのキーと値を設定して、サーバを特定するので、予めタグを設定しておく必要がある

デプロイ設定
OneAtATime(1回に1個のインスタンスにデプロイ),AllAtOnce(1回に最大ですべてのインスタンスにデプロイ),HalfAtATime(1回に最大で半分のインスタンスにデプロイ)が選択できる


デプロイ実行

デプロイ画面に移り、「新しいデプロイの作成」をクリック


デプロイ結果を確認

デプロイIDをクリックすると、デプロイ状況が見えるので、

正常にデプロイされたことを確認する。