Cloud Run を使用してリージョン外部アプリケーション ロードバランサを設定する

このページでは、Cloud Run バックエンドを使用してリージョン外部アプリケーション ロードバランサをデプロイする方法について説明します。これを設定するには、ロードバランサにサーバーレス NEG バックエンドを使用します。

この手順を試す前に、次のトピックについて理解しておいてください。

このガイドでは、サーバーレス NEG バックエンドにリクエストをプロキシするアプリケーション ロードバランサの構成方法について説明します。

サーバーレス NEG を使用すると、ロードバランサで Cloud Run サービスを使用できます。サーバーレス NEG バックエンドを使用してロードバランサを構成した後は、そのロードバランサへのリクエストが Cloud Run バックエンドに転送されるようになります。

始める前に

  1. Google Cloud CLI をインストールする
  2. Cloud Run サービスをデプロイする
  3. 権限を構成する

Google Cloud SDK をインストールする

Google Cloud CLI ツールをインストールします。このツールのコンセプトとインストールについては、gcloud の概要をご覧ください。

gcloud CLI を初めて使用する場合は、gcloud init を実行して gcloud ディレクトリを初期化します。

Cloud Run サービスをデプロイする

このページで説明する手順では、Cloud Run サービスをすでに実行中であることを前提としています。

このページの例では、Cloud Run クイックスタートを使用して Cloud Run サービスをデプロイしています。

サーバーレス NEG とロードバランサは、Cloud Run サービスと同じリージョンに存在する必要があります。internal and cloud load balancing への上り(内向き)を制限することで、Cloud Run サービスのデフォルト URL に直接送信される外部リクエストをブロックできます。例:

gcloud run deploy CLOUD_RUN_SERVICE_NAME \
    --platform=managed \
    --allow-unauthenticated \
    --ingress=internal-and-cloud-load-balancing \
    --region=REGION \
    --image=IMAGE_URL

作成するサービスの名前をメモします。このページの残りの部分では、このサービスにリクエストを転送するロードバランサの設定方法について説明します。

権限を構成する

このガイドに沿って作業を進めるには、プロジェクト内のサーバーレス NEG とロードバランサを作成する必要があります。そのためには、プロジェクトのオーナーまたは編集者であるか、次の Compute Engine IAM のロールと権限が必要です。

タスク 必要なロール
ロードバランサとネットワーク コンポーネントの作成 ネットワーク管理者
NEG の作成と変更 Compute インスタンス管理者
SSL 証明書の作成と変更 セキュリティ管理者

ネットワークとサブネットを構成する

ネットワークとそのサブネットを構成するには、次の操作を行います。

  • VPC ネットワークとサブネットを作成します。
  • プロキシ専用サブネットを作成します。

VPC ネットワークを作成する

カスタムモードの VPC ネットワークを作成し、リージョン内にサブネットを作成します。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] に「lb-network」と入力します。

  4. [サブネット作成モード] で [カスタム] を選択します。

  5. [新しいサブネット] セクションで、サブネットに次の構成パラメータを指定します。

    1. [名前] に「lb-subnet」と入力します。
    2. リージョンを選択します。
    3. [IP アドレス範囲] に「10.1.2.0/24」と入力します。
    4. [完了] をクリックします。
  6. [作成] をクリックします。

gcloud

  1. gcloud compute networks create コマンドを使用して、カスタム VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. lb-network ネットワークにサブネットを作成します。この例では、サブネットに 10.1.2.0/24 の IP アドレス範囲を使用します。任意の有効なサブネット範囲を構成できます。

    gcloud compute networks subnets create lb-subnet \
    --network=lb-network \
    --range=10.1.2.0/24 \
    --region=REGION
    

プロキシ専用サブネットを作成する

lb-network ネットワークの特定のリージョンにある、すべてのリージョン Envoy ベースのロードバランサにプロキシ専用サブネットを作成します。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. プロキシ専用サブネットを追加する共有 VPC ネットワークの名前をクリックします。

  3. [サブネットを追加] をクリックします。

  4. [名前] フィールドに「proxy-only-subnet」と入力します。

  5. リージョンを選択します。

  6. [目的] を [リージョン マネージド プロキシ] に設定します。

  7. IP アドレス範囲を入力します(10.129.0.0/23 など)。

  8. [追加] をクリックします。

gcloud

  1. gcloud compute networks subnets create コマンドを使用して、プロキシ専用サブネットを作成します。

    この例では、プロキシ専用サブネットに 10.129.0.0/23 の IP アドレス範囲を使用します。任意の有効なサブネット範囲を構成できます。

    gcloud compute networks subnets create proxy-only-subnet \
     --purpose=REGIONAL_MANAGED_PROXY \
     --role=ACTIVE \
     --region=REGION \
     --network=lb-network \
     --range=10.129.0.0/23
    

ロードバランサを作成する

次の図では、ロードバランサがサーバーレス NEG バックエンドを使用して、リクエストをサーバーレス Cloud Run サービスに転送しています。

ロードバランサからサーバーレス NEG バックエンドへのトラフィックは、ファイアウォール ルールの対象外である VPC の外部で定義された特別なルートを使用します。したがって、ロードバランサにサーバーレス NEG バックエンドしかない場合は、プロキシ専用サブネットからサーバーレス バックエンドへのトラフィックを許可するファイアウォール ルールを作成する必要はありません。

Cloud Run アプリケーションのリージョン外部 HTTP(S) ロード バランシング アーキテクチャ。
Cloud Run アプリケーションのリージョン外部 HTTP(S) ロード バランシング アーキテクチャ(クリックして拡大)

コンソール

構成を開始する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
  4. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  5. [グローバルまたはシングル リージョンのデプロイ] で [リージョン ワークロードに最適] を選択し、[次へ] をクリックします。
  6. [構成] をクリックします。

基本構成

  1. ロードバランサの名前に「serverless-lb」と入力します。
  2. ネットワークを選択します(lb_network など)。
  3. ウィンドウを開いたままにして続行します。

フロントエンドを構成する

  1. 続行する前に、SSL 証明書があることを確認してください。
  2. [フロントエンドの構成] をクリックします。
  3. 名前を入力します。
  4. リージョン外部アプリケーション ロードバランサを構成するには、次のようにフィールドに入力します。
    1. [プロトコル] で、[HTTPS] を選択します。
    2. [ネットワーク サービス ティア] で [スタンダード] を選択します。
    3. [IP バージョン] で [IPv4] を選択します。
    4. [IP アドレス] で [エフェメラル] を選択します。
    5. [ポート] で 443 を選択します。
    6. [証明書] の下で、既存の SSL 証明書を選択するか、新しい証明書を作成します。

      次の例は、Compute Engine SSL 証明書を作成する方法を示しています。

    7. [新しい証明書の作成] をクリックします。
      1. [名前] フィールドに名前を入力します。
      2. 該当するフィールドで PEM 形式のファイルをアップロードします。
        • 証明書
        • 秘密鍵
      3. [作成] をクリックします。

    SSL 証明書リソースを設定せずにこのプロセスをテストする場合は、HTTP ロードバランサを設定できます。

  5. (省略可)HTTP ロードバランサを作成する手順は次のとおりです。
    1. [プロトコル] で、HTTP を選択します。
    2. [ネットワーク サービス ティア] で [スタンダード] を選択します。
    3. [IP バージョン] で [IPv4] を選択します。
    4. [IP アドレス] で [エフェメラル] を選択します。
    5. [ポート] で 80 を選択します。
  6. [完了] をクリックします。

バックエンド サービスを構成する

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスの作成または選択] プルダウン メニューで、バックエンド サービスにポインタを合わせて、[バックエンド サービスを作成] を選択します。
  3. [バックエンド サービスの作成] ウィンドウで、[名前] を入力します。
  4. [バックエンド タイプ] で、[サーバーレス ネットワーク エンドポイント グループ] を選択します。
  5. [プロトコル] は変更せず、そのままにします。このパラメータは無視されます。
  6. [バックエンド] > [新しいバックエンド] で [サーバーレス ネットワーク エンドポイント グループの作成] を選択します。
    1. [サーバーレス ネットワーク エンドポイント グループの作成] ウィンドウで、名前を入力します。
    2. [リージョン] に、ロードバランサのリージョンが表示されます。
    3. [サーバーレス ネットワーク エンドポイント グループの種類] フィールドで、[Cloud Run] を選択します。サポートされているタイプは Cloud Run のみです。
    4. [サービス名を選択] を選択します。
    5. [サービス] プルダウン リストから、ロードバランサを作成する Cloud Run サービスを選択します。
    6. [完了] をクリックします。
    7. [作成] をクリックします。
  7. [バックエンド サービスの作成] ウィンドウで [作成] をクリックします。

ルーティング ルールを構成する

ルーティング ルールは、トラフィックの転送方法を決定します。トラフィックは、バックエンド サービスまたは Kubernetes サービスに転送できます。ホストとパスのマッチャーに明確に一致しないトラフィックはすべて、デフォルト サービスに送信されます。

  1. [単純なホストとパスのルール] をクリックします。
  2. [バックエンド] プルダウン リストからバックエンド サービスを選択します。

構成を確認する

  1. [確認と完了] をクリックします。
  2. [バックエンド]、[ホストとパスのルール]、[フロントエンド] の値を確認します。
  3. 省略可: [同等のコード] をクリックして、ロードバランサの作成に使用する REST API リクエストを表示します。
  4. [作成] をクリックします。ロードバランサの作成が完了するまで待ちます。
  5. ロードバランサの名前(serverless-lb)をクリックします。
  6. ロードバランサの IP アドレスをメモします(次のタスクで使用します)。

gcloud

  1. ロードバランサに静的外部 IP アドレスを予約します。
        gcloud compute addresses create IP_ADDRESS_NAME  \
            --region=REGION \
            --network-tier=STANDARD
        
  2. Cloud Run サービスにサーバーレス NEG を作成します。
        gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \
            --region=REGION \
            --network-endpoint-type=serverless  \
            --cloud-run-service=CLOUD_RUN_SERVICE_NAME
        
  3. リージョン バックエンド サービスを作成します。--protocol を HTTP に設定します。このパラメータは無視されますが、指定されていないと --protocol はデフォルトで TCP に設定されるため、このパラメータは必須です。
        gcloud compute backend-services create BACKEND_SERVICE_NAME \
            --load-balancing-scheme=EXTERNAL_MANAGED \
            --protocol=HTTP \
            --region=REGION
        
  4. サーバーレス NEG をバックエンドとしてバックエンド サービスに追加します。
        gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
            --region=REGION \
            --network-endpoint-group=SERVERLESS_NEG_NAME \
            --network-endpoint-group-region=REGION
        
  5. 受信リクエストをバックエンド サービスに転送するためのリージョン URL マップを作成します。
        gcloud compute url-maps create URL_MAP_NAME \
            --default-service=BACKEND_SERVICE_NAME \
            --region=REGION
        
    この URL マップの例では、1 つのサーバーレス アプリを表す 1 つのバックエンド サービスのみを対象としているため、ホストルールやパスマッチャーを設定する必要はありません。
  6. 省略可: この手順は、クライアントとロードバランサ間で HTTPS を使用している場合に行います。HTTP ロードバランサの場合、必須ではありません。

    Compute Engine または Certificate Manager の証明書を作成できます。Certificate Manager を使用して証明書を作成するには、次のいずれかの方法を使用します。

    • リージョン セルフマネージド証明書。リージョン セルフマネージド証明書の作成と使用については、リージョン セルフマネージド証明書をデプロイするをご覧ください。証明書マップはサポートされていません。

    • リージョンの Google マネージド証明書。証明書マップはサポートされていません。

      Certificate Manager では、次のタイプのリージョン Google マネージド証明書がサポートされています。

    • 証明書を作成したら、証明書をターゲット プロキシに直接関連付けます。

      リージョン セルフマネージド SSL 証明書リソースを作成するには:
          gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
              --certificate CRT_FILE_PATH \
              --private-key KEY_FILE_PATH \
              --region=REGION
          
    • URL マップにリクエストを転送するリージョン ターゲット プロキシを作成します。

      HTTP ロードバランサの場合は、HTTP ターゲット プロキシを作成します。
          gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
              --url-map=URL_MAP_NAME \
              --region=REGION
          
      HTTPS ロードバランサの場合は、HTTPS ターゲット プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS ロードバランサ用の SSL 証明書を保持するため、この手順で証明書も読み込みます。
          gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
              --ssl-certificates=SSL_CERTIFICATE_NAME \
              --url-map=URL_MAP_NAME \
              --region=REGION
          
    • 受信リクエストをプロキシに転送する転送ルールを作成します。HTTP ロードバランサの場合:
          gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
              --load-balancing-scheme=EXTERNAL_MANAGED \
              --network-tier=STANDARD \
              --network=lb-network \
              --target-http-proxy=TARGET_HTTP_PROXY_NAME \
              --target-http-proxy-region=REGION \
              --region=REGION \
              --ports=80
          
      HTTPS ロードバランサの場合:
          gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
              --load-balancing-scheme=EXTERNAL_MANAGED \
              --network-tier=STANDARD \
              --network=lb-network \
              --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
              --target-https-proxy-region=REGION \
              --region=REGION \
              --ports=443
          

ロードバランサをテストする

ロードバランサを構成したので、ロードバランサの IP アドレスにトラフィックを送信できるようになりました。

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. 作成したロードバランサをクリックします。

  3. ロードバランサの IP アドレスをメモします。

  4. HTTP ロードバランサの場合は、ウェブブラウザを使用して http://IP_ADDRESS に移動し、ロードバランサをテストします。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。Cloud Run サービスのホームページが表示されます。

  5. HTTPS ロードバランサの場合は、ウェブブラウザを使用して https://IP_ADDRESS に移動し、ロードバランサをテストします。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。Cloud Run サービスのホームページが表示されます。
    テストに自己署名証明書を使用した場合、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。警告は無視してクリックし、実際のページを表示します。

追加の構成オプション

このセクションでは、代替および追加の構成オプションを提供する構成例を示します。これらのタスクはすべて省略可です。また、任意の順序で行うことができます。

URL マスクを使用する

サーバーレス NEG を作成する際に、特定の Cloud Run サービスを選択するのではなく、URL マスクを使用して、同じドメインでリクエストを処理する複数のサービスを指定できます。URL マスクは、URL スキーマのテンプレートです。サーバーレス NEG はこのテンプレートを使用して、受信リクエストの URL からサービス名を抽出し、そのリクエストを適切なサービスにマッピングします。

URL マスクが特に役立つのは、サービスが Google Cloud からデプロイ済みサービスに割り当てられるデフォルトのアドレスではなく、カスタム ドメインにマッピングされている場合です。URL マスクを使用すると、アプリケーションでカスタム URL パターンを使用していても、1 つのルールで複数のサービスとバージョンをターゲットにできます。

サーバーレス NEG の概要: URL マスクをまだ読んでいない場合は、必ずお読みください。

URL マスクを作成する

ロードバランサの URL マスクを作成するには、まず、サービスの URL から取り掛かります。この例では、https://example.com/login で実行されているサーバーレス アプリのサンプルを使用します。この URL で、アプリの login サービスが提供されることになります。

  1. URL から http または https を削除します。これで、example.com/login だけが残ります。
  2. サービス名を URL マスクのプレースホルダに置き換えます。
    • Cloud Run: Cloud Run サービス名をプレースホルダ <service> に置き換えます。Cloud Run サービスにタグが関連付けられている場合は、そのタグ名をプレースホルダ <tag> に置き換えます。この例では、URL マスクが example.com/<service> になります。
  3. 省略可: URL のパスの部分からサービス名を抽出できる場合は、ドメインを省略できます。URL マスクのパスの部分は、最初のスラッシュ(/)文字で区別されます。スラッシュ(/)が URL マスクに存在しない場合、マスクはホストのみを表していると見なされます。したがって、この例では URL マスクを /<service> に短縮できます。

    同様に、URL のホストの部分から <service> を抽出できる場合は、URL マスクからパスを完全に省略できます。

    最初のプレースホルダの前にあるホストまたはサブドメインの部分と、最後のプレースホルダの後にあるパスの部分も省略できます。このような場合、プレースホルダにその部分に必要な情報が取り込まれます。

以下に、これらのルールを説明する例をいくつか示します。

この表では、example.com という名前のカスタム ドメインがあり、すべての Cloud Run サービスがこのドメインにマッピングされていることを前提としています。

サービス、タグ名 Cloud Run のカスタム ドメイン URL URL マスク
サービス: login https://login-home.example.com/web <service>-home.example.com
サービス: login https://example.com/login/web example.com/<service> or /<service>
サービス: login、タグ: test https://test.login.example.com/web <tag>.<service>.example.com
サービス: login、タグ: test https://example.com/home/login/test example.com/home/<service>/<tag> または /home/<service>/<tag>
サービス: login、タグ: test https://test.example.com/home/login/web <tag>.example.com/home/<service>

URL マスクを使用してサーバーレス NEG を作成する

コンソール

新しいロードバランサの場合、このドキュメントで説明したものと同じエンドツーエンドのプロセスを使用できます。バックエンド サービスを構成する場合は、特定のサービスを選択する代わりに、URL マスクを入力します。

既存のロードバランサがある場合は、バックエンド構成を編集し、サーバーレス NEG に特定のサービスの代わりに URL マスクを指定できます。

URL マスクベースのサーバーレス NEG を既存のバックエンド サービスに追加するには、次の操作を行います。

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。
    [ロード バランシング] に移動
  2. 編集するバックエンド サービスがあるロードバランサの名前をクリックします。
  3. [ロードバランサの詳細] ページで、[編集] をクリックします。
  4. [Edit global external Application Load Balancer] ページで、[バックエンドの構成] をクリックします。
  5. [バックエンドの構成] ページで、変更するバックエンド サービスの [編集] をクリックします。
  6. [バックエンドを追加] をクリックします。
  7. [サーバーレス ネットワーク エンドポイント グループの作成] を選択します。
    1. [名前] に「helloworld-serverless-neg」と入力します。
    2. [リージョン] に、ロードバランサのリージョンが表示されます。
    3. [サーバーレス ネットワーク エンドポイント グループの種類] で、サポートされているネットワーク エンドポイント グループの種類は Cloud Run のみです。
      1. [URL マスクを使用] を選択します。
      2. URL マスクを入力します。URL マスクの作成方法については、URL マスクの作成をご覧ください。
      3. [作成] をクリックします。

  8. [新しいバックエンド] で、[完了] をクリックします。
  9. [更新] をクリックします。

gcloud

example.com/<service> のサンプル URL マスクを使用してサーバーレス NEG を作成するには:

gcloud compute network-endpoint-groups create SERVERLESS_NEG_MASK_NAME \
    --region=REGION \
    --network-endpoint-type=serverless \
    --cloud-run-url-mask="example.com/<service>"

サーバーレス NEG の削除

バックエンド サービスに接続しているネットワーク エンドポイント グループは削除できません。NEG を削除する前に、NEG がバックエンド サービスから接続解除されていることを確認してください。

コンソール

  1. 削除するサーバーレス NEG がバックエンド サービスによって使用されていないことを確認するには、[ロード バランシングのコンポーネント] ページの [バックエンド サービス] タブに移動します。
    [バックエンド サービス] に移動
  2. サーバーレス NEG が使用中の場合は、次の操作を行います。
    1. サーバーレス NEG を使用しているバックエンド サービスの名前をクリックします。
    2. [編集] をクリックします。
    3. [バックエンド] のリストで をクリックし、バックエンド サービスからサーバーレス NEG バックエンドを削除します。
    4. [保存] をクリックします。

  3. Google Cloud コンソールの [ネットワーク エンドポイント グループ] ページに移動します。
    [ネットワーク エンドポイント グループ] に移動
  4. 削除するサーバーレス NEG のチェックボックスをオンにします。
  5. [削除] をクリックします。
  6. もう一度 [削除] をクリックして確定します。

gcloud

バックエンド サービスからサーバーレス NEG を削除するには、NEG が作成されたリージョンを指定する必要があります。

gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME \
    --network-endpoint-group=SERVERLESS_NEG_NAME \
    --network-endpoint-group-region=REGION \
    --region=REGION

サーバーレス NEG を削除するには:

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME \
    --region=REGION

次のステップ