ELBとは
Elastic Load Balancing の略
受信したアプリケーションまたはネットワークトラフィックを、EC2インスタンス・コンテナ・IPアドレス・複数AZなど、複数のターゲットに分散させる機能
- マネージド型サービス
- 従量課金制
- アプリケーションの可用性と耐障害性の向上の為に使用
- VPC上に構成する
- 必ず2つ以上のAZを指定する
ELBの特徴
-
インターネットからのみアクセス可能なELB(Internet-Facing ELB)とVPC内やオンプレミス環境からのみアクセス可能なELB(Internal ELB)を選択可能
-
ELB自体もプライベートIPアドレスを利用
→ ELBを配置するサブネットは最低でも /27ビットのCIDRブロックを持つ必要がある -
ELB作成時に自動的に生成されるエンドポイントと呼ばれるURLに独自ドメイン名を指定可能
→ 自社のDNSサーバーにCNAMEレコードを追加する、またはRoute 53にALIASにレコードを追加する -
アクセスログをS3に出力可能
ELBの仕組み
-
クライアントからの受信トラフィックを受け入れ、リクエストを1つ以上のAZにある登録済みのターゲット(EC2インスタンスなど)にルーティングする
-
ヘルスチェックによって異常なターゲットを検出すると、そのターゲットへのトラフィックのルーティングを中止する
-
その後ターゲットが再び正常になったことを検出すると、そのターゲットへのトラフィックのルーティングを再開する
スケーラビリティ
負荷の増減に応じてELB自体が自動でスケールする機能
→ スケーリングが間に合わない場合はクライアントに対してHTTP503を返す
Pre-Warming (暖機運転)
トラフィックの急増が予測される場合に事前にELBをスケールさせておくことで、通信トラフィックの急増に伴うエラーを回避すること
- AWSコンソールからの設定ではなく、AWSサポートに事前申請が必要
- AWSサポートプランのビジネスまたはエンタープライズに加入している必要がある
ヘルスチェック
ターゲットのインスタンスに対してTCP/HTTP/HTTPSのプロトコルで応答確認を行い、正常に動作しているかどうかをチェックする機能
-
異常状態(Unhealty)に遷移した場合、そのターゲットのインスタンスを負荷分散対象から切り離し、リクエストの転送を停止する
→ 転送を停止するだけで、インスタンスの再起動はしない -
異常を検知するとCloudWatchに通知される
SSL Termination
クライアントとELBの間をSSL通信(443ポート)、ロードバランサーとターゲットのインスタンス間をHTTP通信(80ポート)として、SSL通信処理の負荷を軽減する
-
外部公開するWebサーバーなどを構成して通信する場合、セキュリティ確保の為に外部との通信をSSLで暗号化することが一般的
-
スケールアウトによってターゲットのインスタンス数が多くなった場合、インスタンス側でSSL/TLS証明書を構成すると証明書管理が煩雑になるが、SSL Terminationを利用することで証明書管理の手間を軽減可能
-
ロードバランサーにSSL/TLSサーバー証明書を少なくとも1つ以上構成する必要がある
スティッキーセッション
ELBによってクライアントからのリクエストを毎回同一のインスタンスに送信する機能
- セッションを引き継いで、アプリケーションがCookieに設定した値を利用しながら動作するようなケースに使用
1. 任意の有効期限を指定する方法
任意に設定された有効期限までの間、同一インスタンスとのセッションを維持する(有効期限を指定しない場合、Cookieをクライアント側で意図的に削除しない限り永続的にセッションを維持する)
2. アプリケーションのCookieに従う方法
セッションの維持を行うCookie名を指定することにより、そのCookie名を含むリクエストがクライアントからあった場合、同一インスタンスとのセッションを維持する
Connection Draining
ヘルスチェックに失敗したEC2インスタンス切り離しのタイミングで、新規のリクエストの振り分けを停止しつつ、処理中のリクエストがあればその処理が完了するまで切り離しを待機する機能(デフォルトで有効化されている)
連携可能なサービス
-
Amazon EC2:EC2 インスタンスへのトラフィックをルーティングするようにロードバランサーを設定可能
-
Amazon EC2 Auto Scaling:ELBでAuto Scalingを有効にすると、Auto Scalingによって起動・終了されたインスタンスは自動的にロードバランサーに登録・登録解除される
-
AWS Certificate Manager:HTTPSリスナーを作成するには、ACMで提供された証明書を指定可能
-
Amazon CloudWatch:ロードバランサーを監視し、必要に応じてアクションを実行することが可能
-
Amazon ECS:EC2インスタンスのクラスターで実行されるDockerコンテナにトラフィックをルーティングするようにロードバランサーを設定可能
-
AWS Global Accelerator:Acceleratorを使用することで、1つ以上のAWSリージョンの複数のロードバランサーにトラフィックを分散することが可能
-
Route 53:ロードバランサーなどのリソースには、AWSによりURLが割り当てられ(任意のURLを使用することも出来る)、ドメイン名をロードバランサーにマッピングすることが可能
-
AWS WAF:ALBでAWS WAFを使用することで、ウェブアクセスコントロールリスト(ウェブACL)のルールに基づいてリクエストを許可またはブロックすることが可能