見出し画像

【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関数」などを選択する。

  • ヘルスチェック設定: ターゲットのヘルスチェック設定を構成する。プロトコル、パス、ヘルスチェックの間隔、タイムアウトなどを設定する。

セキュリティグループの設定

ロードバランサーに適用するセキュリティグループを選択または作成する。セキュリティグループは、どのトラフィックを許可するかを制御する。

設定の確認と作成


すべての設定を確認し、「作成」ボタンをクリックする。ロードバランサーが作成され、指定されたターゲットグループにトラフィックを分散するように設定される。



















いいなと思ったら応援しよう!

Ken @ インフラエンジニア
よろしければサポートお願いします!よりいい情報を発信します。