📘
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