CircleCI+ECS+ECR環境でDockerコンテナのCD(継続的デプロイ)環境を構築する -前編-
コンニチハ、最近Dockerを沢山使っている千葉です。今回はDockerを使った継続的インテグレーションやデプロイを試してみました。
継続的インテグレーションは一度導入すると破壊力抜群でとても効率的な開発ができるようになるため、これを機会に試してみたいと思います!
CircleCI+ECS+ECR環境を使ってDockerコンテナを継続的デプロイする環境を作ってみました。初めての方でも雰囲気つかめるように、ECR,ECSのセットアップからCircleCIのセットアップまで一通りやろうと思います!
動作としては以下のようになります。図にするとこんな感じです。
- GitHub上にECRへのデプロイ用のシェル、CircleCI用の設定ファイル、Dockerfile、コンテンツ(index.html)をpushする
- GitHubへのpushをトリガーに、CircleCI上でDockerfileよりコンテナ作成(コンテンツもコピーする)し、ECRへpushする
- ECRのコンテナをECSへデプロイする
長くなりそうなので、前編・後編に分けて記載したいと思います。
- 前編はAWS環境の構築として、ECSとECRを構築します。
- 後編はCircleCIのセットアップとAWS環境の連携部分を構築します。
AWS環境構築
それでは、早速環境を構築します。20160511時点でECRがバージニアでしか利用できないので、バージニアリージョンで作業をします。
誤記でした。ECRは20160511時点でオレゴン、アイルランド、バージニアにて利用可能となります。
ECRのセットアップ
まずは、ECRにリポジトリを作成します。ECRの画面より、
リポジトリ名は「nginx-sample-webapp」とします
次の画面では何もせずに、「Done」をクリックします。
Task Definitionの作成
今度はECSの画面へ移動します。Task Definitionを作成します。ここの設定はデプロ時に更新されるのでダミーの設定で大丈夫です。
名前は「nginx-sample-webapp」にします。Add containerをクリックします。
名前は「nginx-sample-webapp」にします。
Createをクリックします。
ECSのセットアップ
ECSクラスタを作成します。
クラスタ名を入力します。「sample-webapp-cluster」とします。
作成したクラスタを選択します。クラスタにサービスを登録します。
サービス名は「sample-webapp-service」とします。タスクの数は2とします。
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にクラスタとして自動で登録されます。
まとめ
ECSとECRの環境を構築しました。後編ではCircleCIからDockerコンテナをデプロイするところまでをやってみたいと思います。お楽しみに。