
【AWS】 ELBの解説
Elastic Load Balancing(ELB)
アプリケーションのトラフィックを複数のターゲット(例えば、EC2インスタンス、コンテナ、IPアドレス)に分散するためのサービス。ELBを使用することで、高可用性とスケーラビリティを確保し、アプリケーションの信頼性を向上させることができる。
冗長性
また、自動的に複数のAZにまたがるように設定されており、これによって一つのAZに障害が発生した場合でも、他の健全なAZがトラフィックを引き継ぐことができる。この自動冗長性により、ユーザーは設定に手間をかけることなく、サービスの継続性を維持できる。
スケーラビリティ
トラフィック量に応じて自動的にスケールアップやスケールダウンが行われ、過負荷によるサービスダウンを防ぐことができる。
ターゲットグループ
ELBでロードバランサーがトラフィックを分散するために使用される一連のターゲット(例えば、EC2インスタンス、コンテナ、IPアドレス、Lambda関数など)をグループ化したもの。ターゲットグループは、特定のアプリケーションやサービスに関連するリソースをまとめて管理するために利用される。ターゲットグループごとにヘルスチェックを設定できる。
ロードバランシング
トラフィックを分散するためのルールやアルゴリズムを設定できる。デフォルトではラウンドロビン方式が使用される。
1. ラウンドロビン(Round Robin)
受信したリクエストを順番に各サーバーに分配する。これは、シンプルで実装が容易な方式であり、サーバー間の負荷を均等に分散するのに適している。ただし、サーバーの性能や現在の負荷を考慮しないため、各サーバーが均等に負荷を処理できる場合にのみ効果的。
2. 最小接続数(Least Connections)
最も接続数が少ないサーバーに新しいリクエストを送信する。サーバー間で接続数のバランスをとるため、リクエストの処理能力が異なるサーバーを含む環境で効果的。この方式は、トラフィックの不均衡を避けるのに役立つ。
3. IPハッシュ(IP Hash)
クライアントのIPアドレスをハッシュ関数にかけ、その結果を基にサーバーを選択する。これにより、特定のクライアントが同じサーバーに接続し続けることが保証されるため、セッションの一貫性が求められるアプリケーションに適している。
4. 重み付きラウンドロビン(Weighted Round Robin)
ラウンドロビン方式を拡張したもので、各サーバーに異なる重みを割り当てる。高性能なサーバーにはより多くのリクエストが送信されるように設定できる。これにより、サーバーの性能差を考慮した負荷分散が可能になる。
5. 重み付き最小接続数(Weighted Least Connections)
最小接続数方式を拡張し、各サーバーに異なる重みを割り当てる。サーバーの性能に応じてリクエストを分配し、高性能なサーバーにはより多くの接続が許される。
6. URLハッシュ(URL Hash)
リクエストのURLをハッシュ関数にかけ、その結果を基にサーバーを選択する。特定のURLリクエストが同じサーバーにルーティングされるため、キャッシュ効率が向上する。
7. レイテンシベース(Latency-Based)
各サーバーの応答時間を監視し、最も応答が速いサーバーにリクエストを送信する。これにより、ユーザーの待ち時間を最小限に抑えることができる。
8. ヘルスチェックベース(Health-Check Based)
定期的にサーバーの健全性をチェックし、異常が検出されたサーバーをトラフィックの対象から除外する方式。
リスナー
ロードバランサーが受信する特定のプロトコル(HTTP、HTTPS、TCP、UDP)とポート(例:80、443)を定義する。リスナーは、受信したリクエストをターゲットグループにルーティングする役割を担う。
また、特定の条件に基づいてリクエストをリダイレクトしたり、カスタムHTTP応答を返すことができる。例えば、HTTPからHTTPSへのリダイレクトや、メンテナンス中のページにリダイレクトする設定ができる。
リスナールール
受信したリクエストをどのターゲットグループにルーティングするかを決定するためのルールが設定できる。ルールは、リクエストの内容に基づいて適用される。例えば、URLパスやHTTPヘッダーの内容に基づいて特定のターゲットグループにルーティングすることができる。ルールは優先順位に従って評価される。
SSL/TLS証明書
HTTPSリスナーを設定する場合、SSL/TLS証明書を使用してトラフィックを暗号化する。AWS Certificate Manager(ACM)から証明書を取得するか、独自の証明書をアップロードすることができる。
ヘルスチェック
定期的に各ターゲットのヘルスチェックを行い、異常が検出されたターゲットへのトラフィックを停止し、正常なターゲットにのみトラフィックをルーティングする。これにより、サービスの信頼性が向上する
対象
Amazon EC2インスタンス
ターゲットグループ内のEC2インスタンスに対してヘルスチェックを実行する。これにより、特定のインスタンスが正常に動作しているかどうかを確認し、異常があればそのインスタンスへのトラフィックを停止する。コンテナ(Amazon ECS、Kubernetes)
コンテナに対してもヘルスチェックを実行できる。これにより、個々のコンテナが正常に動作しているかどうかを確認し、異常なコンテナを自動的に除外する。オンプレミスサーバー
AWS Direct ConnectやVPN接続を通じて接続されたオンプレミスサーバーも、ELBのヘルスチェックの対象にすることができる。IPアドレス
特定のIPアドレスに対してヘルスチェックを実行することもできる。これにより、ELBは特定のネットワークデバイスやサーバーの健全性を監視できる。
種類
Application Load Balancer(ALB)
OSIモデルのレイヤー7(アプリケーション層)で動作し、HTTPおよびHTTPSトラフィックに特化している。
リクエストの内容(URLパス、ホスト、HTTPヘッダー、メソッド、クエリパラメータなど)に基づいてトラフィックをルーティングするルール設定が可能。これにより、マイクロサービスやコンテナ化されたアプリケーションの管理が容易になる。 (Amazon AWS Docs) (Amazon AWS Docs)。
HTTP/HTTPSサポート
セキュアな通信を確保できる。HTTPSを使用する場合、TLS/SSL証明書を管理でき、トラフィックの暗号化もサポートされる。
WebSocketサポート
リアルタイムアプリケーション(例えばチャットやゲーム)のための双方向通信を実現する。これにより、クライアントとサーバー間で持続的な接続を維持し、即時のデータ送受信が可能となる (Amazon Web Services, Inc.) (Amazon Web Services, Inc.)。
複数ポートへの負荷分散
同一インスタンス内の複数のポートにトラフィックを分散させることができる。これにより、コンテナ化されたアプリケーションなど、複数のサービスが異なるポートで動作している場合に便利だ。
ホストベースやパスベースのルーティング
ホストベースルーティングでは、リクエストのホストヘッダーに基づいてトラフィックを適切なターゲットグループにルーティングする。パスベースルーティングでは、URLのパスに基づいてリクエストをルーティングすることが可能
Network Load Balancer(NLB)
OSIモデルのレイヤー4(トランスポート層)で動作し、TCPおよびUDPトラフィックを高速かつ低レイテンシーで処理するのに適している。
NLBは大規模なトラフィックを処理するための高いスループットを提供し、耐障害性を確保するために複数のアベイラビリティゾーン(AZ)にまたがってトラフィックを分散する。NLBはクロスゾーンロードバランシングや自動スケーリング、接続アイドルタイムアウトなどの機能をサポートしており、安定した接続を維持する (Amazon Web Services, Inc.) (Amazon AWS Docs)。
Gateway Load Balancer(GWLB)
GWLBはサードパーティの仮想アプライアンス(例:ファイアウォール、侵入検知システムなど)をスケーラブルに展開し、トラフィックの中継や制御を可能にする。これにより、ネットワークトラフィックの監視やセキュリティ強化が容易になり、複雑なネットワークアーキテクチャでも高い可用性とスケーラビリティを実現する (Amazon AWS Docs) (Amazon AWS Docs)。
Classic Load Balancer(CLB)
CLBはAWSの初期のロードバランサーで、レイヤー4とレイヤー7の両方で動作する。CLBは基本的な負荷分散機能を提供し、HTTP/HTTPSおよびTCPトラフィックを処理する。ただし、ALBやNLBの方が多機能で効率的なため、現在はCLBの利用は推奨されていない。
ELB手順
Management Consoleにサインイン
AWSアカウントにサインインして、AWS Management Consoleを開く。
ELBサービスの選択
コンソールの上部メニューから「サービス」をクリックし、「ネットワーキングとコンテンツ配信」カテゴリの「EC2」を選択。左側のメニューから「ロードバランサー」をクリックする。
ロードバランサーの作成
「ロードバランサーの作成」ボタンをクリックする。次に、作成するロードバランサーのタイプを選択する。以下の4つのオプションから選ぶことができる。
Application Load Balancer(ALB)
Network Load Balancer(NLB)
Gateway Load Balancer(GWLB)
Classic Load Balancer(CLB)
基本設定の構成
名前: ロードバランサーの名前を入力する。
スキーム: インターネット向け(インターネットにアクセス可能)または内部(内部ネットワーク用)を選択する。
アベイラビリティゾーン: トラフィックを分散するアベイラビリティゾーンを選択する。必要に応じて、各ゾーンのサブネットを選択する。
リスナーとプロトコルの設定
リスナー: ロードバランサーが受け取るトラフィックのプロトコルとポートを定義する。デフォルトでHTTP(80)やHTTPS(443)などが設定されているが、他のプロトコルやポートを追加することもできる。
セキュリティ設定: HTTPSリスナーを使用する場合、SSL証明書を設定する。AWS Certificate Manager(ACM)から証明書を選択するか、新しい証明書をアップロードする。
ターゲットグループの設定
ターゲットグループ: トラフィックが送信されるターゲットグループを作成する。ターゲットタイプとして「インスタンス」「IPアドレス」「Lambda関数」などを選択する。
ヘルスチェック設定: ターゲットのヘルスチェック設定を構成する。プロトコル、パス、ヘルスチェックの間隔、タイムアウトなどを設定する。
セキュリティグループの設定
ロードバランサーに適用するセキュリティグループを選択または作成する。セキュリティグループは、どのトラフィックを許可するかを制御する。
設定の確認と作成
すべての設定を確認し、「作成」ボタンをクリックする。ロードバランサーが作成され、指定されたターゲットグループにトラフィックを分散するように設定される。
いいなと思ったら応援しよう!
