LoginSignup
1
0

More than 3 years have passed since last update.

初学者によるDocker理解まとめ⑥ 〜CodeDeployとCodePipelineを使ってEC2インスタンスにdockerコンテナを自動デプロイするまで〜

Last updated at Posted at 2020-10-26

はじめに

ようやくDockerを学び始めたので自分の理解をまとめておく。

前回 => https://qiita.com/theFirstPenguin/items/bdaf0035e7b44cd33822

やったこと

  • 前回の続き
  • 前回はgithubのレポジトリをgit cloneし、updateの度にgit pull + docker-compose upしていた。
  • 上記の一連の動作をCodeDeployを使って置換する
  • CodePipelineを使って上記一連の流れを自動化する スクリーンショット 2020-10-26 17.09.52.png

そして今回もdockerはあまり関係ありません。。

前提

前々回の時点でEC2インスタンスを起動してdockerdocker-composeをインストールできている状態。
スクリーンショット 2020-10-26 14.05.06.png

手順

  • EC2インスタンスにCodeDeployエージェントをインストール
  • AWSCodeDeployRoleポリシーをアタッチしたIAMロールを作成し、EC2インスタンスにアタッチ
  • CodeDeployの設定
    • アプリケーションの作成
    • デプロイメントグループの作成
    • appspec.ymlApplicationStart.bashの作成
    • デプロイの作成
  • CodePipelineの設定

EC2インスタンスにCodeDeployエージェントをインストール

ここここを参照

# まずはEC2にログイン
ssh -i "ec2-key.pem" ec2-user@XXX.YYY.ZZZ.XXX

# インストール
sudo yum update
sudo yum install ruby
sudo yum install wget
cd /home/ec2-user

# ここは環境ごとにbucket-nameとregion-identifierを変更する
wget https://bucket-name.s3.region-identifier.amazonaws.com/latest/install

chmod +x ./install
sudo ./install auto
sudo service codedeploy-agent status

ちなみに、上記をインスタンス起動設定のユーザーデータに記載しておけば、AutoScallingなどのインスタンス作成時に自動的に実行される。今回は関係ないけど。

AWSCodeDeployRoleポリシーをアタッチしたIAMロールを作成し、EC2インスタンスにアタッチ

まずはIAMコンソールからロールの作成を選択

スクリーンショット 2020-10-26 14.32.48.png

エンティティとしてEC2を選択

スクリーンショット 2020-10-26 14.33.52.png

AWSCodeDeployRoleポリシーをアタッチ

スクリーンショット 2020-10-26 14.36.52.png

適当なタグとロール名をつけて、ロールを作成

スクリーンショット 2020-10-26 14.44.15.png

EC2インスタンスに作成したロールをアタッチ

スクリーンショット 2020-10-26 15.04.28.png
スクリーンショット 2020-10-26 15.08.38.png

CodeDeployの設定

まずはCodeDeployコンソール

スクリーンショット 2020-10-26 15.11.27.png

アプリケーションの設定

プラットフォームはEC2を選択
スクリーンショット 2020-10-26 15.13.19.png

CodeDeployのためのロールを作成

先ほどのEC2のためのロール作成と同じ手順。
スクリーンショット 2020-10-26 15.17.19.png
スクリーンショット 2020-10-26 15.18.27.png
スクリーンショット 2020-10-26 15.21.05.png

作成したアプリケーションに、デプロイグループを作成

デプロイグループ名は適当に。
サービスロールは先ほど作成したCodeDeployのためのロールをアタッチ。
スクリーンショット 2020-10-26 15.23.08.png

デプロイタイプはインプレースを選択。
環境設定はEC"インスタンスを設定。
ここでは、どのEC2にデプロイするかを判定するためにタグを使う。選択したタグをもつ全てのEC2にデプロイされる。
同時にいくつものEC2にデプロイするためには便利。

スクリーンショット 2020-10-26 15.24.48.png

デプロイ設定はデフォルトを指定。
今回はLoad balancerを使わない。

スクリーンショット 2020-10-26 15.30.06.png

appspec.ymlApplicationStart.bashの作成

gitレポジトリと連携させてコードをデプロイするのだが、ソースコードに加え、どうやってデプロイするかを記述したファイルをgitレポジトリのルートディレクトリに保存する必要がある。そしてファイル名はappspec.ymlで固定。
具体的な書き方はこちらこちらの記事を参照させていただいた。
ありがとうございます。

appspec.yml
version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/simple-docker-pjt
    runas: ec2-user
permissions:
  - object: /
    pattern: '**'
    owner: ec2-user
    group: ec2-user
hooks:
  ApplicationStart:
    - location: scripts/ApplicationStart.bash
      runas: ec2-user

また、appspec.ymlにしたがって、EC2にコードをコピーインストールした後、実際にdocker-compose upをする必要がある。
それをApplicationStart.bashに記述する。
くれぐれもdocker-compose up -d-dの部分にお気をつけください。バックグラウンドで実行しないと、永遠にデプロイが終わりません。

/scripts/ApplicationStart.bash
#!/bin/bash -e
cd /home/ec2-user/simple-docker-pjt
sudo systemctl start docker
docker-compose up -d

デプロイの作成

アプリケーションを選択し、「デプロイの作成」、をクリック。
スクリーンショット 2020-10-26 15.35.34.png
「リビジョンタイプ」にgithubを選択し、トークン名として自分のアカウント名を記入。そして接続する。
また、接続先のレポジトリ名とデプロイしたい任意の時点のコミットIDを指定する。
スクリーンショット 2020-10-26 15.37.32.png

これでデプロイを作成すれば、問題なくデプロイできるはず。ここまで来ました。
スクリーンショット 2020-10-26 17.12.02.png

CodePipelineの設定

パイプラインを作成する

CodePipelineのコンソールから新しいパイプラインを作成する。
パイプライン名を適当に設定すると、自動でサービスロール名も設定される。
スクリーンショット 2020-10-26 17.16.52.png

ソースステージはgithub(ver.1)を選択し、自分のアカウントに接続する。
スクリーンショット 2020-10-26 17.18.54.png

レポジトリとブランチを選択する。
スクリーンショット 2020-10-26 17.21.23.png

ビルドステージは(今回はビルド不要の言語なので)スキップする
スクリーンショット 2020-10-26 17.23.29.png

デプロイプロバイダーはCodeDeployを選択し、先ほど作成したアプリケーションとデプロイグループを選択する。
スクリーンショット 2020-10-26 17.26.51.png

EC2にS3へのアクセス権限を追加する。

EC2がCodePipelineを利用するためには、S3へのアクセスが必要となる。
そのため、先ほどEC2にアタッチしたロールにAmazonS3FullAccessポリシーを追加でアタッチする。
スクリーンショット 2020-10-26 17.30.21.png

これで設定ができました。
gitにコードをpushすると自動的にEC2にデプロイされます。
スクリーンショット 2020-10-26 17.09.52.png

参考サイト

くろかわさんのyoutube。いつも参考にさせていただいております。
https://youtu.be/8mPm7jolnVk

1
0
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
1
0