API Gateway と Cloud Run for gRPC のスタートガイド
このページでは、gRPC で Cloud Run バックエンド サービスを管理、保護するために API Gateway を設定する方法を説明します。
タスクリスト
次のタスクリストを参照しながら、チュートリアルを実施してください。gRPC を使用して Cloud Run バックエンド サービスの API Gateway をデプロイするには、すべてのタスクを行う必要があります。
- Google Cloud プロジェクトを作成または選択します。
- 独自の Cloud Run をデプロイしていない場合は、サンプルのバックエンド gRPC サービスをデプロイします。始める前にのステップ 7 をご覧ください。
- 必要な API Gateway サービスを有効にします。
- API を記述する gRPC API 構成ドキュメントを作成し、Cloud Run へのルートを構成します。 gRPC を使用した API 構成をご覧ください。
- API 構成を使用して API Gateway をデプロイします。API ゲートウェイのデプロイをご覧ください。
- リクエストを送信して API のデプロイをテストします。API にリクエストを送信するをご覧ください。
- サービスに対するアクティビティを追跡します。API の活動を追跡するをご覧ください。
- Google Cloud アカウントに課金されないようにします。 クリーンアップをご覧ください。
始める前に
- Google Cloud コンソールで [ダッシュボード] ページに移動し、 Google Cloud プロジェクトを選択または作成します。 
- プロジェクトに対して課金が有効になっていることを確認します。 
- 後で必要になるため、プロジェクト ID をメモしておきます。このページでは以降、このプロジェクト ID を PROJECT_ID として記載します。 
- 後で必要になるため、プロジェクト番号をメモしておきます。このページでは以降、このプロジェクト番号を PROJECT_NUMBER として記載します。 
- Google Cloud CLI をダウンロードしてインストールします。 
- gRPC Python クイックスタートの手順に従い、gRPC と gRPC ツールをインストールします。 
- このチュートリアルで使用する Python-grpc-bookstore-serverのサンプル バックエンド gRPC Cloud Run サービスをデプロイします。gRPC サービスは次のコンテナ イメージを使用します。 - gcr.io/endpointsv2/python-grpc-bookstore-server:2- クイックスタート: 事前にビルドされたサンプル コンテナをデプロイするの手順に従って、サービスをデプロイします。 - gcr.io/endpointsv2/python-grpc-bookstore-server:2でクイックスタートで指定されているコンテナイメージを置き換えます。- サービス 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 list
必要なサービスが表示されない場合は、次のコマンドを使用してサービスを有効にします。
gcloud services enable apigateway.googleapis.comgcloud services enable servicemanagement.googleapis.comgcloud services enable servicecontrol.googleapis.com
gcloud サービスの詳細については、gcloud サービスをご覧ください。
gRPC での API 構成の作成
bookstore-grpc サンプルには、ローカルにコピーして構成する必要のあるファイルが含まれています。
- サービスの .protoファイルから、自己完結型 protobuf 記述子ファイルを作成します。- サンプル リポジトリから現在の作業ディレクトリに bookstore.protoのコピーを保存します。このファイルは Bookstore サービスの API を定義します。
- 作業ディレクトリの下に次のディレクトリを作成します。mkdir generated_pb2
- protocプロトコル バッファ コンパイラを使用して、記述子ファイル- api_descriptor.pbを作成します。- bookstore.protoを保存したディレクトリで次のコマンドを実行します。- python3 -m grpc_tools.protoc \ --include_imports \ --include_source_info \ --proto_path=. \ --descriptor_set_out=api_descriptor.pb \ --python_out=generated_pb2 \ --grpc_python_out=generated_pb2 \ bookstore.proto - 上記のコマンドでは、 - --proto_pathが現在の作業ディレクトリに設定されています。gRPC ビルド環境で、- .proto入力ファイルに別のディレクトリを使用する場合は、- bookstore.protoを保存したディレクトリをコンパイラが検索するように- --proto_pathを変更します。
 
- サンプル リポジトリから現在の作業ディレクトリに 
- 
現在の作業ディレクトリ(bookstore.protoを含む同じディレクトリ)にapi_config.yamlという名前のテキスト ファイルを作成します。便宜上、このページでは gRPC API 構成ドキュメントをそのファイル名で表記していますが、必要に応じて別の名前を指定することもできます。ファイルに次の内容を追加します。# The configuration schema is defined by the service.proto file. # https://github.com/googleapis/googleapis/blob/master/google/api/service.proto type: google.api.Service config_version: 3 name: "*.apigateway.PROJECT_ID.cloud.goog" title: API Gateway + Cloud Run gRPC apis: - name: endpoints.examples.bookstore.Bookstore usage: rules: # ListShelves methods can be called without an API Key. - selector: endpoints.examples.bookstore.Bookstore.ListShelves allow_unregistered_calls: true backend: rules: - selector: "*" address: grpcs://python-grpc-bookstore-server-HASH-uc.a.run.app nameフィールドはtypeと同じレベルにする必要があります。
- nameフィールドの- *.apigateway.PROJECT_ID.cloud.googという名前のサービス。ここで、PROJECT_ID は、 Google Cloud プロジェクト ID の名前です。
- backend.rulesセクションの- addressフィールドで、grpcs://python-grpc-bookstore-server-HASH-uc.a.run.app を python-grpc-bookstore-server バックエンド gRPC Cloud Run サービスの実際の URL に置き換えます。ここで、HASH はサービスの作成時に生成された一意のハッシュコードです。- この例では、始める前にで作成した gRPC Bookstore バックエンド サービスを使用していることを想定しています。必要であれば、この値を Cloud Run サービスの URL に置き換えます。 
- gRPC API 構成ドキュメントを保存します。
- API 構成を作成します。gcloud api-gateway api-configs create CONFIG_ID \ --api=API_ID --project=PROJECT_ID \ --grpc-files=api_descriptor.pb,api_config.yaml - CONFIG_ID は API 構成の名前を指定します。
- API_ID は API の名前を指定します。
- PROJECT_ID は Google Cloud プロジェクトの名前を指定します。
 gcloud api-gateway api-configs create grpc-config \ --api=grpc-test --project=my-test-project \ --grpc-files=api_descriptor.pb,api_config.yaml 
API Gateway のデプロイ
gRPC API 構成をゲートウェイにデプロイするには、次のコマンドを実行します。
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 create bookstore-grpc \ --api=grpc-test --api-config=grpc-config \ --location=us-central1 --project=my-project
正常に完了したら、次のコマンドを使用してゲートウェイの詳細を表示できます。
gcloud api-gateway gateways describe GATEWAY_ID \ --location=GCP_REGION --project=PROJECT_ID
このコマンドの出力で、defaultHostname プロパティの値をメモします。これは、次の手順でデプロイメントをテストする際に使用するゲートウェイ URL のホスト名の部分です。
例:
https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev
API にリクエストを送信する
サンプル API にリクエストを送信するには、Python で作成された gRPC クライアントを使用できます。
- gRPC クライアント コードがホストされる git リポジトリのクローンを作成します。 - git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git 
- 作業ディレクトリに移動します。 - cd python-docs-samples/endpoints/bookstore-grpc/ 
- 依存関係をインストールします。 - pip3 install virtualenv - virtualenv env- source env/bin/activate- pip3 install -r requirements.txt
- サンプル API にリクエストを送信します。 - python3 bookstore_client.py --host=DEFAULT_HOSTNAME --port 443 --use_tls true - DEFAULT_HOSTNAME のゲートウェイの - defaultHostnameプロパティをプロトコル識別子なしで指定します。例:- python3 bookstore_client.py --host=my-gateway-a12bcd345e67f89g0h.uc.gateway.dev --port 443 --use_tls true 
API の活動を追跡する
- Google Cloud コンソールの [API Gateway] ページで、API のアクティビティ グラフを確認します。API をクリックして、[概要] ページにアクティビティ グラフを表示します。グラフにリクエストが反映されるまでにしばらく時間がかかる場合があります。 
- [ログ エクスプローラ] ページで API のリクエストログを確認します。[ログ エクスプローラ] ページへのリンクは、Google Cloud コンソールの [API Gateway] ページにあります。 - [API Gateway] ページで次の操作を行います。 - 表示する API を選択します。
- [詳細] タブをクリックします。
- [ログ] の下にあるリンクをクリックします。
 
これで、gRPC を使用して API Gateway で API をデプロイしてテストできました。
クリーンアップ
このクイックスタートで使用したリソースに対して Google Cloud アカウントに課金されないようにするには、次の操作を行います。
このチュートリアルで使用した Google Cloud プロジェクトの削除もできます。