前提
Dockerのコンテナが継続的にデプロイされる環境をCircleCIとAmazon ECS, ECRをセットアップし、Assetsファイル(CSS、JS)をs3のバケットに入れCloudFrontに送りデプロイする作業を行いました。
その一連の流れについて簡単にまとめてみたいと思います。
大まかな手順
ECS+ECR側のセットアップ
- ECSクラスターを作成する
- コンテナインスタンスを作成する(今回はEC2を選びました)
- ECRリポジトリを作成する
- ECSのタスク定義を作成する
- ALBの作成をする
- ECSサービスの作成をする
S3+CloudFrontのセットアップ
- S3のバケットを作成する
- CloudFrontのアカウントを作成する
- CloudFrontのOrign NameにS3のバケットを指定する
- Alternate Domain Names (CNAMEs)を指定する
- CloudFrontの諸々のチューニングをする
全体図
ECS+ECR側のセットアップについて
1. ECSクラスターを作成する
そもそもECSとは?
2. コンテナインスタンスを作成する (今回はEC2を選びました)
- AMIはamzn2-ami-ecs-hvm-2.0を選択する
- インスタンスサイズは一旦t2.microを選択する
- ネットワーク(vpc)を選択する
- サブネットを選択する
- IAMロールでecsのInstanceのロール(作成済み)を選択する
- ユーザーデータを以下のように入力する
- YOUR_CLUSTER_NAMEのところにクラスター名を入れる
#!/bin/bash
echo ECS_CLUSTER=YOUR_CLUSTER_NAME >> /etc/ecs/ecs.config
- 新しいセキュリティグループを作成する
- キーペアを作成する
3. ECRリポジトリを作成する
そもそもECRとは?
4.ECSのタスク定義を作成する
- タイプはEC2を選択する
- 定義名を入れる ex) sample-task
- ロールはecsTaskExecutionRoleを選択する
- ネットワークはbridgeを選択する
- ネットワークについて知りたい場合はこのサイトを参考にするといい
- タスクサイズはここでは選択せずコンテナでサイズを選択する
- コンテナ名を入力する ex) sample-app
- イメージに先ほど作成したECR URIにタグをつけて入力する ex) xxxxxxxxxxxxx.com/sample-repository:latest
- メモリ制限を入れる
- 最初は300-500でいいかも
- ポートは動的ポートマッピングにしたいのでホストを0でコンテナを80にしておく
5.ALBの作成をする
- ALB名を入れる ex) alb-sample
- リスナーを入れる ex) HTTP, HTTPS
- アベイラビリティーゾーンを入れ、 vpcをEC2インスタンス作成時の時と同じものを選ぶ
- サブネットを選択する
- サーバー証明書を選択する
- セキュリティグループはEC2インスタンス作成時に作ったものを選択する
- ターゲットグループを新しく作成する
- ターゲットの種類はインスタンスを選択する
6. ECSサービスの作成をする
- 起動タイプはEC2を選択する
- タスクは先ほど作成したものを選択する ex) sample-task
- クラスターは先ほど作成したものを選択する ex) sample-cluster
- サービス名を入力する ex) sample-service
- タスク数は今のところ1を選択する
- ALBは先ほど選択したものを選ぶ
- ターゲットグループは先ほど作ったものを選択する
以上が大まかなECSとECRのセットアップ手順です。
S3+CloudFrontのセットアップ
これは次の記事にまとめていこうと思います!!