Help us understand the problem. What is going on with this article?

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

More than 5 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をクリックすると、デプロイ状況が見えるので、
正常にデプロイされたことを確認する。

yukofeb
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away