LoginSignup
77

More than 1 year has passed since last update.

AWS Code シリーズ

Last updated at Posted at 2019-04-03

■AWSのCode シリーズ

CodeCommit
ソースコードを管理するGitリポジトリサービス

CodeBuild
ソースコードのビルド/テスティングサービス

CodeDeploy
ビルドされたモジュールのデプロイサービス

CodePipeline
継続的デリバリー/継続的インテグレーションをサポートするサービス

スクリーンショット 2019-03-26 0.04.02.png

1.CodeCommit

概要
- 簡単にGitリポジトリをホストすることができる。
- サードバーティ製のツールも利用可能。
- プルリクエスト機能も利用可能。

接続方法
- コンソール
- https
- ssh

基本的な利用の流れ
image.png

その他参考情報

1-1 CodeCommitのリポジトリを作成する

[リポジトリ名]に任意のものを入力
image.png

1-2 初期セットアップ、コードのPush

IAMユーザの権限を使って、CodeCommitのリポジトリに接続し、Pushします。

gitを利用するのに最初に実行。

git config --global credential.helper '!aws --region ap-northeast-1 codecommit credential-helper $@'
git config --global credential.UseHttpPath true

誰が登録したかわかるようにユーザー情報を入れる。

git config --global user.name "[user_name]"
git config --global user.email "[user_email]"

gitでこのディレクトリを管理すると定義する。

git init

##.gitができあがっていることも確認しておく。
ll -a
drwxrwxr-x 7 ec2-user ec2-user 4096  3月 26 00:47 .git

先程作成したリポジトリをリモートとして登録する。

git remote add origin [https_clone_url]

git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    buildspec.yml
    src/

nothing added to commit but untracked files present (use "git add" to track)

全てを追加する。

git add -A

git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   buildspec.yml
    new file:   src/appspec.yml
    new file:   src/img/img1.jpeg
    new file:   src/img/img2.jpeg
    new file:   src/index.php
    new file:   src/script/clean.sh

コミットする。

git commit -m "first commit"
[master (root-commit) e9e67f0] first commit
 6 files changed, 69 insertions(+)
 create mode 100644 buildspec.yml
 create mode 100644 src/appspec.yml
 create mode 100644 src/img/img1.jpeg
 create mode 100644 src/img/img2.jpeg
 create mode 100644 src/index.php
 create mode 100644 src/script/clean.sh

pushする。

git push origin master
[ec2-user@demo-batch work]$ git push origin master
Counting objects: 11, done.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (11/11), 516.43 KiB | 18.44 MiB/s, done.
Total 11 (delta 0), reused 0 (delta 0)
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit
 * [new branch]      master -> master

コンソールからpushされたことも確認する。
image.png

2.CodeBuild

概要

  • ビルドサービス
  • ソースコードのコンパイルを行ったり、テストを実行する環境を簡単に構築することができる。
  • CodeBuild上で行う作業については、buildspec.ymlに定義する。

流れ
image.png

2-1 成果物格納用のS3バケットを準備しておく

S3バケットを作成し、バージョニング を有効にしておく。
スクリーンショット 2019-03-26 19.01.56.png

バージョニングについては実際に試されている↓の記事が参考になりました。
今さらだけどS3のバージョニングを試してみた。

2-2 buildspec.ymlを作成する

buildspec.yml

##[application-name] は後で必要になるので適当な名前に、
##[S3-bucket-name]は「2-1 成果物格納用のS3バケットを準備しておく」で作成したS3バケットを指定。

version: 0.1

phases:
  build:
    commands:
      - aws deploy push --region ap-northeast-1 --application-name [application-name] --s3-location s3://[S3-bucket-name]/sample.zip --source src
artifacts:
  files:
    - '**/*'
  base-directory: src
  name: sample.zip

2-3 CodeBuildプロジェクトを作成する

[Project name] は任意の名前を入力
スクリーンショット 2019-03-26 19.19.44.png

[Source provider][リポジトリ] は「1.AWSCodeCommit」のリポジトリから取ってくるように指定します。
スクリーンショット 2019-03-26 19.22.29.png

[Operating system]は Ubuntu しか選べません。
Amazon Linux2も選べるようになりましたね。
[Runtime]は PHP にしておきます。
スクリーンショット 2019-03-26 19.28.25.png

[Service role]は New service role で新しく作成する。※後でポリシーを追加します。
スクリーンショット 2019-03-26 19.35.33.png

[Type]は AmazonS3
[Bucket name]に作成したS3バケットを指定
[Enable semantic versioning]にチェック
[Namespace type]はBuild IDを指定
スクリーンショット 2019-03-26 19.34.14.png
スクリーンショット 2019-03-26 19.34.31.png

2-4 Service roleにIMAポリシーを追加する

先ほど作成した、Service roleに以下2つのポリシーを追加してください。

AWSCodeDeployDeployerAccess
AmazonS3FullAccess

スクリーンショット 2019-03-26 20.24.52.png

3.CodeDeploy

  • デプロイ自動化サービス
  • appspec.ymlにデプロイ時の動作を定義する
  • デプロイ方式を1台、半分、全台など選択可能。
  • デプロイ先にエージェントをインストールする必要がある。

AppSpec の「hooks」
Hooksでライフサイクルイベントを設定してデプロイ時に任意のスクリプトを実行できます。
また、スクリプトの実行ポイントは複数あり、細かく制御可能です。
フックスクリプトはアプリケーションのアーカイブ(zip)にバンドルし、S3やCodeCommitにアップロードします。
通常、アプリケーションにhooksディレクトリやScripsディレクトリを作成し、実行権を付与したスクリプトファイルを配置します。

AppSpec の「hooks」セクション
CodeDeployのApplicationStopイベントフックはどう実行される?

3-1 EC2インスタンスにIAMロールを作成する

EC2に以下のIAMロールのポリシーで作成し、EC2にアタッチする。

AmazonS3FullAccess

image.png

3-2 EC2インスタンスにCodeDeployエージェントをインストールする

wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x install
sudo ./install auto

3-3 CodeDeploy用のIAMロールを作成する

CodeDeployに以下のIAMロールのポリシーで作成する。

AWSCodeDeployRole

image.png

3-4 CodeDeployアプリケーションを用意する

[アプリケーション名]には、CodeBuildで決めたアプリケーション名を入力してください。
[コンピューティングプラットフォーム]は、EC2。
スクリーンショット 2019-03-27 19.42.25.png

デプロイグループの作成
[デプロイグループ名]に任意のものを入力。
スクリーンショット 2019-03-27 19.46.09.png

[サービスロール]は、「3-3 CodeDeploy用のIAMロールを作成する」で作成したものを選択。
スクリーンショット 2019-03-27 19.47.10.png

[デプロイタイプ]はインプレース。
スクリーンショット 2019-03-27 19.49.32.png

[環境設定]はAmazon EC2 インスタンス。
スクリーンショット 2019-03-27 19.50.20.png

[デプロイ設定]は、CodeDeployDefault.AllAtOne。
スクリーンショット 2019-03-27 19.53.03.png

[ロードバランサー]も指定。
スクリーンショット 2019-03-27 19.53.19.png

3-5 CodeBuildを開始する

CodeBuildから[Start build]
image.png

[Container] 2019/03/27 11:15:26 Waiting for agent ping
[Container] 2019/03/27 11:15:29 Waiting for DOWNLOAD_SOURCE
[Container] 2019/03/27 11:15:33 Phase is DOWNLOAD_SOURCE
[Container] 2019/03/27 11:15:33 CODEBUILD_SRC_DIR=/codebuild/output/src359827589/src/git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit
[Container] 2019/03/27 11:15:33 YAML location is /codebuild/output/src359827589/src/git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit/buildspec.yml
[Container] 2019/03/27 11:15:33 Processing environment variables
[Container] 2019/03/27 11:15:33 Moving to directory /codebuild/output/src359827589/src/git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/demo-codcommit
[Container] 2019/03/27 11:15:33 Registering with agent
[Container] 2019/03/27 11:15:33 Phases found in YAML: 1
[Container] 2019/03/27 11:15:33 BUILD: 1 commands
[Container] 2019/03/27 11:15:33 Phase complete: DOWNLOAD_SOURCE Success: true
[Container] 2019/03/27 11:15:33 Phase context status code: Message:
[Container] 2019/03/27 11:15:33 Entering phase INSTALL
[Container] 2019/03/27 11:15:33 Phase complete: INSTALL Success: true
[Container] 2019/03/27 11:15:33 Phase context status code: Message:
[Container] 2019/03/27 11:15:34 Entering phase PRE_BUILD
[Container] 2019/03/27 11:15:34 Phase complete: PRE_BUILD Success: true
[Container] 2019/03/27 11:15:34 Phase context status code: Message:
[Container] 2019/03/27 11:15:34 Entering phase BUILD
[Container] 2019/03/27 11:15:34 Running command aws deploy push --region ap-northeast-1 --application-name leomaro --s3-location s3://leomaro-codebuild/sample.zip --source src
To deploy with this revision, run:
aws deploy create-deployment --application-name leomaro --s3-location bucket=leomaro-codebuild,key=sample.zip,bundleType=zip,eTag=cc07369e1d36342a99f827d40358d26f,version=q_0JhOdGpyuCg5B1lsavI4Avd5lqnaFa --deployment-group-name <deployment-group-name> --deployment-config-name <deployment-config-name> --description <description>
 [Container] 2019/03/27 11:15:40 Phase complete: BUILD Success: true
[Container] 2019/03/27 11:15:40 Phase context status code: Message:
[Container] 2019/03/27 11:15:40 Entering phase POST_BUILD
[Container] 2019/03/27 11:15:40 Phase complete: POST_BUILD Success: true
[Container] 2019/03/27 11:15:40 Phase context status code: Message:
[Container] 2019/03/27 11:15:40 Expanding base directory path: src
[Container] 2019/03/27 11:15:40 Assembling file list
[Container] 2019/03/27 11:15:40 Expanding src
[Container] 2019/03/27 11:15:40 Expanding artifact file paths for base directory src
[Container] 2019/03/27 11:15:40 Assembling file list
[Container] 2019/03/27 11:15:40 Expanding **/*
[Container] 2019/03/27 11:15:40 Found 5 file(s)
[Container] 2019/03/27 11:15:40 Updating artifact name as sample.zip
[Container] 2019/03/27 11:15:40 Phase complete: UPLOAD_ARTIFACTS Success: true
[Container] 2019/03/27 11:15:40 Phase context status code: Message:

CodeDeployのRevisionに作成されていることがわかります。
image.png

3-6 デプロイする

作成されたRevisionを指定してデプロイしていきます。

[デプロイ]から[デプロイの作成]
スクリーンショット 2019-03-30 2.32.07.png

[デプロイグループ]は「3-4 CodeDeployアプリケーションを用意する」で作成されたものを指定。
[リビジョンの場所]で「3-5 CodeBuildを開始する」で作成されたものを指定。
スクリーンショット 2019-03-30 2.36.45.png

これでデプロイは完成です。

4.CodePipeline

  • 継続的デリバリーをサポートするサービス
  • Codecommit/CodeBuild/CodeDeployの流れをパイプラインとして定義することで、ソースコードがコミットされたらデプロイまで自動化

4-1 パイプラインを作成する

Step 1:パイプラインの設定を選択する
[パイプライン名]には任意の名前を入力。
[Service role]はNew service roleでここで新しく作成します。
[アーティファクトストア]はカスタムロケーションでS3バケットを指定します。
スクリーンショット 2019-03-30 3.07.17.png

Step 2:ソースステージを追加する
[ソースプロバイダー]はAWS Codecommitにし、「1.CodeCommit」で作成したものを指定していきます。
スクリーンショット 2019-03-30 3.10.24.png

Step 3:ビルドステージを追加する
[プロバイダーを構築する]はAWS CodeBuildにし、「2.CodeBuild」で作成したものを指定していきます。
スクリーンショット 2019-03-30 3.11.39.png

Step 4:デプロイステージを追加する
[デプロイプロバイダー]をAWS CodeDeployにし、「3.CodeDeploy」で作成したものを指定していきます。
スクリーンショット 2019-03-30 3.15.16.png

Step 5:レビュー
「パイプラインを作成する」

Pipeline作成時と、CodecommitのPush時に動作します。
なので、ここでは何も変わらないので次で動作を確認してみる。

4-2 CodecommitでPushし動作を確認する

ファイルを作成してPushする。

git add -A
git commit -m "fix."
git push origin master

コンソール上から動作しているか確認してみましょう。
スクリーンショット 2019-03-30 3.31.27.pngスクリーンショット 2019-03-30 3.31.47.pngスクリーンショット 2019-03-30 3.31.58.png

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
77