【学習記録】ALB、CloudFormationなどについてメモ

何かにアウトプットしながら勉強した方が吸収効率が良い実感がありますので、今日勉強したことを箇条書きで書きます。

ALB リスナーについて

リスナーは設定したプロトコルとポートを使用して接続リクエストをチェックするプロセスのこと。
これはAWSマネジメントコンソールに書いてある文言そのままですが、リスナーとはというのをはっきり定義した文言まだ読んでなかったのですっきりしました。

サブネットによってヘルスチェックの結果が違う

これは単純に自分の知識不足で上手く設定できていないだけだと思いますが、以下のリポジトリを参考に自分のDockerイメージをECSにデプロイしたところ、ap-northeast-1aではヘルスチェックが成功しますがap-northeast-1cでは失敗していました。

github.com

CloudFormationのテンプレートをよく読んでみてもアベイラビリティーゾーンによって挙動が変わりそうな設定は見つからず未だに謎です。
引き続き調べます。

GetAtt関数で参照できる項目

上記のリポジトリのCloudFormationテンプレートで以下のように!GetAtt関数でロードバランサーのDNSNameをOutputsに指定しているのですが、

Outputs:

  LoadBalancerDNS:
    Description: Domain name for the loadbalancer
    Value: !GetAtt LoadBalancer.DNSName
    Export:
      Name: 'DomainName'

GetAtt関数で参照できる項目ってたぶん決まってるんだろうけどどうやって調べたらいいのかなと思っていろいろ探したら、公式ドキュメントで調べることができるっぽいことがわかりました。 docs.aws.amazon.com

f:id:JunpeiNakasone:20210206171226p:plain

!Refと!ImportValueの使い分け

まだ根拠になるドキュメントは見つかってないですが、参考にしてるテンプレート見る限り同じテンプレート(ymlファイル)内のAWSリソースは!Refで参照できる。別のファイルのリソースのIDを参照する場合は参照元をOutputs:に指定して、参照先で!ImportValueで指定するっぽい。
最初は違いがよくわからずテンプレート読むのに苦戦してまいたがわかってくるとだいぶ読みやすくなりました。

ListenerRuleについて

ALBのListenerRuleは以下のように/*で指定するとどのAPI URLでもリクエストが返ってくることがわかった。ただベストな使い方ではないと思うのでもうちょっと良い設定を調べたいところ。

  ListenerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
      ListenerArn: !ImportValue Listener
      Priority: 2
      Conditions:
        - Field: path-pattern
          Values:
            - /*
CloudWatch

上記のリポジトリにあるCloudFormationテンプレートでリソースにCloudWatchも含まれていて、エラーになったAPIはCloudWatchでログが見れる。
CloudWatchは自分で構築したことがなかったのでこの機会に勉強します。 f:id:JunpeiNakasone:20210206113539p:plain

雑感

勉強する中でちょっとした発見とか知識が増えていってはいますが、まだまだそれぞれがバラバラな印象です。
しかし時々点が繋がって線になる感じで、それぞれの関係性が見えてくると一気に理解が深まる時があります。

いろいろ試行錯誤しながら勉強続けます。