前提
- 構成ECS+ALB
##この解説の目的
ECSのネットワーク周りの設定でどこに何を設定すべきか度々わからなくなるので自分のための忘備録。
この設定をどこか間違えると502 Bat Gatewayとか受け取れます。
HTTPのみでSSLしない場合は、面倒なのですべてのポートを80に合わせて置くと、すべてのポートを80にしておけばいいので便利です。
この解説で取り扱う所:
ECSを使う時にポートを使う箇所のみ
お断り
この解説は編集時(2020/11/27)時点でのAWSコンソール上の記述をもとにしているため,
用語が変わってしまう可能性があります。
目次
- タスク定義のポート
- ECSのクラスター、サービスの追加時のロードバランサ
- セキュリティグループに追加すべきポート
1.タスク定義のポート
前提:
すでにECRにリポジトリがあり、イメージがpushされている
ECS/タスク定義/コンテナの編集
ポートマッピング/コンテナポート
- ここにはコンテナ化しているアプリが受け付けているポートを書く
- プロトコルは特にUDPに設定していない限りtcp
例: GolangのEcho使うと以下のようにサーバ起動時のportを指定するが、
ここに書かれているポート番号「1323」
main.go
e.Logger.Fatal(e.Start(":1323"))
2.ECSのクラスター、サービスの追加時のロードバランサ
この解説に含まれるもの
ECSの既存クラスターに新しくサービスを追加する際の「ロードバランサ用のコンテナ」のセクションのみ
設定箇所の用語の説明:
- プロダクションポート
└ ALBが外から受け付けるポート、HTTPを受け付けるなら80.HTTPSを受け付けるなら443など - プロダクションリスナープロトコル
└ALBが外から受け取るプロトコル
└例:サイトをssl化している場合はHTTPS443を設定する
└※注意※これはコンテナが受け付けているポートではない - ターゲットグループ
└このECSのサービスを含めるターゲットグループ
└これをALBに登録することで、特定のパスへのアクセスを指定のターゲットグループ(サービス)へ転送する - ターゲットグループのプロトコル
└ターゲットグループ内で使用されるプロトコル
└HTTP, HTTPSなど、大体はhttpだと思う - パスパターン
└このサービスに転送すべきパスパターン
└後でALBのリスナーのルールから変更可能 - ヘルスチェックパス
└ALBからヘルスチェックが実行されてるので正常時に200を返却するURLを用意する
└ /health_check といったpathを用意しておくのが一般的
3.セキュリティグループに追加すべきポート
- すべてのプロトコル、すべてのポートを開放していない限り以下を設定する
- 2で設定したターゲットグループのプロトコル、1で設定しているコンテナポートを設定しておく
例:アプリがTCP 1323ポートで動いている場合は
カスタムポート TCP 1323 ソース:属するVPC
ここの設定をしていないと、ALBからヘルスチェックですら到達できないので、ECS上で起動しているけどヘルスチェックで失敗する時はここも確認する