ELBの種類によるクロスゾーン負荷分散のデフォルト値調べ

クロスゾーン負荷分散のデフォルト値がELBの各種類、作成方法によって異なることを調べました。
2020.07.21

こんにちは、網走の大村です。
クロスゾーン負荷分散のデフォルト値がELBの各種類、作成方法によって異なることを調べました。

クロスゾーン負荷分散とは

例えばアベイラビリティーゾーンが2つあり、各アベイラビリティーゾーンにターゲットノード(EC2インスタンス)の起動数に偏りがあってもトラフィックを均等に各EC2インスタンスへ分散する機能です。

ELBの種類毎のデフォルト値

ELBの種類と作り方によってもデフォルトの設定値が異なっていることを知ったので整理しました。

クロスゾーン負荷分散デフォルト設定値

ELBの種類 マネジメントコンソールから作成 API/CLIから作成
Application Load Balancer 有効 有効
Network Load Balancer 無効 無効
Classic Load Balancer 有効 無効

検証してみた

各ELBをマネジメントコンソールから作成しAWS CLIでパラメータを確認します。CLBはCLIからも作成して、デフォルト値が異なることを確認します。

ALB マネジメントコンソールからの作成結果

クロスゾーン負荷分散の項目がない。気になったので後述します。

aws elbv2 describe-load-balancer-attributes --load-balancer-arn "arn:aws:elasticloadbalancing:ap-northeast-1:000000000000:loadbalancer/app/alb-manual/f9d660c7ffa7619b" --output table
----------------------------------------------------------------
|                DescribeLoadBalancerAttributes                |
+--------------------------------------------------------------+
||                         Attributes                         ||
|+---------------------------------------------------+--------+|
||                        Key                        | Value  ||
|+---------------------------------------------------+--------+|
||  access_logs.s3.enabled                           |  false ||
||  access_logs.s3.bucket                            |        ||
||  access_logs.s3.prefix                            |        ||
||  idle_timeout.timeout_seconds                     |  60    ||
||  deletion_protection.enabled                      |  false ||
||  routing.http2.enabled                            |  true  ||
||  routing.http.drop_invalid_header_fields.enabled  |  false ||
|+---------------------------------------------------+--------+|

NLB マネジメントコンソールからの作成結果

クロスゾーン負荷分散は無効

aws elbv2 describe-load-balancer-attributes --load-balancer-arn "arn:aws:elasticloadbalancing:ap-northeast-1:000000000000:loadbalancer/net/nlb-manual/ad789b64a430a8fa" --output table
--------------------------------------------------
|         DescribeLoadBalancerAttributes         |
+------------------------------------------------+
||                  Attributes                  ||
|+-------------------------------------+--------+|
||                 Key                 | Value  ||
|+-------------------------------------+--------+|
||  access_logs.s3.enabled             |  false ||
||  load_balancing.cross_zone.enabled  |  false ||
||  access_logs.s3.prefix              |        ||
||  deletion_protection.enabled        |  false ||
||  access_logs.s3.bucket              |        ||
|+-------------------------------------+--------+|

CLB マネジメントコンソールからの作成結果

クロスゾーン負荷分散は有効

aws elb describe-load-balancer-attributes --load-balancer-name "clb-manual" --output table
--------------------------------
|DescribeLoadBalancerAttributes|
+------------------------------+
||   LoadBalancerAttributes   ||
|+----------------------------+|
|||         AccessLog        |||
||+-------------+------------+||
|||  Enabled    |  False     |||
||+-------------+------------+||
|||    ConnectionDraining    |||
||+------------+-------------+||
|||   Enabled  |   Timeout   |||
||+------------+-------------+||
|||  True      |  300        |||
||+------------+-------------+||
|||    ConnectionSettings    |||
||+------------------+-------+||
|||  IdleTimeout     |  60   |||
||+------------------+-------+||
|||  CrossZoneLoadBalancing  |||
||+--------------+-----------+||
|||  Enabled     |  True     |||
||+--------------+-----------+||

CLB AWS CLIからの作成結果

クロスゾーン負荷分散は無効。CLIから作成するとドキュメントの通り無効で作成されることを確認できました。

aws elb create-load-balancer --load-balancer-name clb-cli --listeners "Protocol=HTTP,LoadBalancerPort=80,InstanceProtocol=HTTP,InstancePort=80" --subnets subnet-05ce64dcf64bd3d83 --security-groups sg-02b9ebe110bf9ae04
aws elb describe-load-balancer-attributes --load-balancer-name "clb-cli" --output table
--------------------------------
|DescribeLoadBalancerAttributes|
+------------------------------+
||   LoadBalancerAttributes   ||
|+----------------------------+|
|||         AccessLog        |||
||+-------------+------------+||
|||  Enabled    |  False     |||
||+-------------+------------+||
|||    ConnectionDraining    |||
||+------------+-------------+||
|||   Enabled  |   Timeout   |||
||+------------+-------------+||
|||  False     |  300        |||
||+------------+-------------+||
|||    ConnectionSettings    |||
||+------------------+-------+||
|||  IdleTimeout     |  60   |||
||+------------------+-------+||
|||  CrossZoneLoadBalancing  |||
||+-------------+------------+||
|||  Enabled    |  False     |||
||+-------------+------------+||

ALBのクロスゾーン負荷分散の項目がなかったので気になった

Application Load Balancer では、クロスゾーン負荷分散が常に有効になっています。

常にと言うことは無効にもできないというか。

Elastic Load Balancing の詳細 - Elastic Load Balancing

おわりに

AWS SAPの勉強中に調べ物していた際に今回のドキュメントにたどり着き、気になったので試してみました。ALBではあえて無効できないこと、NLBはデフォルト値が無効であることを知れたのが収穫。