サービスに 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 を使用する場合は、