AWSロードバランサー解説：ELB、ALB、NLB、CLB

## Elastic Load Balancing (ELB)

AWS Elastic Load Balancing (ELB) は、複数のAmazon EC2インスタンス、コンテナ、IPアドレス、Lambda関数などの間でアプリケーションへのトラフィックを自動的に分散させるサービス。単一障害点を排除し、アプリケーションの可用性とスケーラビリティ向上に役立つ。

ELBには、以下の3種類のロードバランサーがある。

* Application Load Balancer (ALB)
* Network Load Balancer (NLB)
* Classic Load Balancer (CLB)

## Application Load Balancer (ALB)

| 特徴         | 説明                                                                                                                                                             |
| :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| レイヤー     | レイヤー7 (HTTP/HTTPS)                                                                                                                                           |
| ルーティング | リクエストのパス、ホストヘッダー、HTTPメソッド、ソースIPアドレスなど、リクエストの内容に基づきトラフィックをルーティング可能。コンテンツベースルーティングやマイクロサービスアーキテクチャに適切。 |
| ターゲットグループ | EC2インスタンス、IPアドレス、Lambda関数、コンテナインスタンスをターゲットとして登録可能。                                                                                   |
| ヘルスチェック | HTTP/HTTPSレベルでターゲットのヘルス状態を確認。                                                                                                                |
| TLS終端     | ロードバランサーでSSL/TLS証明書を管理し、暗号化された接続を処理可能。                                                                                                 |
| WebSocket    | WebSocket接続をサポート。                                                                                                                                     |
| HTTP/2      | HTTP/2をサポートし、パフォーマンス向上に貢献。                                                                                                                   |
| リダイレクト   | HTTPからHTTPSへのリダイレクトなどを設定可能。                                                                                                                     |
| ユースケース   | ウェブアプリケーション、モバイルアプリケーションのバックエンド、マイクロサービス、コンテナ化されたアプリケーションなど、HTTP/HTTPSトラフィックを扱うアプリケーションに最適。                               |

## Network Load Balancer (NLB)

| 特徴               | 説明                                                                                                                                                 |
| :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- |
| レイヤー           | レイヤー4 (TCP/UDP)                                                                                                                                   |
| ルーティング       | IPアドレス、ポート番号、プロトコルに基づきトラフィックをルーティング。非常に高いスループットと低いレイテンシが要求されるアプリケーションに適す。                                                 |
| ターゲットグループ   | EC2インスタンス、IPアドレスをターゲットとして登録可能。                                                                                               |
| ヘルスチェック     | TCP/UDPレベルでターゲットのヘルス状態を確認。                                                                                                             |
| TLS終端           | ロードバランサーでSSL/TLS証明書を管理し、TLS終端処理を実行可能。                                                                                             |
| 固定ソースIP       | クライアントのIPアドレスをターゲットインスタンスに保持したままトラフィックを転送可能。                                                                                 |
| 高スループット/低レイテンシ | 非常に高い接続処理能力と低いレイテンシを提供。                                                                                                                   |
| ユースケース       | TCP/UDPベースのアプリケーション、高パフォーマンスが要求されるアプリケーション (ゲーム、IoTなど)、TLS終端が必要なアプリケーションなどに最適。                                                     |

## Classic Load Balancer (CLB)

| 特徴         | 説明                                                                                                                                                   |
| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
| レイヤー     | レイヤー4 (TCP) および レイヤー7 (HTTP/HTTPS)                                                                                                            |
| ルーティング | レイヤー4またはレイヤー7の基本的なルーティング機能を提供。ALBやNLBに比べルーティングの柔軟性は低い。                                                                 |
| ターゲットグループ | EC2インスタンスをターゲットとして登録可能。                                                                                                                 |
| ヘルスチェック | TCPまたはHTTPレベルでターゲットのヘルス状態を確認。                                                                                                           |
| TLS終端     | ロードバランサーでSSL/TLS証明書を管理し、暗号化された接続を処理可能。                                                                                             |
| ユースケース   | 以前から利用されているロードバランサーで、シンプルなロードバランシング要件のアプリケーションに適す。ただし、新規アプリケーションにはALBまたはNLBの利用を推奨。|


## それぞれの主なユースケース
| ロードバランサー | 主なユースケース                                                                                                                               |
| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------- |
| **ALB** | ウェブアプリ (パス/ホストルーティング)、マイクロサービス、コンテナ (ECS/EKS)、Lambda連携                                                               |
| **NLB** | 高スループット/低レイテンシのTCP/UDPアプリ、データベース、ゲーム/VoIP/ストリーミング、TLS終端、固定ソースIPが必要なアプリ |
| **CLB** | シンプルなウェブアプリの基本負荷分散、L4/L7の基本負荷分散、既存インフラとの互換性維持    |

**まとめ**

* 新規アプリケーション開発では、通常、ALBまたはNLBの利用を推奨。CLBは、既存インフラストラクチャとの互換性が必要な場合などに利用される。
* アプリケーションの要件 (プロトコル、ルーティングの複雑さ、パフォーマンス要件など) に応じ、最適なロードバランサーを選択することが重要。