はじめに
ALB・NLB・CloudFront・Global Accelerator は、次の2つの質問で4マスに仕分けられます。
- 通信の中身(URLパスやHTTPヘッダー)まで読むか
- 世界の入口(エッジ)に立つか、リージョンの中に立つか
対象読者: AWS SAA の勉強中で、この4つの比較表を見ても覚えられない人
SAA の問題を解いていて、この4つの区別が毎回あやふやになりました。比較表は何度も読んだのに覚えられない。振り返ると、比べる軸を持たないまま表を眺めていたのが原因でした。
参考文献
2つの軸
軸1: 中身を読むか(L7 か L4 か)
L7 のサービスは、URL パスや HTTP ヘッダーまで読んでから動きます。L4 のサービスは IP アドレスやポート番号といったトランスポート層までの情報で動き、URL パスや HTTP ヘッダーは読みません。層そのものの話は以前の記事で書いたので、ここでは割愛します。
軸2: どこに立つか(エッジかリージョンの中か)
エッジロケーションは、リージョンの外にある世界中の拠点です。エッジに立つサービスは、ユーザーの近くで通信を受けます。リージョンの中に立つサービスは、サーバーの手前で通信を配ります。エッジロケーションについても以前まとめました。
4マスに並べる
| 中身を読む(L7) | 中身を読まない(L4) | |
|---|---|---|
| エッジ | CloudFront: コンテンツをキャッシュして近くで返す | Global Accelerator: 固定IPで受けて、AWS のグローバルネットワークでリージョンまで運ぶ |
| リージョンの中 | ALB: パスやホスト名でサーバーへ振り分ける | NLB: 中身を見ずに高速に振り分ける。UDP も通せて、AZ ごとに静的IPを持てる |
横に見ると、できることの違いがそのまま軸1から出てきます。ALB がパスで振り分けられ、CloudFront が URL ごとにキャッシュできるのは、中身を読むからです。NLB と Global Accelerator がゲームや VoIP のような HTTP 以外の通信を通せるのは、中身を読まないからです。
縦に見ると、4つは重ねて使うものだと分かります。通常の Standard accelerator が選ぶのは「どのリージョンのどの入口(エンドポイント)に届けるか」までです。リージョンの中で多数のサーバーへ配るのは ALB や NLB の仕事なので、後ろに置くのが基本の形です。
問題文のキーワード早見表
| 問題文にこう書かれていたら | 答え |
|---|---|
| パス・ホスト名・HTTP ヘッダーで振り分け、Lambda をターゲットにする | ALB |
| リージョン内で AZ ごとの静的IP(Elastic IP)が要る、TCP/UDP を超低レイテンシで負荷分散 | NLB |
| キャッシュ、静的コンテンツ、動画配信 | CloudFront |
| 世界共通の固定IP、複数リージョン、HTTP 以外の通信(TCP/UDP)をエッジから高速化、DNS に頼らないリージョン切り替え | Global Accelerator |
| AWS WAF を付けたい | ALB か CloudFront(どちらも L7) |
UDP は NLB と Global Accelerator のどちらも扱えます。UDP という言葉だけで決めず、「リージョンの中か、世界の入口か」で選びます。
紛らわしいのは固定IP
いちばん引っかかりやすいのは「固定IP」です。NLB にも Global Accelerator にも固定IPがあるので、問題文に「固定IP」とだけ書かれていると迷います。
ここで軸2が効きます。NLB の静的IPは、リージョンの中に AZ ごとに1つずつ持つものです。Global Accelerator の固定IP(IPv4 なら2つ)は、世界中のエッジが同じIPで受けます。問題文に「世界中のユーザー」や「複数リージョン」が出てきたら Global Accelerator を選びます。
おわりに
比較表を丸暗記するより、問題文を読んだらまず「中身を読む必要があるか」「世界の入口か」の2つを確かめるほうが、選択肢を早く絞れると思います。次は GWLB や Route 53 も同じ軸で置けるかを試してみます。
