Google Cloud ハンズオン教科書|2026-08 版
第 5 章 試験ガイド 1.2 試験ガイド 2.1 試験ガイド 2.3

Cloud Load Balancing・Cloud DNS・Cloud CDN

グローバル前段の設計。「どの LB を選ぶか」は試験でも実務でも最頻出

この章で学ぶこと

試験ガイド対応: セクション 1.2(技術要件を満たす設計 — 高可用性・スケーラビリティ・レイテンシ)、2.1(ネットワーク トポロジの構成)、2.3(コンピューティング システムの構成とプロビジョニング)

第 4 章で作ったマネージドインスタンスグループ(MIG)は、それ単体ではただの VM の群れです。この章ではその前段に立つ 3 つのサービス — トラフィックを捌く Cloud Load Balancing、エッジでキャッシュする Cloud CDN、名前を解決する Cloud DNS — を設計します。「どのロードバランサを選ぶか」は PCA 試験の最頻出テーマのひとつであり、実務でもアーキテクチャ図の一番上に必ず現れる意思決定です。

Cloud Load Balancing ファミリー — 4 つの選択軸

Google Cloud のロードバランサは十数種類ありますが、暗記は不要です。次の 4 つの軸で絞り込めば 1 つに決まります。

扱うトラフィックは? HTTP / HTTPS(L7) TCP / UDP など(L4) Application Load Balancer(L7) Network Load Balancer(L4) インターネット公開 VPC 内部のみ TLS を終端したい クライアント IP 保持 外部 ALB グローバル / リージョン 単一 anycast IP 内部 ALB リージョン / クロスリージョン プロキシ NLB TCP を終端 TLS オフロード パススルー NLB UDP / ESP / GRE クライアント IP 保持
図 5-1 ロードバランサ選択のデシジョンツリー。まず L7/L4 で家系を決め、外部/内部とプロキシ/パススルーで絞り込む。試験で最も出るのは左端の外部 ALB(グローバル)。

主要なタイプを一覧にまとめます。プロキシ型(ALB と プロキシ NLB)は Google Front End(GFE)または Envoy ベースのプロキシとして動き、パススルー型は Maglev / Andromeda という Google 内部の分散基盤の上に実装されています。

タイプ層・方式スコープ代表ユースケース
グローバル外部 ALBL7・プロキシグローバル(Premium Tier)Web / API の世界公開。単一 anycast IP + マルチリージョン MIG
リージョン外部 ALBL7・プロキシリージョン(Standard Tier 可)単一リージョンで完結する公開 Web
内部 ALB(リージョン / クロスリージョン)L7・プロキシリージョン / 複数リージョンマイクロサービス間の内部 HTTP(S) 通信
外部プロキシ NLBL4・プロキシグローバル / リージョンHTTP 以外の TCP サービスの公開・大規模 TLS オフロード
外部パススルー NLBL4・パススルーリージョンUDP・ゲーム・クライアント IP が必要なプロトコル(TCP / UDP / ESP / GRE / ICMP)
内部パススルー NLBL4・パススルーリージョンVPC 内部の L4 分散。DNS フェイルオーバーのヘルスチェック対象にもなる

公式ドキュメントの選択指針は明快です。HTTP(S) トラフィックに柔軟な機能が欲しければ ALB、大規模な TLS オフロードや UDP 対応が必要なら NLB。なお「クラシック ALB」「クラシック プロキシ NLB」は旧世代(ロードバランシング スキームが EXTERNAL)で、新規設計では EXTERNAL_MANAGED スキームのグローバル外部 ALB を使います。

試験の視点: 問題文のキーワードから逆引きできるようにしておきます。「単一のグローバル IP で HTTPS を世界配信」→ グローバル外部 ALB。「UDP」「クライアントの送信元 IP をアプリで参照」→ 外部パススルー NLB。「VPC 内部のサービス間で L7 ルーティング」→ 内部 ALB。「HTTP 以外の TCP を大量の TLS 終端付きで」→ プロキシ NLB。選択肢に複数の LB が並んだら、まずプロトコルと IP 保持の要件で消去します。

グローバル外部 ALB の解剖 — 転送ルールからバックエンドまで

ALB は単一のリソースではなく、役割の異なる部品のチェーンです。リクエストは次の順に流れます。

クライアント HTTPS リクエスト グローバル外部アプリケーション LB 単一の anycast IP で世界中から受け付ける 転送ルール(IP:443 で受信) 接続を引き渡す ターゲット HTTPS プロキシ(TLS 終端) 復号済みリクエストを照合 URL マップ(ホスト / パスで振り分け) 一致したサービスへ バックエンドサービス(分散方式・セッション設定) 最も近い健全なバックエンドへ バックエンド MIG / ゾーン NEG / サーバーレス NEG / バックエンドバケット プローブ & GFE HC: 35.191.0.0/16 GFE: 130.211.0.0/22 定期プローブ
図 5-2 グローバル外部 ALB の部品チェーン。gcloud ではこの図の下から上へ(バックエンド → フロントエンド)組み立てる。ヘルスチェックプローブ(HC)と GFE が転送する実トラフィックは別々の専用送信元レンジから届くため、両方のファイアウォール許可が必須。

バックエンドサービスにぶら下げられるのは MIG だけではありません。ゾーン NEG(ネットワーク エンドポイント グループ。VM 内の個別エンドポイント)、サーバーレス NEG(Cloud Run・App Engine)、インターネット NEG(外部オリジン)、ハイブリッド NEG(VPN / Interconnect 越しのオンプレミス)まで束ねられます。静的コンテンツはバックエンドバケットとして Cloud Storage(第 8 章)を直結できます。「オンプレと Cloud Run と MIG を同じ URL 配下で段階移行する」といった構成が 1 台の ALB で組めるのはこの仕組みのおかげです。

ヘルスチェック — 分散対象を決める生死判定

バックエンドサービスにはヘルスチェックを関連付けます。現行のヘルスチェックは HTTP / HTTPS / HTTP/2 / TCP / SSL / gRPC に対応し(レガシー ヘルスチェックは HTTP / HTTPS のみ)、既定値はチェック間隔 5 秒・タイムアウト 5 秒(間隔以下であること)・健全 / 非健全のしきい値は連続 2 回です。重要なのは、プローブが LB 経由ではなく Google の専用プローバ群から直接届くことです。グローバル外部 ALB(GFE ベース)のヘルスチェックプローブは 35.191.0.0/16 から届きます。加えて、GFE がクライアントの実リクエストをバックエンドへ転送する際の送信元にも 130.211.0.0/22 が使われるため、この 2 つのレンジからの ingress を両方許可しないと、ヘルスチェックだけ通って実トラフィックが 502 になる、あるいは全バックエンドが UNHEALTHY になるといった障害につながります(リージョン外部パススルー NLB のターゲットプール構成では 35.191.0.0/16 に加えて 209.85.152.0/22 / 209.85.204.0/22 も使われます)。なお、この LB 用ヘルスチェックと第 4 章の MIG オートヒーリング用ヘルスチェックは別物として設定します(判定後の動作が「分散から外す」と「VM を作り直す」で異なるため)。

HTTPS 化 — Google マネージド SSL 証明書と Certificate Manager

ターゲット HTTPS プロキシに載せる証明書は 2 系統あります。従来からの Compute Engine SSL 証明書リソース(gcloud compute ssl-certificates)では、Google が取得・更新まで自動で行うマネージド証明書(ドメイン検証 DV のみ)を使えます。プロビジョニングを完了させるには、対象ドメインの A レコードが LB の IP アドレスを指している必要があります。ターゲットプロキシ 1 つに付けられるのは 15 枚までです(2026-08 時点)。

現在推奨されているのは Certificate Manager です。DNS 認証(最大 100 SAN、ワイルドカード対応)と LB 認証(最大 5 SAN)の 2 つのドメイン認証方式を持ち、証明書マップを使えば既定で数千、拡張すれば数百万のドメインを 1 つのプロキシで扱えます(2026-08 時点)。マネージドのワイルドカード証明書が必要なら Certificate Manager + DNS 認証が唯一の選択肢です。証明書マップをプロキシに付けると Compute Engine SSL 証明書側は無視される点に注意してください。

Cloud CDN と Cloud DNS — エッジ配信と名前解決

Cloud CDN — キャッシュモードとキャッシュキー

Cloud CDN は独立したサービスとしてではなく、グローバル外部 ALB のバックエンドサービス / バックエンドバケット単位で有効化します。コンテンツは GFE のエッジキャッシュに保存され、キャッシュヒットならオリジンまで往復せずその場で応答が返ります。

クライアント Cloud CDN エッジキャッシュ GFE の一部として動作 オリジン バックエンドサービス / バックエンドバケット ① GET リクエスト ② HIT: 即応答 ③ MISS: 取得 ④ 応答を保存
図 5-3 Cloud CDN のリクエストフロー。ヒット(②)ならオリジンに負荷をかけず低レイテンシで返る。ミス(③④)時の取り込みは cache fill と呼ばれ、応答は TTL に従ってエッジに保存される。キャッシュからの応答には Age ヘッダーが付く。

挙動の中心は 3 つのキャッシュモードです。

モード挙動使いどころ
CACHE_ALL_STATIC(既定)静的コンテンツ(CSS / JS / 画像 / 動画 / Web フォント / PDF 等)をヘッダーがなくても自動キャッシュ。オリジンのキャッシュ指示があればそれを尊重まず選ぶ既定値。ただし HTML / JSON は「静的」に含まれず、明示的な Cache-Control が必要
USE_ORIGIN_HEADERSオリジンが有効なキャッシュ指示(max-age 等)を返した応答だけをキャッシュキャッシュ可否をアプリ側で厳密に制御したいとき
FORCE_CACHE_ALLオリジンの指示を無視して成功応答を無条件にキャッシュ完全に公開・共通のコンテンツ専用。ユーザーごとのコンテンツに使うと情報漏洩事故になる

TTL の既定値はデフォルト TTL・クライアント TTL とも 3600 秒(1 時間)、最大 TTL は 86400 秒(24 時間)です(2026-08 時点)。キャッシュされるのは GET リクエストへの成功応答のみで、Set-Cookie 付きや Cache-Control: private / no-store の応答は対象外、サイズ上限は 10 MiB(オリジンが Range リクエスト対応なら 100 GiB)です。

キャッシュキーは既定で「プロトコル + ホスト + クエリ文字列を含む URI 全体」です。クエリパラメータの除外やホスト・プロトコルの省略、特定ヘッダー / Cookie の追加をカスタマイズすると、同一コンテンツの重複キャッシュを減らしてヒット率を上げられます。更新の反映にはキャッシュ無効化(gcloud compute url-maps invalidate-cdn-cache、パス末尾の * ワイルドカード対応)を使えますが、毎分 500 リクエストの上限があり反映まで約 10 秒かかるため、公式のベストプラクティスは「無効化を運用に組み込まず、バージョン付き URL(例: /v2/app.js)で切り替える」です。限定公開コンテンツの配信には署名付き URL / 署名付き Cookie を組み合わせます。

Cloud DNS — ゾーン・レコード・ルーティングポリシー

Cloud DNS は Google の anycast ネームサーバー網で権威 DNS を提供するマネージドサービスで、SLA は月間稼働率 100% という異例の水準です(2026-08 時点)。ゾーンは 2 種類あります。

レコード操作は gcloud dns record-sets create / update / delete、複数変更をアトミックに適用したいときは transaction start / add / execute を使います。さらに、単純な静的応答の代わりにルーティングポリシーを持つレコードを作ると、DNS の応答自体でトラフィックを制御できます。

ポリシー動作用途
重み付きラウンドロビン(WRR)ターゲットごとの重みに比例して応答を分配カナリアリリース、段階的な移行
位置情報(geolocation)問い合わせ元の地理(Google Cloud リージョン等)に応じて最寄りのターゲットを応答。ジオフェンス有効時は障害時も他地域へ流さないデータレジデンシー、地域別エンドポイント
フェイルオーバープライマリが健全な間はプライマリのみ応答し、ヘルスチェック失敗でバックアップに切り替えアクティブ / スタンバイの DR 構成
平常時 Cloud DNS 応答: プライマリの IP ヘルスチェック成功 プライマリ 内部 LB(東京) healthy バックアップ 内部 LB(大阪) スタンバイ プライマリ障害時 Cloud DNS 応答: バックアップの IP ヘルスチェック失敗 プライマリ 内部 LB(東京) unhealthy バックアップ 内部 LB(大阪) 応答対象
図 5-4 フェイルオーバー ルーティングポリシーの動作比較。切り替えは DNS の「応答内容」が変わることで起きるため、クライアント側のリゾルバキャッシュ(TTL)が切れるまで旧 IP に向かう点は設計時に織り込む。

ヘルスチェック連携の対象は内部 ALB・内部パススルー NLB など内部 LB のエンドポイントと、公開ゾーンでは外部エンドポイントです。パススルー NLB では既定で「バックエンドの 20% 以上が健全ならそのエンドポイントは健全」と判定されます。制約として WRR と位置情報ポリシーの併用はできず、転送ゾーン・ピアリングゾーンにはルーティングポリシー自体を設定できません。

試験の視点: 「グローバル LB があるのになぜ DNS ルーティングポリシーが要るのか」を説明できるようにしておきます。グローバル外部 ALB は単一 anycast IP なので DNS 側の工夫は不要です。DNS ポリシーが効くのは、リージョンごとに別 IP を持つ構成(リージョン LB の並列展開・内部 LB の DR・ハイブリッド)でトラフィックの向き先そのものを切り替えたい場面です。

ハンズオン

第 1 章の学習用プロジェクトと Cloud Shell を前提にします(ローカルの gcloud CLI でも可)。default ネットワークが存在すること、Compute Engine API が有効なことを確認してから始めてください。3 本は独立しているので、どれか 1 本だけでも成立します。

ハンズオン 5-1|グローバル外部アプリケーション LB + MIG で世界に公開する

図 5-2 のチェーンを下から上へ組み立て、単一 IP の背後で 2 台の Web サーバーに分散させます。所要 30〜45 分。費用: e2-small 2 台 + 転送ルールなどを 1 時間弱で数十円程度。作成直後の反映待ちがあるので、失敗と勘違いして作り直さないのがコツです。

  1. 起動スクリプト入りのインスタンステンプレートと MIG(2 台)を作り、ポート 80 に http という名前を付ける:
gcloud compute instance-templates create web-template \
    --machine-type=e2-small \
    --image-family=debian-12 --image-project=debian-cloud \
    --tags=allow-health-check \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install -y apache2
echo "Hello from $(hostname)" > /var/www/html/index.html'

gcloud compute instance-groups managed create web-mig \
    --template=web-template --size=2 --zone=asia-northeast1-b

gcloud compute instance-groups set-named-ports web-mig \
    --named-ports=http:80 --zone=asia-northeast1-b
  1. ヘルスチェックプローブと GFE 転送トラフィックの送信元レンジを許可するファイアウォール、グローバル静的 IP、ヘルスチェック、バックエンドサービスを作って MIG をぶら下げる:
gcloud compute firewall-rules create fw-allow-health-check \
    --network=default --action=allow --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check --rules=tcp:80

gcloud compute addresses create lb-ip \
    --ip-version=IPV4 --network-tier=PREMIUM --global

gcloud compute health-checks create http basic-check --port=80

gcloud compute backend-services create web-backend \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP --port-name=http \
    --health-checks=basic-check --global

gcloud compute backend-services add-backend web-backend \
    --instance-group=web-mig \
    --instance-group-zone=asia-northeast1-b --global
  1. フロントエンド側(URL マップ → ターゲット HTTP プロキシ → 転送ルール)を組む。今回は手順を短くするため HTTP:80 で公開する(本番は HTTPS + マネージド証明書が前提):
gcloud compute url-maps create web-map --default-service=web-backend

gcloud compute target-http-proxies create web-proxy --url-map=web-map

gcloud compute forwarding-rules create web-rule \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --network-tier=PREMIUM --address=lb-ip \
    --global --target-http-proxy=web-proxy --ports=80
  1. ヘルス状態を確認してからアクセスする。反映まで数分かかることがある:
gcloud compute backend-services get-health web-backend --global

LB_IP=$(gcloud compute addresses describe lb-ip \
    --global --format="get(address)")
curl "http://$LB_IP/"

期待される出力: get-health で 2 インスタンスとも healthState: HEALTHY になった後、curl が Hello from web-mig-xxxx を返します。何度か curl を繰り返すとホスト名が入れ替わり、2 台に分散されていることを確認できます。

後片付け: 参照関係があるため、必ずフロントエンドから逆順に削除します。

gcloud compute forwarding-rules delete web-rule --global --quiet
gcloud compute target-http-proxies delete web-proxy --quiet
gcloud compute url-maps delete web-map --quiet
gcloud compute backend-services delete web-backend --global --quiet
gcloud compute health-checks delete basic-check --quiet
gcloud compute addresses delete lb-ip --global --quiet
gcloud compute instance-groups managed delete web-mig \
    --zone=asia-northeast1-b --quiet
gcloud compute instance-templates delete web-template --quiet
gcloud compute firewall-rules delete fw-allow-health-check --quiet
ハンズオン 5-2|Cloud CDN をバックエンドバケットで有効化しキャッシュを観測する

Cloud Storage をオリジンにした CDN 配信を組み、Age ヘッダーでキャッシュヒットを観測してから無効化を実行します。所要 20〜30 分。費用: 数 KB のオブジェクトと転送ルールを 30 分程度で数円以内。

  1. 公開バケットとテストオブジェクトを用意する。Cache-Control をオブジェクトに設定して、テキストでも確実にキャッシュ対象(フレッシュな応答)にする:
export BUCKET="$(gcloud config get-value project)-cdn-handson"

gcloud storage buckets create "gs://$BUCKET" \
    --location=asia-northeast1 --uniform-bucket-level-access

echo "Hello CDN" > hello.txt
gcloud storage cp hello.txt "gs://$BUCKET/"
gcloud storage objects update "gs://$BUCKET/hello.txt" \
    --cache-control="public, max-age=3600"

gcloud storage buckets add-iam-policy-binding "gs://$BUCKET" \
    --member=allUsers --role=roles/storage.objectViewer
  1. --enable-cdn 付きのバックエンドバケットを作り、LB のフロントエンドをかぶせる:
gcloud compute backend-buckets create cdn-backend \
    --gcs-bucket-name="$BUCKET" \
    --enable-cdn --cache-mode=CACHE_ALL_STATIC

gcloud compute url-maps create cdn-map \
    --default-backend-bucket=cdn-backend

gcloud compute target-http-proxies create cdn-proxy --url-map=cdn-map

gcloud compute addresses create cdn-ip \
    --ip-version=IPV4 --network-tier=PREMIUM --global

gcloud compute forwarding-rules create cdn-rule \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --network-tier=PREMIUM --address=cdn-ip \
    --global --target-http-proxy=cdn-proxy --ports=80
  1. 数分待ってから同じ URL を 2 回以上取得し、ヘッダーを比較する。確認後にキャッシュを無効化する:
CDN_IP=$(gcloud compute addresses describe cdn-ip \
    --global --format="get(address)")

curl -sD - -o /dev/null "http://$CDN_IP/hello.txt"
curl -sD - -o /dev/null "http://$CDN_IP/hello.txt"

gcloud compute url-maps invalidate-cdn-cache cdn-map --path="/hello.txt"

期待される出力: 2 回目以降の応答に Age: 12 のような 0 より大きい Age ヘッダーが付けばキャッシュヒットです(初回はエッジへの cache fill なので付きません)。無効化の完了後に再取得すると Age が消え、再びオリジンから取得されたことが分かります。

後片付け:

gcloud compute forwarding-rules delete cdn-rule --global --quiet
gcloud compute target-http-proxies delete cdn-proxy --quiet
gcloud compute url-maps delete cdn-map --quiet
gcloud compute backend-buckets delete cdn-backend --quiet
gcloud compute addresses delete cdn-ip --global --quiet
gcloud storage rm -r "gs://$BUCKET"
ハンズオン 5-3|Cloud DNS 限定公開ゾーンで内部名前解決を作る

ドメインを所有していなくても試せる限定公開ゾーンで、VPC 内だけで解決できる名前を作ります。所要 15 分。費用: マネージドゾーンは時間割り課金(2026-08 時点で約 $0.000274/時、月額換算 $0.20)なので 1 時間なら 1 円未満 + 確認用 e2-micro 1 台を数分で数円以内。

  1. Cloud DNS API を有効化し、default ネットワークに紐付く限定公開ゾーンと A レコードを作る:
gcloud services enable dns.googleapis.com

gcloud dns managed-zones create internal-zone \
    --dns-name="internal.example." \
    --description="handson private zone" \
    --visibility=private --networks=default

gcloud dns record-sets create db.internal.example. \
    --zone=internal-zone --type=A --ttl=300 \
    --rrdatas=10.0.0.42

gcloud dns record-sets list --zone=internal-zone
  1. VPC 内の VM からだけ解決できることを確認する:
gcloud compute instances create dns-probe \
    --zone=asia-northeast1-b --machine-type=e2-micro \
    --image-family=debian-12 --image-project=debian-cloud

gcloud compute ssh dns-probe --zone=asia-northeast1-b \
    --command="getent hosts db.internal.example"

期待される出力: 10.0.0.42 db.internal.example。VM は VPC のメタデータサーバー経由で名前解決し、そこに限定公開ゾーンの応答が合成されます。同じ名前を Cloud Shell(VPC 外)で引いても解決できないことも確かめると、「どの VPC から見えるか」というゾーンのスコープが体感できます。

後片付け: ゾーンはレコードを消してからでないと削除できません。

gcloud compute instances delete dns-probe \
    --zone=asia-northeast1-b --quiet
gcloud dns record-sets delete db.internal.example. \
    --zone=internal-zone --type=A
gcloud dns managed-zones delete internal-zone

つまずきポイント

全バックエンドが UNHEALTHY のまま 502 が返る。 最頻出の原因はヘルスチェックプローブ(35.191.0.0/16)または GFE の転送トラフィック(130.211.0.0/22)の ingress 許可漏れです。どちらも LB からではなく Google の専用レンジから直接届くため、アプリが正常でもファイアウォールで落とされると、ヘルスチェック自体が UNHEALTHY になる、または判定は HEALTHY でも実トラフィックだけ 502 になる、という 2 通りの故障が起こり得ます。gcloud compute backend-services get-health で判定を、ファイアウォールルールの --target-tags が VM のタグと一致しているか、両方のレンジを許可しているかを順に確認してください。
作った直後に curl が失敗する / マネージド証明書がいつまでも有効にならない。 LB の構成変更がエッジに行き渡るまで数分かかります。即座の失敗は壊れている証拠ではないので、作り直す前にまず待つこと。Google マネージド SSL 証明書は、対象ドメインの A レコードが LB の IP を指すまでプロビジョニングが完了しません。「証明書を作ってから DNS を切り替えるまでの間は発行が進まない」ことを前提に手順を組んでください。
CDN が一向にキャッシュしてくれない。 既定の CACHE_ALL_STATIC が自動でキャッシュするのは CSS / JS / 画像などの静的タイプだけで、HTML と JSON は明示的な Cache-Control ヘッダーがない限り対象外です。Set-Cookie が付いた応答や Cache-Control: private / no-store もキャッシュされません。逆に FORCE_CACHE_ALL はこれらの安全弁を無効化するため、ログイン後のページに適用するとユーザー間で応答が混ざる重大事故につながります。
削除エラーと課金の置き土産。 LB の部品は参照関係があるため、バックエンドサービスを先に消そうとすると「URL マップから参照されている」というエラーになります。削除は必ず転送ルール → プロキシ → URL マップ → バックエンドサービスの逆順で。また転送ルールとグローバル静的 IP は存在するだけで課金が続くので、ハンズオン後の消し忘れに注意してください。

理解度チェック

Q1. グローバル外部 ALB の「グローバル」とは何を指すか?

単一の anycast IP アドレスで世界中からのリクエストを受け、複数リージョンに配置したバックエンドへ分散できることです。TLS はユーザーに近い GFE で終端され、リージョン障害時も同じ IP のまま健全なリージョンへ流れます。DNS を地域ごとに出し分ける必要はありません。

Q2. プロキシ型 NLB とパススルー型 NLB の最大の違いは?

接続を終端するかどうかです。プロキシ型は LB で TCP(および SSL)を終端して裏側へ張り直すため TLS オフロードができる一方、バックエンドから見た送信元は LB になります。パススルー型は終端せずパケットを届けるためクライアントの送信元 IP がそのまま保持され、TCP 以外(UDP / ESP / GRE / ICMP)も扱えます。応答はダイレクトサーバーリターンで返ります。

Q3. Cloud CDN の 3 つのキャッシュモードをそれぞれいつ使う?

CACHE_ALL_STATIC(既定)は静的タイプを自動キャッシュしつつオリジンの指示も尊重するバランス型。USE_ORIGIN_HEADERS はオリジンが明示したものだけをキャッシュする厳密型で、キャッシュ可否をアプリで完全制御したいとき。FORCE_CACHE_ALL はオリジンの指示を無視して全成功応答をキャッシュするため、完全公開のコンテンツ専用です。ユーザー固有コンテンツに使うと情報漏洩になります。

Q4.(試験形式)EC サイトをグローバル展開する。要件は「世界中から単一 IP で HTTPS 接続」「/api は東京と米国の MIG へ、/static は Cloud Storage へ振り分け」「静的コンテンツはエッジでキャッシュ」。最適な構成は?
A. リージョンごとに外部 ALB を置き、位置情報ルーティングポリシーで振り分ける B. グローバル外部 ALB + URL マップ + バックエンドバケット + Cloud CDN C. 外部パススルー NLB + Cloud CDN D. Cloud DNS の WRR で MIG のインスタンスへ直接分散する

B。単一 anycast IP・パスベースの振り分け・バックエンドバケット・CDN 有効化のすべてがグローバル外部 ALB の標準機能です。A は IP がリージョンごとに分かれ「単一 IP」の要件を満たしません。C はパススルー NLB が L7 のパス振り分けを持たず、Cloud CDN は外部 ALB と組み合わせて使うものなので不成立。D は DNS ではパスベースの振り分けもエッジキャッシュも TLS 終端もできません。

Q5.(試験形式)対戦ゲームのリアルタイム通信サーバーを公開する。プロトコルは UDP、不正対策のためサーバー側でクライアントの送信元 IP を直接参照する必要がある。選ぶべきロードバランサは?
A. グローバル外部 ALB B. 外部プロキシ NLB C. 外部パススルー NLB D. 内部パススルー NLB

C。UDP を扱えるのはパススルー型だけで、終端しないためクライアント IP もそのまま保持されます。A は HTTP(S) 専用。B はプロキシ型のため TCP 系のみで、送信元も LB の IP になります。D は要件のインターネット公開に反する内部専用です。

まとめと次章へ

ここまでで「VM を並べ、前段で受ける」IaaS 型の公開構成が一通り完成しました。第 6 章の GKE では、この章で学んだ ALB・NEG・ヘルスチェックが Gateway / Ingress という Kubernetes の語彙で再登場します。部品の対応関係を意識しながら進むと、コンテナネイティブ負荷分散の理解が一気に楽になります。