HTTP/2 の使用(サービス)

Cloud Run サービスのデフォルトでは、Cloud Run は HTTP/2 リクエストをコンテナに送信する際に、リクエストを HTTP/1 にダウングレードします。そのようなダウングレードをせずにエンドツーエンドで HTTP/2 を使用するようにサービスを明示的に設定する場合、HTTP/2 用に構成できます。このページでは、その構成方法について説明します。

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

HTTP/2 エンドツーエンドの設定と更新

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

新しいサービスを作成する場合、または新しいリビジョンをデプロイする場合に、Google Cloud コンソール、gcloud コマンドライン、または 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 構成の template.containersgoogle_cloud_run_v2_service リソースに次の内容を追加します。コンテナが 8080 以外のポートで HTTP リクエストをリッスンしている場合は、8080 をそのポート番号に置き換えます。

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
      }
    }
  }
}

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 設定を見つけます。