ELBの操作は対象によって2種類のサービスを使い分ける必要がある
こんにちは。サービスグループの武田です。
先日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を触らない方はぜひ注意してください。操作対象がいずれなのか、または複数なのかによって適切に使い分けるようにしましょう。