しばらくALBからECSに通信できず悩んでましたが、いろいろ試した結果やっと通信できました。
原因はListerRuleの設定周りだったみたいです。
いまだに仕組みがよくわかってませんが、少しずつロードバランサーの設定がわかってきて楽しいです。
自分のアプリでは/sampleというURLで文字列を返すだけのAPIを用意していて、そのAPIに通信できるかどうかで接続を確認しています。
ECSとALBを構築するCloudFormationのテンプレートはYouTubeに上がっていたチュートリアルのものを参考にしていて、少しずつ自分のアプリの仕様に合わせて動作を確認していたのですが、ポートマッピングは正しいはずなのにALBのDNS/sampleにアクセスしても503エラーになっていました。
その時のロードバランサーのListenerの設定が下記のように自分のアプリと関係ないチュートリアルの設定のままになっていました。
ListenerRule: Type: AWS::ElasticLoadBalancingV2::ListenerRule Properties: ListenerArn: !ImportValue Listener Priority: 2 Conditions: - Field: path-pattern Values: - /api/book* Actions: - TargetGroupArn: !Ref TargetGroup Type: forward
なので、まずは接続できることを確認したいということで以下のように/sampleを値に持つように変更しました。
ListenerRule: Type: AWS::ElasticLoadBalancingV2::ListenerRule Properties: ListenerArn: !ImportValue Listener Priority: 2 Conditions: - Field: path-pattern Values: - /sample # - /api/book* Actions: - TargetGroupArn: !Ref TargetGroup Type: forward
すると無事ALBのDNS/sampleでAPIからレスポンスが返ってきました。
ようやく一歩前進できて安心しました。
まあListenerの設定についてまだ基本的な部分が全然わかってないので、これから勉強してしっかりした設定に修正していこうと思います。
この週末はCloudFormationのテンプレートをどんどん修正して動作を確認します。
あとロードバランサーの基礎を勉強するにあたって何を見たり読んだりした方がいいかなと思っていろいろ探してたらAWS Black Beltが良さそうでした。
まず一回全体通して見て、それからは手を動かすことを大事にしつつ、壁にあたったらこちらの動画を見直して勉強していこうと思います。