HTTPS リクエストで呼び出す

サービスまたは関数を作成すると、Cloud Run によってサービスの HTTPS エンドポイントが提供されます。HTTPS リクエストに応答してサービスを実行するように有効にできます。

すべての Cloud Run サービスには、サービスのデフォルトの HTTPS エンドポイントを表す安定した HTTPS URL があります。ただし、カスタム ドメインを構成することもできます。

ユースケースには、次のようなものがあります。

  • カスタム RESTful ウェブ API
  • 限定公開マイクロサービス
  • ウェブ アプリケーション用の HTTP ミドルウェアまたはリバース プロキシ
  • パッケージ化されたウェブ アプリケーション

公開サービスを作成する

Cloud Run で公開サービスを作成する際の要件は、次のとおりです。

  • 公共のインターネットからサービスへのアクセス
  • 一般公開用の URL

サービスを一般公開するには、デプロイ中またはデプロイ後にいつでも非認証(一般公開)アクセスを許可するようにサービスを設定します。

Service URL

Cloud Run は、すべてのサービスにハッシュベースの非確定 URL を割り当てます。サービス名の長さが許せば、Cloud Run はサービスに確定的な URL も割り当てます。

これらのデフォルトの run.app URL を無効にできます。

サービスの URL を取得するには、Google Cloud コンソールでサービス名をクリックするか、gcloud CLI で次のコマンドを実行します。

gcloud run services describe SERVICE --format 'value(status.url)'

表示時に確定 URL が優先されます。

決定論的な URL

確定的な URL を使用すると、サービスが作成される前にサービス URL を予測できます。これは、サービス間通信に役立ちます。

確定的な URL は、63 文字以下の DNS セグメントでのみ使用できます。DNS セグメントには、サービス名、プロジェクト番号、トラフィック タグが含まれます。

Cloud Run サービスの確定的 URL の形式は次のとおりです。

https://[TAG---]SERVICE_NAME-PROJECT_NUMBER.REGION.run.app

ここで

  • TAG は、リクエストするリビジョンのオプションのトラフィック タグです。
  • PROJECT_NUMBER は Google Cloud のプロジェクト番号です。
  • SERVICE_NAME は、Cloud Run サービスの名前です。
  • REGION はリージョンの名前です(us-central1 など)。

非確定的 URL

非決定的な URL は決定的な形式ではありません。つまり、URL の 2 番目のフィールドはランダムなハッシュであるため、サービスをデプロイする前に完全な URL を予測することはできません。ただし、サービスをデプロイした後は、URL は安定したままになります。

Cloud Run サービスの非確定 URL の形式は https://[TAG---]SERVICE_IDENTIFIER.run.app です。ここで、TAG はリクエストしているリビジョンのオプションのトラフィック タグを表し、SERVICE_IDENTIFIER は Cloud Run サービスの安定した一意の識別子です。SERVICE_IDENTIFIER は固定された形式ではないため、解析しないでください。SERVICE_IDENTIFIER 生成のロジックは変更される可能性があります。

HTTP から HTTPS へのリダイレクト

Cloud Run はすべての HTTP リクエストを HTTPS にリダイレクトしますが、TLS はウェブサービスに到達する前に終了します。保護されていない URL(http://)を持つその他のウェブリソースを参照するウェブリソースがサービスで生成されると、混合コンテンツの警告やエラーが発生する場合があります。すべての参照ウェブ URI に対して https プロトコルを使用するか、または X-Forwarded-Proto HTTP ヘッダーなどの HTTP リクエストでプロキシ ディレクティブのアカウントを使用します。

HTTP と HTTP/2

デフォルトで、Cloud Run はリクエストがコンテナに送信される際、HTTP/2 リクエストを HTTP/1 にダウングレードします。エンドツーエンドで HTTP/2 を使用するようにサービスを明示的に設定する場合は、HTTP/2 の使用をご覧ください。

限定公開サービスを作成する

Cloud Run で限定公開サービスを作成するには、IAM 起動元権限を利用してサービスへのアクセスを制限する必要があります。

アプリケーション レベルの認可と認証のメカニズム(Identity Platform など)を使用してサービスへのアクセスを制限することもできます。

限定公開サービスをテストする

限定公開サービスをテストする場合、Google Cloud CLI の Cloud Run プロキシを使用するのが最も簡単な方法です。この方法では、限定公開サービスが http://localhost:8080(または --port で指定されたポート)にプロキシされ、アクティブなアカウントのトークンまたは指定した別のトークンが提供されます。これにより、ウェブブラウザや curl などのツールを使用できます。 これは、ブラウザでウェブサイトや API を非公開でテストする場合におすすめの方法です。

次のコマンドラインを使用して、Linux、macOS、WSL(推奨)または Cygwin 環境のローカルでサービスをプロキシできます。

gcloud run services proxy SERVICE --project PROJECT-ID

curl などのツールを使用して、Authorization のヘッダーに認証トークンを渡すことで、プロキシを使用せずに限定公開サービスをテストすることもできます。

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL

限定公開サービス間

Cloud Run サービスは、サービス間認証を使用して、別の Cloud Run サービスを呼び出すことができます。

限定公開サービスを呼び出すサンプルコード

ID トークンを取得し、プライベート サービスに HTTP リクエストを送信する方法を示すコードサンプルについては、サービス間認証のトピックをご覧ください。

ミドルウェアを使用してサービスを強化する

HTTPS プロキシは、キャッシュ保存、リクエストの検証、認証など、HTTP サービスから一般的な機能をオフロードできます。マイクロサービスの場合、多くの HTTP プロキシは API ゲートウェイ ソリューションや Istio などのサービス メッシュの一部です。

Cloud Run サービスの拡張に使用できる Google Cloud プロダクトには、次のものがあります。

HTTPS リクエストで関数を呼び出す

デフォルトでは、Cloud Run で作成されたすべての関数には run.app HTTPS URL があり、これを使用して関数をトリガーできます。Eventarc トリガーで作成された関数にも、run.app URL 機能を無効にすることでオプトアウトしない限り、HTTPS URL が付与されます。