経緯
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ログイン
アプリケーション作成画面
設定
項目 | 設定内容 |
---|---|
アプリケーション名 | 任意 |
デプロイグループ名 | 任意 |
インスタンスの追加(タグの種類) | デプロイ対象を特定する方法。EC2,Auto Scaling Group,On-Premises Instanceから選択できる |
インスタンスの追加(キー、値) | タグのキーと値を設定して、サーバを特定するので、予めタグを設定しておく必要がある |
デプロイ設定 | OneAtATime(1回に1個のインスタンスにデプロイ),AllAtOnce(1回に最大ですべてのインスタンスにデプロイ),HalfAtATime(1回に最大で半分のインスタンスにデプロイ)が選択できる |