従来のApplication Load Balancerを新しいApplication Load Balancerに移行する

記事タイトルとURLをコピーする

G-gen の佐々木です。当記事では、従来の Application Load Balancer(classic Application Load Balancer)リソースを、新しい Application Load Balancer であるグローバル外部 Application Load Balancer に安全に移行する方法を解説します。

前提知識

外部 Application Load Balancer の基本については、以下の記事をご一読ください。

blog.g-gen.co.jp

Application Load Balancer の比較

基本的な違い

従来の Application Load Balancer(classic Application Load Balancer)と新型であるグローバル外部 Application Load Balancer は、どちらも Google Front End(GFE)と呼ばれる Google 管理のインフラストラクチャ上で動作するマネージドなロードバランサー機能です。

グローバル外部 Application Load Balancer ではデータプレーンに OSS の Envoy プロキシを採用しており、このデータプレーンの違いによって、従来型と比べてイベントに対する応答などが異なる場合があります。

たとえば、ロードバランサーのバックエンドにあるサービスのステータスがすべて正常ではない場合、従来の Application Load Balancer ではステータス502が返されますが、グローバル外部 Application Load Balancer ではステータス503が返されるようになっています。

以下のドキュメントにデータプレーンによる動作の違いがまとまっているため、従来型からの移行を行う場合は目を通しておきましょう。

グローバル外部 Application Load Balancer でサポートされる機能

グローバル外部 Application Load Balancer は以下のような機能を利用することができます。

  • ホスト、パス、ヘッダー、リクエストパラメータなどに基づくトラフィックのインテリジェントなルーティング
  • リクエストベース、レスポンスベースのアクション(リダイレクト、ヘッダー変換など)の実行
  • リクエストミラーリングなどの高度な負荷分散アルゴリズム

機能の詳細については、以下のドキュメントをご一読ください。

グローバル外部 Application Load Balancer ではサポートされない機能

グローバル外部 Application Load Balancer では利用できず、従来の Application Load Balancer でしか利用できない機能としては、以下のようなものがあります。

  • Standard ティアのネットワーク(リージョナル ロードバランサー)
  • GKE Ingress Controller

これらを利用したい場合、従来の Application Load Balancer を引き続き使用します。

なお、GKE でグローバル外部 Application Load Balancer を利用したい場合は、Ingress の変わりに Gateway リソースを使用することができます。

ただし、従来の Application Load Balancer は今後、機能アップデートがされなくなったり、廃止になる可能性がゼロではありません。可能な限り、新しいグローバル外部 Application Load Balancer の使用を検討したほうが望ましいといえます。

移行の手順

当記事で使用する環境

当記事は、以下の記事と同様の構成、つまり Cloud Run のフロントエンドとして Application Load Balancer を構成している環境を利用します。

blog.g-gen.co.jp

この環境では、バックエンド サービスに Cloud Armor のセキュリティポリシーを紐づけ、また Identity-Aware Proxy(IAP)による認証機能を利用できるようにしています。

ロードバランサーの移行により、これらの機能の紐づけが維持されるかどうかも確認してみます。

当記事で使用する環境

移行対象となる従来の(クラシック)Application Load Balancer

バックエンド サービスで Cloud Armor セキュリティポリシーと IAP を利用している

バックエンド サービスの移行

移行の準備

ロードバランサーの移行は Google Cloud コンソールと gcloud CLI で実施することができます。当記事では基本的にはコンソールから操作を行っていきます。

ロードバランサーの移行手順として、バックエンド サービスの移行と転送ルールの移行をそれぞれ行う必要があります。まずはバックエンド サービスの移行を行っていきます。

ロードバランサーの詳細画面にある「移行」タブから、対象バックエンド サービスの「移行を管理」を選択します。

「移行」タブで対象バックエンド サービスの「移行を管理」を選択する

「準備」にチェックがついているので、そのまま「保存」を選択します。

「準備」にチェックが入った状態で「保存」を選択する

ロードバランサーの更新が行われ、バックエンド サービスのステータスが「テスト準備完了」となります。

移行のテスト

バックエンド サービスのステータスが「テスト準備完了」となっている状態で、「移行を管理」を再度選択します。

ステータスが「テスト準備完了」のバックエンド サービスの「移行を管理」を選択する

移行のテストは、「割合を指定してテスト」と「すべてのトラフィックをテスト」の2種類を選択することができます。

「割合を指定してテスト」では、任意の割合のトラフィックを新しいバックエンド サービスにルーティングすることで、従来のロードバランサーのバックエンド サービスで引き続きトラフィックを処理しつつ、一部のトラフィックのみで新しいバックエンド サービスのテストを行うことができます。

当記事では、10%のトラフィックを新しいバックエンド サービスにルーティングしてテストを行います。「割合を指定してテスト」にチェックを入れ、「テストの割合」に10を入力して「保存」を選択します。

10%のトラフィックで新しいロードバランサーのテストを行う

ロードバランサーの更新が行われ、バックエンド サービスがテスト中の状態になります。新しいバックエンド サービス(EXTERNAL_MANAGED)に10%のトラフィックがルーティングされる状態になっています。

バックエンド サービスが「テスト中」のステータスになる

トラフィックの割合はテスト中に変更することができます。ここでは「すべてのトラフィックをテスト」に変更してみます。

すべてのトラフィックを新しいバックエンド サービスにルーティングしてテストを行う

新しいバックエンド サービスにすべてのトラフィックがルーティングされる状態になりました。

「すべてのトラフィックをテスト」を選択した場合

サービスの URL にアクセスしてみると、移行先のバックエンド サービスでも IAP による認証が機能していることがわかります。

新しいバックエンド サービスにルーティングされても IAP の認証画面が表示される

また、Cloud Armor のセキュリティポリシーが機能しているかどうかも確認してみます。

当記事の構成ではアクセス元の IP アドレスを制限していますが、許可されていない IP アドレスからサービスにアクセスすると、セキュリティポリシーによってアクセスが拒否されます。

新しいバックエンド サービスでもセキュリティポリシーが機能している

移行の実施

トラフィックが新しいロードバランサーで正しく処理されていることを確認したら、バックエンドの移行を行います。

対象バックエンド サービスの「移行を管理」から、「移行」にチェックを入れて「保存」を選択します。

バックエンド サービスの移行を行う

ロードバランサーが更新され、バックエンド サービスのステータスが「移行済み」になります。

バックエンド サービスのステータスが「移行済み」になる

バックエンド サービスが複数ある場合は、ここまでの手順を繰り返し行います。

バックエンド バケットの移行

ここまででバックエンド サービスの移行を行いましたが、ロードバランサーでバックエンド バケットを使用している場合、転送ルールの移行の前にバックエンド バケットの移行を行う必要があります。

2025年5月現在、バックエンド バケットの移行はコンソールから行うことができず、gcloud CLI を使用する必要があります。詳細なコマンドについては以下のドキュメントを参照してください。

転送ルールの移行

移行の準備

バックエンド サービス同様に、転送ルールでも「準備」→「テスト」→「移行」の流れで作業を行っていきます。

対象の転送ルールの「移行を管理」を選択します。

対象の転送ルールの「移行を管理」を選択する

「準備」にチェックがついているので、そのまま「保存」を選択します。

「準備」にチェックがついている状態で「保存」を選択する

移行のテスト

転送ルールのステータスが「テスト準備完了」になるので、再度「移行を管理」を選択します。

転送ルールのステータスが「テスト準備完了」になったら再度「移行を管理」を選択する

バックエンド サービスの移行と同様に、移行のテストは「割合を指定してテスト」と「すべてのトラフィックをテスト」の2種類を選択することができます。

当記事では、ここでは最初から「すべてのトラフィックをテスト」を選択してテストを行います。

実施するテスト方法にチェックを入れて「保存」を選択する

転送ルールのステータスが「テスト中 / すべてのトラフィックをテスト中」になったら、サービスに対してアクセスしてみます。

転送ルールのステータスが「テスト中 / すべてのトラフィックをテスト中」になっている

バックエンド サービスのテスト時同様、サービスに正常にアクセスすることができ、かつ IAP や Cloud Armor が機能していることを確認します。

転送ルールの移行テスト中でも IAP が機能している

転送ルールの移行テスト中でも Cloud Armor のセキュリティポリシーが機能している

問題なければ、再度「移行を管理」を選択します。

「移行」にチェックを入れて「保存」を選択すると、転送ルールの移行が実施されます。

転送ルールの移行を行う

これでバックエンド サービスと転送ルールの両方が移行済みとなり、従来の Application Load Balancer からグローバル外部 Application Load Balancer への移行は完了となります。

ロードバランサーの移行が完了している状態

ロードバランサーの種類が従来(クラシック)ではなくなっている

移行後も Cloud Armor セキュリティポリシーや IAP の設定が維持されている

ロールバック

ロールバックの概要

移行から90日以内であれば、従来の Application Load Balancer へのロールバックを行うことができます。

ロールバックは移行とは逆の順番(「転送ルールのロールバック」→「バックエンド バケットのロールバック」→「バックエンド サービスのロールバック」)で行います。

転送ルールのロールバック

2025年5月現在、転送ルールのロールバックは gcloud CLI で実施する必要があります。以下のコマンドでロールバックを行います。

# 転送ルールのロールバック
$ gcloud compute forwarding-rules update {転送ルールの名前} \
  --load-balancing-scheme=EXTERNAL \
  --global

バックエンド バケットのロールバック

バックエンド バケットがある場合は、こちらも gcloud CLI でロールバックを行う必要があります。

ロールバックは「テスト」→「移行」のステップで行います。詳細なコマンドは以下のドキュメントを参照してください。

バックエンド サービスのロールバック

バックエンド サービスのロールバックは「テスト」→「移行」の順に行います。

転送ルールのロールバックが完了していると、コンソールではバックエンド サービスで「元に戻す」が選択できるようになっています(gcloud CLI でもロールバック可能)。

コンソールからロールバックする場合、転送ルールのロールバック後にバックエンド サービスの「元に戻す」を選択する

まず、「元に戻す」から「すべてのトラフィックでテストする」にチェックが入っている状態で「保存」を選択します。この時点ではまだトラフィックの移行は行われず、移行後(ロールバック前)のバックエンド サービスにトラフィックがルーティングされています。

バックエンド サービスのロールバックの準備をする

まだトラフィックは移行されていない(ロールバックされていない)

6分程度待ってから、バックエンド サービスの「移行を管理」を選択します。

ロールバック前に、トラフィックの割合を指定したテストを行います(※「すべてのトラフィックをテスト」では移行後のバックエンド サービスにトラフィックがルーティングされるため注意)。

テストの割合を指定するとき、指定する割合が移行後(ロールバック前)のバックエンド サービス にルーティングする割合である点に注意します。たとえば移行前(ロールバック後)のバックエンド サービスに10%のトラフィックをルーティングしたい場合は90を入力します。

ロールバック前にテストを行う

テストの割合を90に指定した場合

注意点として、6分程度待つことなくテストや移行を実行すると、以下のエラーが発生してしまう場合があります。

Invalid value for field 'resource.externalManagedMigrationState': 'TEST_BY_PERCENTAGE'. External managed migration state cannot be change to TEST_BY_PERCENTAGE yet. Please allow at least 6 minutes for previous change to propagate.

6分程度待たずにテスト / ロールバック を実行しようとするとエラーが発生する

ここからさらに6分程度待ち、バックエンド サービスが問題なく動作しているかを確認します。

その後、「移行を管理」からテストの割合を0に設定することで、移行前(ロールバック後)のバックエンド サービスにすべてのトラフィックをルーティングします。

すべてのトラフィックを移行前のバックエンド サービスにルーティングする

この時点で、ロードバランサーの種類は従来の(クラシック)Application Load Balancer にロールバックされています。

従来の(クラシック)ロードバランサーにロールバックされている

しかし、この状態ではバックエンド サービスの移行状態が「テスト中」のままとなります。

ロールバックは完了しているが、移行状態が「テスト中」のままになっている

このままでもロードバランサー全体の動作に影響はありませんが、gcloud CLI で移行状態を元に戻します。

まず、バックエンド サービスのステータスをテスト前の状態である「テスト準備完了」にします。

# バックエンド サービスの移行状態を「テスト準備完了」にする
$ gcloud compute backend-services update {バックエンド サービスの名前} \
  --external-managed-migration-state=PREPARE \
  --global

バックエンド サービスのステータスを「テスト準備完了」に戻す

6分程待ってから、バックエンド サービスのステータスを移行作業を始める前の「未開始」に戻します。

# バックエンド サービスのステータスを「未開始」にする(移行前の状態)
$ gcloud compute backend-services update {バックエンド サービスの名前} \
  --clear-external-managed-migration-state \
  --global

これで、「移行」タブの情報がロードバランサーの移行を実施する前の状態に戻ります。

「移行」タブの情報が移行前の状態に戻っている

佐々木 駿太 (記事一覧)

G-gen最北端、北海道在住のクラウドソリューション部エンジニア

2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2025 Fellowに選出。好きなGoogle CloudプロダクトはCloud Run。

趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。