AWS の Fargate のロードバランサーの設定でめちゃくちゃハマった

AWS のFargate でめちゃくちゃハマった

結論からいうと動かない原因は、ロードバランサーのターゲットの種類はipである必要があった。

f:id:ororog:20181018181507p:plain

これは公式ドキュメントにも当然書いてある
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/AWS_Fargate.html

awsvpc ネットワークモードを使用するタスクを含むサービス (例: 起動タイプが Fargate のサービス) では ... ターゲットタイプとして instance ではなく、ip を選択する必要があります。

この問題にハマるポイントは2つあって、

  • ターゲットの種類のデフォルトは instance なので、特に何も考えずに設定すると instance になってしまう
  • サービスを Fargate で構築する時、ターゲットグループが instance のロードバランサーも選択できてしまう

と、いう問題がある。特に二番目は検出して警告なり出してほしい。

ちょろっとハマったところ

ロードバランサーのアベイラビリティ〜ゾーンは、サービスと合わせる

ここと

f:id:ororog:20181018182229p:plain

ここ

f:id:ororog:20181018182420p:plain


ヘルスチェックのパスはちゃんと応答するところにする(404とかじゃだめ)
つまり当たり前かもしれないけど、Fargate はHTTP(S)サーバーじゃないとだめ。
f:id:ororog:20181018182630p:plain

パブリック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