AWS Elastic Load Balancing(ELB)の概要をまとめる。学習目的兼備忘録。
Elastic Load Balancing とは
-
アプリケーションへのトラフィックを複数のターゲットに自動的に分散するAWSのロードバランシングサービス
-
3種類のロードバランサーを提供
- Application Load Balancer(ALB)
- リクエストレベル (レイヤー 7)で動作
- リクエストがどのように転送されるかを条件とアクションで定義可能(コンテンツベースルーティング)
- Network Load Balancer(NLB)
- 接続レベル (レイヤー 4) で動作
- 高度なパフォーマンスと静的IPが必要な場合に使用
- Classic Load Balancer(CLB)
- 旧世代LB
- EC2-Classic ネットワーク内で構築された既存のアプリケーションがある場合に使用
- 互換性などの問題がなければ、ALB or NLBを選ぶのがよい。
- Application Load Balancer(ALB)
-
全体イメージ
- リスナー
- ロードバランサーがListenするプロトコル及びポート番号
- ロードバランサーからターゲットへの接続用のプロトコル及びポート番号
- ターゲット
- ロードバランサーがトラフィックを転送するEC2インスタンスなどのリソースやエンドポイント
ELBの特徴
高可用性と負荷分散
複数AZへの分散
- DNSラウンドロビンで各AZ内のELBに振り分け
- 負荷が均等になるように、ターゲットへそれぞれのルーティングアルゴリズムで振り分け
クロスゾーン負荷分散
- リージョン内の複数AZに負荷分散可能
- AZごとのターゲット数が異なっても、負荷を均等に振り分けることができる
複数ポートへの負荷分散
-
同一インスタンス内の異なるポートにバランシング可能
-
サーバーの冗長化と組み合わせ、サービスの可用性を向上
- 受信トラフィックが複数のAZにある複数のターゲットに分散され、正常なターゲットのみトラフィックを受信
- リージョン内での負荷分散が可能となり、異なるアベイラビリティーゾーンにある健全なターゲットにトラフィックをルーティング
- SLA:99.99%
スケーリング
- ELB自体も負荷に応じてキャパシティを自動増減
- スケール時には、NLB以外はIPアドレスが変化するため、ELBへのアクセスには必ずDNS名を指定
ヘルスチェック
- 正常なターゲットにのみ、トラフィックをルーティング
- ターゲットに対して定期的にヘルスチェックを実施し、正常なターゲットかを判定
コネクション
コネクションタイムアウト
- 無通信状態が続くとそのコネクションを自動切断
- タイムアウト時間は設定可能
スティッキーセッション
- 同一ユーザーから来たリクエストを同じターゲットに送信
- アプリケーションのセッション情報などをターゲットが保持する構成の場合に必要
セキュリティ
SSL/TLSTemination
- ELB側でSSL/TLS認証を行うことが可能
通信パターン
- ELBでSSL Terminationし、バックエンドとはSSLなし
- バックエンドでSSL処理をしなくて良いので、負荷軽減可能
- ELBでSSL Terminationし、バックエンドとは別途SSL
- SSLをバイパスしてバックエンドにTCPで送信
- クライアント証明書認証などを利用するためにはTCPとして扱う
ELB | バックエンド(EC2など) | |
---|---|---|
1 | HTTPS | HTTP |
2 | HTTPS/SSL | HTTPS/SSL |
3 | TCP | TCP |
TLSサーバー証明書
- AWS Certificate Manager(ACM)を使用して証明書管理が可能
AWSサービスとの連携
- AutoScaling:インスタンス増減時にELBへの追加・削除が可能
- ECS:ECSタスク(サービス)をターゲットグループに登録することで、ECSの各タスクに対して負荷分散を実施(動的ポートマッピング)
- AWS WAF:IPアドレス制限やリクエスト内容のマッチングなどの条件でALBを保護可能
...