📘
No.4【AWS】ECS Fargate+CodePipeline - ECS Fargate設定編
はじめに
この記事は以下の続きとなる。
つまづきポイント
構築する環境構成

構築手順
セキュリティグループ設定
以下、セキュリティグループを作成する。
ECSに設定するセキュリティグループ
| 役割 | IN/OUT | IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|---|---|---|
| ECS Fargate用 | IN | IPv4 | カスタムCP | TCP | 8080 | 0.0.0.0/0 |
| ECS Fargate用 | OUT | IPv4 | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
ALBに設定するセキュリティグループ
| 役割 | IN/OUT | IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|---|---|---|
| ALB用 | IN | IPv4 | カスタムCP | TCP | 80 | 自分のIP/32 |
| ALB用 | OUT | IPv4 | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
エンドポイントに設定するセキュリティグループ
| 役割 | IN/OUT | IPバージョン | タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|---|---|---|
| ALB用 | IN | IPv4 | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
| ALB用 | OUT | IPv4 | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
エンドポイント設定
以下、エンドポイントをPrivateサブネットに設定する。
| サービス名 | エンドポイントタイプ |
|---|---|
| com.amazonaws.リージョン.ecr.dkr | Interface |
| com.amazonaws.リージョン.logs | Interface |
| com.amazonaws.リージョン.ecr.api | Interface |
| com.amazonaws.リージョン.s3 | Gateway |
ALB設定
ダミーのターゲットグループを作成する。
-
EC2→ターゲットグループよりターゲットグループ作成画面に遷移する。 - 以下設定でターゲットグループを作成する。
-
IP addressを選択する。

-
VPCはECSを動かすために作成した対象のVPCを選択する。

-
最終的にこのダミーターゲットグループは削除するためその他設定は適宜設定する。
ALBを作成する。
-
EC2→ロードバランサーよりロードバランサー作成画面に遷移する。 - 以下設定でロードバランサーを作成する。
- ALBを選択する。
- Schemeは
Internet-facingでIPv4を選択する。 - ALB名は任意の名前を設定する。
- VPCはECSを動かすために作成した対象のVPCを選択し、privateサブネットを選択する。
- セキュリティグループは上記で作成したものを選択する。
- リスナーは上記で作成したダミーターゲットグループを選択する。
ダミーターゲットグループを削除
ALBに設定したターゲットグループを設定から外し削除する。
-
EC2→ロードバランサーより作成したALBを選択する。 -
Listenersタブより設定されているリスナーを削除する。
-
EC2→ターゲットグループより作成したダミーターゲットグループを削除する。
ECS Fargate設定
クラスタ作成
-
Elastic Container Service→クラスターの作成よりクラスター新規作成画面へ遷移する。 - 以下設定でクラスターの作成をする。
- クラススター名は任意の名前を設定する。
- VPCはECSを動かすために作成した対象のVPCを選択し、privateサブネットを選択する。
タスク定義作成
-
Elastic Container Service→タスク定義より新規タスク定義作成画面へ遷移する。 - 以下、タスク定義とコンテナの設定をする。
- タスク定義名は任意の名前を設定する。
-
名前にはコンテナ名を指定する。 -
イメージURIには作成したコンテナイメージを管理しているECRのリポジトリを以下書式で指定する。
<ECRリポジトリのURL>/イメージ:タグ
今回の例では以下のように設定する。
<aws id>.dkr.ecr.<リージョン>.amazonaws.com/node-sample:latest
- コンテナが提供するサービスのポート番号を指定する。今回は8080を設定する。
- 以下、環境設定をする。
- 環境が
Fargateが選択されていることを確認する。
- アーキテクチャを選択する。今回はCloud9上でビルドしたイメージのため、それにあわせて
x86_64を設定する。
- 動かすサービスにあわせてタスクサイズを設定する。
-
タスク実行ロールにecsTaskExeuionRoleを設定する。
サービス作成
-
Elastic Container Service→作成したクラスター選択→サービスタブ→作成からサービス作成画面に遷移する。 - 以下、サービス設定をする。
-
コンピューティング設定が
キャパシティープロバイダー戦略が選択されていることを確認する。

-
アプリケーションタイプが
サービスを選択していることを確認する。

-
作成したタスク定義を選択する。リビジョンは最新の物を選択する。

-
サービス名は任意の名前を設定する。 -
必要なタスクは起動するタスク数を記入する。 -
VPCはECSを動かすために作成したものを選択する。
-
サブネットはprivateサブネットのみを選択する。

-
作成したセキュリティグループを選択する。

-
privateサブネットでECSを起動する場合はパブリックなIPは不要なためパブリックIPはオフにする。

-
ロードバランシングオプションでApplication Load Balancerを選択する。

-
既存のロードバランサーを使用を選択し作成したALBを選択する。

-
新しいリスナーを作成を選択する。 -
ポート番号:80プロトコル:HTTPを設定する。

-
新しいターゲットグループの作成を選択する。 -
任意のターゲットグループ名を設定する。

-
Auto Scaling設定が必要な場合は
Auto Scalingオプションにチェックを入れて設定する。今回は割愛。

動作確認
- サービスを作成するとCloudFormationが実行されサービスが作成される。
- 作成したALBの
DNS nameに対してブラウザからアクセスする。
以下のように出力されたら構築成功。
動かない時の切り分け
- 今まで何回かECS環境を構築してきたが一発でうまく動いたためしがない。
- そのため、切り分け時のチェックポイントをメモしておく。
- コンテナは起動しているか。
タスク定義→実行中のタスクのリビジョン→コンテナタブを確認すると
コンテナの起動状態と失敗時のログが確認できる。 - コンテナイメージをpullできているか。
- pullに失敗している場合、
privateサブネットからECRへのアクセスに失敗していると思われる。 - エンドポイントの設定やエンドポイントに設定したセキュリティグループを見直す。
- ECSのタスク定義からパブリックIPを付与する設定にしてpublicサブネットで立ち上げて、
ECRとインターネットGW経由で接続できるか確認するのも有効。
- ターゲットグループに立ち上げたECSタスクが認識されているか。
コンテナが立ち上がっていてターゲットグループに
ECSタスクが表示されない場合はprivateサブネットとpublicサブネット間の
通信に問題がある場合が多い。
Discussion