12
14

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.

CodeDeploy 事始め(基本設定、基本動作の確認)

Last updated at Posted at 2016-11-18

#1. はじめに

  • OpsWorks の Chef12 版(カスタムLayer) の Apps(デプロイ) は、ユーザ側でカスタムデプロイレシピを作成する必要がありそうなので敷居が高そう。代わりに CodeDeploy を利用できないか。

  • Deployレシピ

アプリケーションをカスタム Layer にデプロイするには、アプリケーションのファイルをリポジトリからインスタンスの適切な場所にダウンロードするカスタム Deploy レシピを実装する必要があります。ただし、多くの場合、組み込みのデプロイクックブックを使用してデプロイの一部の側面を処理することで、記述する必要のあるコードの量を制限することができます。

#2. 今回の環境

  • デプロイするサーバ:EC2 Amazon Linux
  • リポジトリ:Github (private/public)

#3. 注意点

#4. 設定概要
##4.1 CodeDeploy 用 EC2設定とEC2起動 

##4.2 Githubリポジトリ設定

##4.3 CodeDeployサービス設定

#5. CodeDeploy 用 EC2設定とEC2起動
##5.1 CodeDeploy 用 IAM instance profile (IAMロール) の作成

  • 用途

Your Amazon EC2 instances need permission to access the Amazon S3 buckets or GitHub repositories where the applications that will be deployed by AWS CodeDeploy are stored. To launch Amazon EC2 instances that are compatible with AWS CodeDeploy, you must create an additional IAM role, an instance profile. These instructions show you how to create an IAM instance profile to attach to your Amazon EC2 instances. This role gives AWS CodeDeploy permission to access the Amazon S3 buckets or GitHub repositories where your applications are stored.

  • ポリシー作成 (コンソールから)

サービス ⇒ IAM ⇒ ポリシー ⇒ ポリシーの作成 ⇒ 独自のポリシーを作成 ⇒ 選択 ⇒ ポリシーの確認

・ポリシー名

CodeDeployDemo-EC2-Permissions

・ポリシードキュメント


 {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*" 
      ],
      "Resource": [
        "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*" 
      ]
    }
  ]
}

・ポリシーの作成

  • ロール作成

IAM ⇒ ロール ⇒ 新しいロールの作成

・ロール名


CodeDeployDemo-EC2-Instance-Profile

・ロールタイプの選択

Amazon EC2
を選択

・ポリシーのアタッチ

CodeDeployDemo-EC2-Permissions
をアタッチ

・ロールの作成

##5.2 EC2起動時の CodeDeploy 用設定

  • EC2起動

サービス ⇒ EC2 ⇒ インスタンスの作成

・IAMロール設定


CodeDeployDemo-EC2-Instance-Profile

・高度な詳細 ⇒ ユーザーデータ

#!/bin/bash
yum -y update
yum install -y ruby
cd /home/ec2-user
curl -O https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
./install auto

・EC2タグ設定(Add Tags)


キー: deploy
値:yes

$ sudo service codedeploy-agent status
The AWS CodeDeploy agent is running as PID 8017

#6. Githubリポジトリ設定

  • Githubリポジトリ構成例

github.com/tonishy/sample-source
├── appspec.yml
└── test.txt
  • デプロイするものを github リポジトリへ Push

  • appspec.yml ファイルをデプロイするソースコードのリポジトリのトップに配備

appspec.yml
version: 0.0
os: linux
files:
  - source: /
    destination: /tmp

「source: /」= 「https://github.com/tonishy/sample-source/」 (の特定コミットID)を
「destination: /tmp」= デプロイするEC2サーバの /tmp」 へデプロイする

#7. CodeDeployサービス設定
##7.1 Service Role for AWS CodeDeploy 作成

  • 用途

The AWSCodeDeployRole policy provides the permissions required for your service role to read the tags on your instances or identify your Amazon EC2 instances by Auto Scaling group names; to publish information to Amazon SNS topics; and to retrieve information about CloudWatch alarms. By default, this policy also includes a trust relationship that grants your service role access to all of the endpoints currently supported by AWS CodeDeploy. You can restrict the service role's access to only those endpoints you specify.

  • ロール作成 (コンソールから)

サービス ⇒ IAM ⇒ ロール ⇒ 新しいロールの作成

・ロール名


CodeDeployServiceRole

・ロールタイプの選択

AWS CodeDeploy
を選択

・ポリシーのアタッチ

AWSCodeDeployRole
をチェック

・ロールの作成

  • 信頼ポリシー編集

作成したロール「CodeDeployServiceRole」を選択 ⇒ 信頼関係 ⇒ 信頼関係の編集

・ポリシードキュメント


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

・信頼ポリシーの更新

##7.2 アプリケーション設定

  • アプリケーション設定をAWSコンソールから作成

サービス ⇒ CodeDeploy ⇒ 今すぐ始める ⇒ カスタムデプロイ ⇒ ウォークスルーのスキップ ⇒ 新しいアプリケーションの作成

・アプリケーション名

demo
[Note] In an AWS account, an AWS CodeDeploy application name can be used only once per region. You can reuse an application name in different regions.

・デプロイグループ名

demo
[Note] If you want to use the same settings used in another deployment group (including the deployment group name; tags, Auto Scaling group names, or both; and the deployment configuration), specify those settings on this page. Although this new deployment group and the existing deployment group will have the same name, AWS CodeDeploy treats them as separate deployment groups, because they are each associated with separate applications.

・インスタンスの追加


タグの種類: Amazon EC2
キー: deploy
値: yes
今回は、EC2起動時に設定したタグが付いているEC2をデプロイ対象とする。ただし、この指定の場合、terminate しているインスタンスでもデプロイ用タグがついていれば選択される。

・デプロイ設定 ⇒ デプロイ実行
とりあえず

CodeDeployDefault.OneAtATime

・トリガー
今回はスルー

・警告
今回はスルー

・ロールバック
今回はスルー

・サービスロール


arn:aws:iam::************:role/CodeDeployServiceRole
([7.1](#71-service-role-for-aws-codedeploy-%E4%BD%9C%E6%88%90)で作成したもの)

・アプリケーションの作成

##7.3 デプロイ設定

  • デプロイ設定をAWSコンソールから作成

サービス ⇒ CodeDeploy ⇒ AWS CodeDeploy メニューのデプロイ ⇒

・新しいデプロイの作成


アプリケーション:demo
デプロイグループ:demo
リビジョンタイプ:アプリケーションは GitHub に格納されています

・GitHubに接続
 「GitHubに接続」をクリック

・リポジトリ名


tonishy/sample-source

・コミットID


30326398c84d********************fdbdf2b8

・デプロイ設定


CodeDeployDefault.OneAtATime

・今すぐデプロイ

2016-11-18-01.png

2016-11-18-02.png

12
14
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
12
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?