コンテナ インスタンスがリクエストを受信すると、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 Run サービスに対する Cloud Run デベロッパー(
roles/run.developer
) -
サービス ID に対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)
ソースコードからサービスまたは関数をデプロイする場合は、プロジェクトと 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 エンドツーエンドの使用を指定できます。
コンソール
Google Cloud コンソールで Cloud Run に移動します。
メニューから [サービス] を選択し、[コンテナをデプロイ] をクリックして新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[ネットワーキング] タブをクリックします。
- [HTTP/2 接続を有効にする] を選択します。
[作成] または [デプロイ] をクリックします。
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 を使用する場合は、