API Gateway と Cloud Run のスタートガイド
このページでは、API Gateway を設定して Cloud Run バックエンド サービスを管理、保護する方法について説明します。
タスクリスト
次のタスクリストを参照しながら、チュートリアルを実施してください。Cloud Run バックエンド サービス用の API Gateway をデプロイするには、すべてのタスクを行う必要があります。
- Google Cloud プロジェクトを作成または選択します。
- 独自の Cloud Run をデプロイしていない場合は、サンプルのサービスをデプロイします。始める前にのステップ 7 をご覧ください。
- 必要な API Gateway サービスを有効にします。
- API を記述する OpenAPI 説明を作成し、Cloud Run バックエンド サービスへのルートを構成します。API 構成の作成をご覧ください。
- API 構成を使用して API Gateway をデプロイします。API ゲートウェイのデプロイをご覧ください。
- サービスに対するアクティビティを追跡します。API の活動を追跡するをご覧ください。
- Google Cloud アカウントに課金されないようにします。 クリーンアップをご覧ください。
始める前に
Google Cloud コンソールで [ダッシュボード] ページに移動し、 Google Cloud プロジェクトを選択または作成します。
プロジェクトに対して課金が有効になっていることを確認します。
このチュートリアルで使用するプロジェクト ID をメモします。このページでは以降、このプロジェクト ID を PROJECT_ID として記載します。
Google Cloud CLI をダウンロードしてインストールします。
gcloudコンポーネントを更新します。gcloud components update
デフォルト プロジェクトを設定します。PROJECT_ID は、 Google Cloud プロジェクト ID に置き換えます。
gcloud config set project PROJECT_ID
独自の Cloud Run サービスをデプロイしていない場合は、クイックスタート: 事前にビルドされたサンプル コンテナのデプロイの手順に沿って Google Cloud プロジェクトを選択または作成し、サンプル バックエンドをデプロイします。アプリの URL と、アプリがデプロイされているリージョンとプロジェクト ID をメモしておきます。
必要なサービスを有効にする
API Gateway では、次の Google サービスを有効にする必要があります。
| 名前 | タイトル |
|---|---|
apigateway.googleapis.com |
API Gateway API |
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
次のコマンドを使用して、これらのサービスを有効にします。
gcloud services enable apigateway.googleapis.comgcloud services enable servicemanagement.googleapis.comgcloud services enable servicecontrol.googleapis.com
gcloud サービスの詳細については、gcloud サービスをご覧ください。
API 構成を作成する
API ゲートウェイを使用してデプロイされた Cloud Run バックエンドへのトラフィックを管理する前に、API 構成が必要です。
特殊なアノテーションを含む OpenAPI 説明を使用して API 構成を作成し、選択した API Gateway の動作を定義できます。API Gateway がアプリを呼び出すために必要な情報を取得できるよう、このドキュメントには各 Cloud Run アプリの URL を設定した Google 固有のフィールドも追加する必要があります。
サポートされている OpenAPI 拡張機能の詳細については、以下をご覧ください。
API 構成を作成するには:
openapi-run.yamlという名前のテキスト ファイルを作成します便宜上、このページでは OpenAPI の説明をこのファイル名で表記していますが、必要に応じて別の名前を指定することもできます。- 次のファイルの内容を
openapi-run.yamlファイルにコピーします。OpenAPI 2.0
# openapi-run.yaml swagger: '2.0' info: title: API_ID optional-string description: Sample API on API Gateway with a Cloud Run backend version: 1.0.0 schemes: - https produces: - application/json x-google-backend: address: APP_URL paths: /assets/{asset}: get: parameters: - in: path name: asset type: string required: true description: Name of the asset. summary: Assets operationId: getAsset responses: '200': description: A successful response schema: type: string /hello: get: summary: Cloud Run hello world operationId: hello responses: '200': description: A successful response schema: type: string
titleフィールドで、API_ID を API の名前に置き換え、optional-string を任意の簡単な説明に置き換えます。API が存在しない場合は、API Config を作成するためのコマンドによって、指定した名前の API も作成されます。titleフィールドの値は、この API へのアクセス権を付与する API キーを作成する際に使用されます。API の命名ガイドラインについては、API ID の要件をご覧ください。x-google-backendセクションのaddressフィールドで、APP_URL を Cloud Run サービスの実際の URL(呼び出された API のフルパス)に置き換えます。例:https://hello-abc1def2gh-uc.a.run.app。
OpenAPI 3.x
# openapi-run.yaml openapi: 3.0.4 info: title: API_ID optional-string description: Sample API on API Gateway with a Cloud Run backend version: 1.0.0 # Define reusable components in x-google-api-management x-google-api-management: backends: cloudrun_backend: address: APP_URL deadline: 30.0 pathTranslation: APPEND_PATH_TO_ADDRESS protocol: "http/1.1" # Apply the backend configuration by referencing it by name. Set at the root so this applies to all operations unless overridden. x-google-backend: cloudrun_backend paths: /hello: get: summary: Greet a user operationId: hello responses: "200": description: A successful response content: application/json: schema: type: string
titleフィールドで、API_ID を API の名前に置き換え、optional-string を任意の簡単な説明に置き換えます。API が存在しない場合は、API Config を作成するためのコマンドによって、指定した名前の API も作成されます。titleフィールドの値は、この API へのアクセス権を付与する API キーを作成する際に使用されます。API の命名ガイドラインについては、API ID の要件をご覧ください。addressフィールドで、APP_URL を Cloud Run サービスの実際の URL(呼び出された API のフルパス)に置き換えます。例:https://hello-687541448612.us-central1.run.app。
- 次のコマンドを入力します。ここで、
- CONFIG_ID は API 構成の名前を指定します。
- API_ID は API の名前を指定します。API が存在しない場合は、このコマンドによって作成されます。
- PROJECT_ID は Google Cloud プロジェクトの名前を指定します。
- SERVICE_ACCOUNT_EMAIL は、認証が構成されたバックエンドのトークン署名に使用されるサービス アカウントを指定します。詳細については、サービスアカウントを作成するをご覧ください。
gcloud api-gateway api-configs create CONFIG_ID \ --api=API_ID --openapi-spec=openapi2-run.yaml \ --project=PROJECT_ID --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL
API 構成がダウンストリームのシステムに伝播される際に、このオペレーションが完了するまでに数分を要する場合があります。複雑な API 構成の作成が正常に完了するまでに最大 10 分を要する場合があります。
- API 構成が作成されたら、次のコマンドを実行して詳細を表示できます。
gcloud api-gateway api-configs describe CONFIG_ID \ --api=API_ID
API Gateway をデプロイする
これで、API Gateway に API をデプロイできるようになりました。 API Gateway に API をデプロイすると、API クライアントが API へのアクセスに使用できる外部 URL も定義されます。
次のコマンドを実行して、作成した API 構成を API Gateway にデプロイします。
gcloud api-gateway gateways create GATEWAY_ID \ --api=API_ID --api-config=CONFIG_ID \ --location=GCP_REGION --project=PROJECT_ID
説明:
- GATEWAY_ID はゲートウェイの名前を指定します。
- API_ID は、このゲートウェイに関連付けられた API Gateway API の名前を指定します。
- CONFIG_ID は、ゲートウェイにデプロイされた API 構成の名前を指定します。
GCP_REGION は、デプロイされたゲートウェイの Google Cloud リージョンです。
PROJECT_ID は Google Cloud プロジェクトの名前を指定します。
正常に完了したら、次のコマンドを使用してゲートウェイの詳細を表示できます。
gcloud api-gateway gateways describe GATEWAY_ID \ --location=GCP_REGION --project=PROJECT_ID
このコマンドの出力で、defaultHostname プロパティの値をメモします。これは、次の手順でデプロイをテストするために使用するゲートウェイ URL のホスト名部分です。
API デプロイをテストする
これでゲートウェイのデプロイ時に生成された URL を使用して API にリクエストを送信できるようになりました。
ウェブブラウザに次の URL を入力します。
- DEFAULT_HOSTNAME は、デプロイするゲートウェイ URL のホスト名の部分を指定します。
helloは、API 構成で指定されたパスです。
https://DEFAULT_HOSTNAME/hello
例:
https://my-gateway-687541448612.us-central1.run.app/hello
アプリを実行する Cloud Run コンテナがブラウザに表示されます。
完了しました。API ゲートウェイは Cloud Run バックエンド サービスへのアクセスを管理しています。
API のアクティビティを追跡する
Google Cloud コンソールの [API Gateway] ページで、API のアクティビティ グラフを確認します。API をクリックして、[概要] ページにアクティビティ グラフを表示します。グラフにリクエストが反映されるまでにしばらく時間がかかる場合があります。
[ログ エクスプローラ] ページで API のリクエストログを確認します。[ログ エクスプローラ] ページへのリンクは、Google Cloud コンソールの [API Gateway] ページにあります。
[API Gateway] ページで次の操作を行います。
- 表示する API を選択します。
- [詳細] タブをクリックします。
- [ログ] の下にあるリンクをクリックします。
クリーンアップ
このクイックスタートで使用したリソースに対して Google Cloud アカウントに課金されないようにするには、次の操作を行います。
このチュートリアルで使用した Google Cloud プロジェクトの削除もできます。