AWS の Fargate のロードバランサーの設定でめちゃくちゃハマった
AWS のFargate でめちゃくちゃハマった
結論からいうと動かない原因は、ロードバランサーのターゲットの種類はipである必要があった。
これは公式ドキュメントにも当然書いてある
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/AWS_Fargate.html
awsvpc ネットワークモードを使用するタスクを含むサービス (例: 起動タイプが Fargate のサービス) では ... ターゲットタイプとして instance ではなく、ip を選択する必要があります。
この問題にハマるポイントは2つあって、
- ターゲットの種類のデフォルトは instance なので、特に何も考えずに設定すると instance になってしまう
- サービスを Fargate で構築する時、ターゲットグループが instance のロードバランサーも選択できてしまう
と、いう問題がある。特に二番目は検出して警告なり出してほしい。
ちょろっとハマったところ
ロードバランサーのアベイラビリティ〜ゾーンは、サービスと合わせる
ここと
ここ
ヘルスチェックのパスはちゃんと応答するところにする(404とかじゃだめ)
つまり当たり前かもしれないけど、Fargate はHTTP(S)サーバーじゃないとだめ。
パブリックIP の自動割当は ENABLED のほうが良さそう。
サービスをコンテナから作る前提で、docker pull するためには public ip が必要だと思われるので。でももしかしたら VPC 内から docker pull できれば public ip 必要ない気もする。セキュリティ的にアクセスできないほうがいいし。
どうしても動かないときは
公式のチュートリアルにそって動かせばとりあえず動くと思うので、動くものと動かないものを比較して考えるか、公式のドキュメントを1から読むのがいいと思う(動かないときにググるのが難しい)
https://ap-northeast-1.console.aws.amazon.com/ecs/home?region=ap-northeast-1#/firstRun