ELBの操作は対象によって2種類のサービスを使い分ける必要がある

こんにちは。サービスグループの武田です。APIでELBを操作する場合、2種類のサービスを適切に使い分ける必要があります。
2022.04.20

こんにちは。サービスグループの武田です。

先日ELB(Elastic Load Balancing)の操作をAWS CLIですることがあったのですが、一部のリソースしか情報が取得できませんでした。調べてみるとELBは2種類のサービスが提供されており、目的に合わせて使い分ける必要がありました。

先に結論

CLBの操作ではelb、それ以外の操作ではelbv2を使いましょう。

どういうこと

ELBでは次の4種類のロードバランサが提供されています。

  • Classic Load Balancer
  • Application Load Balancer
  • Network Load Balancer
  • Gateway Load Balancer

CLBは従来から提供されていたロードバランサで、後の3つは新しく提供されるようになったものです。エンドポイントはelasticloadbalancingで共通なのですが、リクエスト/レスポンスのフォーマットが変わっていました。そのためCLBと他のもので別に用意したのでしょう。おおむね同じようなAPIが提供されていますが細かな挙動の違いには注意しましょう。

挙動の違いを見てみる

マネジメントコンソールで見るとELBが次のように3つあります。

よく見るとCLBが2個、ALBが1個あります。それではまずはelbで取得してみます。

$ aws elb describe-load-balancers | jq '.LoadBalancerDescriptions | length'
2

2個しか取れていません。またレスポンスのルートプロパティがLoadBalancerDescriptionsであることにも注目です。続いてelbv2で取得してみます。

$ aws elbv2 describe-load-balancers | jq '.LoadBalancers | length'
1

こちらは1個でした。ルートプロパティはLoadBalancersとなっています。特にフィルタリングなどしていませんが、このようにそもそも操作対象となるリソースが異なるわけです。

まとめ

今回はAWS CLIで試しましたが、boto3などAWS SDKでも同様に2種類提供されているはずです。普段あまりAPIでELBを触らない方はぜひ注意してください。操作対象がいずれなのか、または複数なのかによって適切に使い分けるようにしましょう。

参考URL