サービスまたは関数を作成すると、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 プロダクトには、次のものがあります。
API ゲートウェイ。他の Cloud Run サービスのプロキシとして使用する API を作成、保護、モニターするために使用できます。
Firebase Hosting。Cloud Run as a dynamic backend で使用するウェブ アプリケーションのフロントエンドを構築するために使用できます。
HTTPS リクエストで関数を呼び出す
デフォルトでは、Cloud Run で作成されたすべての関数には run.app
HTTPS URL があり、これを使用して関数をトリガーできます。Eventarc トリガーで作成された関数にも、run.app
URL 機能を無効にすることでオプトアウトしない限り、HTTPS URL が付与されます。