サービスに HTTP/2 を使用する

コンテナ インスタンスがリクエストを受信すると、Cloud Run は、ネイティブ gRPC トラフィックを除き、リクエストを HTTP/2 から HTTP/1 にダウングレードします。ネイティブ gRPC トラフィックが正しく機能するためには HTTP/2 が必要です。このページでは、エンドツーエンドの HTTP/2 を使用するようにサービスを構成し、Cloud Run がリクエストを HTTP1 にダウングレードしないようにする方法について説明します。

HTTP を使用したサービス呼び出しの詳細については、HTTPS リクエストで呼び出すをご覧ください。

構成する前に

Cloud Run サービスは、HTTP/2 クリアテキストh2c)形式でリクエストを処理する必要があります。Google のフロントエンド インフラストラクチャは TLS を終端し、暗号化されたチャネルを介して h2c トラフィックを Cloud Run とコンテナに転送します。

サービスが h2c リクエストをサポートしていることを確認するには、以下の curl コマンドを使用してサービスをローカルでテストします。

curl -i --http2-prior-knowledge http://localhost:PORT

必要なロール

Cloud Run サービスの構成とデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

ソースコードからサービスまたは関数をデプロイする場合は、プロジェクトと Cloud Build サービス アカウントに追加のロールが付与されている必要があります。

Cloud Run に関連付けられている IAM ロールと権限のリストについては、Cloud Run IAM ロールCloud Run IAM 権限をご覧ください。Cloud Run サービスがGoogle Cloud APIs(Cloud クライアント ライブラリなど)と連携している場合は、サービス ID の構成ガイドをご覧ください。ロールの付与の詳細については、デプロイ権限アクセス権の管理をご覧ください。

サポートされている HTTP/2 サービス

HTTP/2 は、さまざまなアプリケーションに最適です。一般的なユースケースは次のとおりです。

  • gRPC サービス: gRPC を使用して通信する高パフォーマンス、低レイテンシのマイクロサービスを構築します。
  • 高スループットの API: 多数の小さなリクエストを効率的に処理する必要があるアプリケーションや、クライアントにデータを push する必要があるアプリケーションのオーバーヘッドを削減します。

HTTP/2 エンドツーエンドを設定して更新する

構成を変更すると、新しいリビジョンが作成されます。明示的に更新しない限り、以降のリビジョンでも、この構成が自動的に適用されます。

新しいサービスを作成する場合、または新しいリビジョンをデプロイする場合に、 Google Cloud コンソール、Google Cloud CLI、または YAML を使用して HTTP/2 エンドツーエンドの使用を指定できます。

コンソール

  1. Google Cloud コンソールで Cloud Run に移動します。

    Cloud Run に移動

  2. メニューから [サービス] を選択し、[コンテナをデプロイ] をクリックして新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。

  3. 新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。

  4. [ネットワーキング] タブをクリックします。

    画像

    • [HTTP/2 接続を有効にする] を選択します。
  5. [作成] または [デプロイ] をクリックします。

gcloud

HTTP/2 を使用するように特定のサービスを更新するには、次のコマンドを使用します。

gcloud run services update SERVICE --use-http2

SERVICE は、実際のサービス名に置き換えます。

次のコマンドを使用して、デプロイ時に HTTP/2 を使用するようにサービスを設定することもできます。

gcloud run deploy --image IMAGE_URL --use-http2

IMAGE_URL は、コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)に置き換えます。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG の形式です。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. 次の例に示すように、ports を名前 h2c に更新し、containerPort を選択したポートに更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - name: h2c
              containerPort: 8080

    次のように置き換えます。

    • SERVICE: Cloud Run サービスの名前
    • IMAGE_URL: コンテナ イメージへの参照(us-docker.pkg.dev/cloudrun/container/hello:latest など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL は LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG の形式です。
    • REVISION は、新しいリビジョン名に置き換えるか、削除します(存在する場合)。新しいリビジョン名を指定する場合は、次の条件を満たす必要があります
      • SERVICE- で始まる
      • 小文字、数字、- のみが使用されている
      • 末尾が - ではない
      • 63 文字以内である
  3. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Terraform 構成の google_cloud_run_v2_service リソースに次の内容を追加します。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-h2c"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      # Enable HTTP/2
      ports {
        name           = "h2c"
        container_port = 8080
      }
    }
  }
}

コンテナが 8080 以外のポートで HTTP リクエストをリッスンしている場合は、8080 をそのポート番号に置き換えます。

http/2 設定を表示する

Cloud Run サービスの現在の http/2 設定を表示するには:

コンソール

  1. Google Cloud コンソールで Cloud Run に移動します。

    Cloud Run に移動

  2. 目的のサービスをクリックして、[サービスの詳細] ページを開きます。

  3. [変更内容] タブをクリックします。

  4. 右側の詳細パネルの [ネットワーキング] タブに、http/2 設定が表示されます。

gcloud

  1. 次のコマンドを使用します。

    gcloud run services describe SERVICE
  2. 返された構成で、http/2 設定を見つけます。

ロードバランサのバックエンドで HTTP/2 を使用する

HTTP/2 をリッスンするように構成すると、Cloud Run はアプリケーション ロードバランサからの HTTP/2 または gRPC トラフィックを自動的に処理します。ロードバランサのバックエンド サービスで特定の構成を行う必要はありません。

HTTP/2 または gRPC を使用するように Cloud Run を構成するには、次のいずれかの方法を使用します。