CircleCI+ECS+ECR環境でDockerコンテナのCD(継続的デプロイ)環境を構築する -前編-

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、最近Dockerを沢山使っている千葉です。今回はDockerを使った継続的インテグレーションやデプロイを試してみました。

継続的インテグレーションは一度導入すると破壊力抜群でとても効率的な開発ができるようになるため、これを機会に試してみたいと思います!

CircleCI+ECS+ECR環境を使ってDockerコンテナを継続的デプロイする環境を作ってみました。初めての方でも雰囲気つかめるように、ECR,ECSのセットアップからCircleCIのセットアップまで一通りやろうと思います!

動作としては以下のようになります。図にするとこんな感じです。

20160511-circleci-ecs-ecr-cd-1

  1. GitHub上にECRへのデプロイ用のシェル、CircleCI用の設定ファイル、Dockerfile、コンテンツ(index.html)をpushする
  2. GitHubへのpushをトリガーに、CircleCI上でDockerfileよりコンテナ作成(コンテンツもコピーする)し、ECRへpushする
  3. ECRのコンテナをECSへデプロイする

長くなりそうなので、前編・後編に分けて記載したいと思います。

  • 前編はAWS環境の構築として、ECSとECRを構築します。
  • 後編はCircleCIのセットアップとAWS環境の連携部分を構築します。

AWS環境構築

それでは、早速環境を構築します。20160511時点でECRがバージニアでしか利用できないので、バージニアリージョンで作業をします。

誤記でした。ECRは20160511時点でオレゴン、アイルランド、バージニアにて利用可能となります。

ECRのセットアップ

まずは、ECRにリポジトリを作成します。ECRの画面より、

20160511-circleci-ecs-ecr-cd-2

リポジトリ名は「nginx-sample-webapp」とします

次の画面では何もせずに、「Done」をクリックします。

Task Definitionの作成

今度はECSの画面へ移動します。Task Definitionを作成します。ここの設定はデプロ時に更新されるのでダミーの設定で大丈夫です。

20160511-circleci-ecs-ecr-cd-5

名前は「nginx-sample-webapp」にします。Add containerをクリックします。

20160511-circleci-ecs-ecr-cd-6

名前は「nginx-sample-webapp」にします。

20160511-circleci-ecs-ecr-cd-7

Createをクリックします。

20160511-circleci-ecs-ecr-cd-8

ECSのセットアップ

ECSクラスタを作成します。

20160511-circleci-ecs-ecr-cd-4

クラスタ名を入力します。「sample-webapp-cluster」とします。

20160511-circleci-ecs-ecr-cd-5

作成したクラスタを選択します。クラスタにサービスを登録します。

20160511-circleci-ecs-ecr-cd-10

サービス名は「sample-webapp-service」とします。タスクの数は2とします。

20160511-circleci-ecs-ecr-cd-11

ECSクラスタを起動する

EC2を起動します。 ポイントは、

  • AMI-IDにはami-a1fa1accを指定します(ECSエージェントがインストールされたイメージです)
  • EC2インスタンス数を2にします
  • EC2にロールをアタッチします。「AmazonEC2ContainerServiceforEC2Role」ポリシーを付与します
  • パブリックIPを有効化
  • セキュリティグループで80ポートを開ける
  • UserDataに以下を指定します。
#!/bin/bash
echo ECS_CLUSTER=sample-webapp-cluster >> /etc/ecs/ecs.config

EC2インスタンスが起動すると、ECSにクラスタとして自動で登録されます。

20160511-circleci-ecs-ecr-cd-12

まとめ

ECSとECRの環境を構築しました。後編ではCircleCIからDockerコンテナをデプロイするところまでをやってみたいと思います。お楽しみに。

参考