AWSのELB(Elastic Load Balancing)についてまとめています。
AWSのELBは、負荷分散機能 4種類のロードバランサー
ELBはEC2インスタンスのロードバランス機能。ELBには、ウェブアプリケーションのトラフィックを負荷分散するApplication Load Balancer、ネットワークの負荷分散をおこなうNetwork Load Balancer、サードパーティの仮想ネットワークを負荷分散するGateway Load Balancer、EC2インスタンスを負荷分散するClassic Load Balancerがあります。
Application Load Balancer(ALB) は、HTTPやHTTPSのトラフィックの負荷分散用のロードバランサー。マイクロサービスやコンテナなどの、アプリケーションアーキテクチャを対象にリクエストの振り分け(リクエストルーティング)が可能です。Application Load Balancer は、Amazon VPC 内のターゲットにトラフィックの振り分けをおこないます。
Network Load Balancer(NLB) は、Transmission Control Protocol (TCP)、User Datagram Protocol (UDP)、 Transport Layer Security (TLS)の負荷分散に使います。遅延を最小限におさえつつ、1秒に数百万件のリクエストを処理できます。
Gateway Load Balancer(GLB)は、IPベースでの負荷分散に使います。サードパーティーの仮想ネットワークアプライアンスのデプロイ、拡張、実行に使います。サードパーティーアプライアンスの負荷分散と Auto Scalingが可能なGateway Load Balancer は、トラフィックの送信元・送信先に対して透過性があり、セキュリティ製品などとの連携が可能。
Classic Load Balancer は、旧式のロードバランサー。HTTPやHTTPS、TCPの負荷分散に使います。いわゆるフツーの負荷分散機能というわけですね。Classic Load Balancer は、EC2-Classic ネットワーク上に構築されたアプリケーションを対象に振り分けをおこないます。
HTTP/HTTPSベースで負荷分散をおこなうならALB、TCP、UDB、TLSベースで負荷分散をおこなうならNLB、IPベースで負荷分散をおこなうならGLBの3択から選ぶことになるでしょう。例外的に、アプリケーションがEC2 Classicネットワーク内に構築されている場合は、Classic Load Balancer を使用する必要があります。
AWS ELBの利点
ELBには、高可用性及び伸縮性、堅牢なセキュリティとモニタリング機能があるのがポイント。
Elastic Load Balancing は GSLB(グローバルサーバー負荷分散)を使わずにリージョン全体でアプリケーションの負荷分散をおこない、高可用性を実現。アベイラビリティゾーンなど、障害境界を意識して運用しなくてもよいフルマネージドサービスなんですね。容量はアプリケーションサーバの使用率をベースに自動で追加・削除されるため、トラフィックの急激な変化(スパイク)にも柔軟に対応できます。
ELBのセキュリティは、Amazon Virtual Private Cloud (VPC) での証明書管理、ユーザー認証および SSL/TLS 復号の統合などの堅牢なセキュリティ機能を提供。TLS設定の集中管理をおこない、集中的にCPUを使うアプリの不可を柔軟にバランシングします。Application Load Balancer は、AWS WAFとの統合もサポートしていて、webアプリケーションレベルでのフィルタリングが可能。悪意のあるユーザがアプリケーションに辿り着く前に保護します。
ELBを使うと、アプリの状態とパフォーマンスをリアルタイムでモニタリングできます。Amazon CloudWatch メトリクス、ロギング、リクエスト追跡を使って、アプリケーションの動作をより詳しく把握できるようになるんですね。その結果、問題の発見やアプリケーションスタックでのパフォーマンスボトルネックがどこか、問題点の特定がおこなえるようになります。ELB は、アプリケーションのサービスレベルアグリーメント (SLA)を保証するためにも役立ちます。
ほかにも、Elastic Load Balancing は、HTTP/2、gRPC、TLS オフロード、ルールベースのルーティング、コンテナサービスとの統合など、コンテナベースのワークロードに必要な機能をサポート。EC2、ECS/EKS、Global Accelerator、AWS CloudFormation や AWS 請求などの運用ツールと統合されています。
AWS ELBの使い方
ELBは、AWSマネジメントコンソールによるウェブインターフェースか、AWS CLIによるコマンドラインインタフェースからロードバランサーの作成やアクセス、管理が可能です。AWS SDKやクエリAPIを使ったアクセスも用意されています。
【関連記事】
▶AWSを集中管理したい!AWS マネジメントコンソールを使いこなそう!
例えば、AWS CLIでHTTPSロードバランサーを作成するには、以下のコマンドを実行します。
【関連記事】
▶AWS CLIのインストール方法 AWSアクセスキーの登録と疎通確認
aws elb create-load-balancer --load-balancer-name my-load-balancer --listeners "Protocol=HTTP,LoadBalancerPort=80,InstanceProtocol=HTTP,InstancePort=80" "Protocol=HTTPS,LoadBalancerPort=443,InstanceProtocol=HTTP,InstancePort=80,SSLCertificateId=arn:aws:iam::123456789012:server-certificate/my-server-cert" --subnets subnet-15aaab61 --security-groups sg-a61988c3
ロードバランサー名「my-load-balancer」で、HTTP、HTTPSでのロードバランシングをおこないます。SSL通信に必要なサーバ証明書、サブネットやセキュリティグループの指定もおこなっています。以下が出力例です。
{ "DNSName": "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com" }
AWS CLIでロードバランスのポリシーを出力するには、いかのコマンドを実行します。
aws elb describe-load-balancer-policies --load-balancer-name my-load-balancer
ロードバランサー名「my-load-balancer」のポリシーを出力しています。ロードバランスに使うクッキー名やクッキーの期限などが表示されています。
{ "PolicyDescriptions": [ { "PolicyAttributeDescriptions": [ { "AttributeName": "ProxyProtocol", "AttributeValue": "true" } ], "PolicyName": "my-ProxyProtocol-policy", "PolicyTypeName": "ProxyProtocolPolicyType" }, { "PolicyAttributeDescriptions": [ { "AttributeName": "CookieName", "AttributeValue": "my-app-cookie" } ], "PolicyName": "my-app-cookie-policy", "PolicyTypeName": "AppCookieStickinessPolicyType" }, { "PolicyAttributeDescriptions": [ { "AttributeName": "CookieExpirationPeriod", "AttributeValue": "60" } ], "PolicyName": "my-duration-cookie-policy", "PolicyTypeName": "LBCookieStickinessPolicyType" }, . . . ] }
AWS ELBのまとめ
- AWS ELBは、EC2インスタンス用の負荷分散機能
- AWS ELBには、Application Load Balancer、Network Load Balancer、Gateway Load Balancerと旧タイプのClassic Load Balancerがある
- ELBの設定はAWSマネジメントコンソールか、AWS CLIで操作が可能