Cloud Endpoints によって管理される API をデプロイする
このクイックスタートでは、Endpoints で管理するサンプル API をデプロイする手順について説明します。サンプルコードには次のものが含まれています。
- 3 文字の IATA コードから空港名を照会するための REST API。
- API 構成を Endpoints にアップロードするためのスクリプト。
- サンプル API をホストする App Engine フレキシブル環境バックエンドをデプロイするためのスクリプト。
リクエストをサンプル API に送信した後、Google Cloud コンソールで Endpoints のアクティビティ グラフと Google Cloud Observability のログを確認できます。これらのツールによって API をモニタリングし、使用状況に関する分析情報を得ることができます。
このクイックスタートでは、スクリプトを使用して構成手順を簡素化し、アクティビティ グラフとログの動作をすばやく確認できます。サンプル API の構成とデプロイの方法については、API フレームワークのいずれかのチュートリアルを選択してください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
Cloud Shell の起動
Google Cloud コンソールで、サンプル API で使用するプロジェクトに自分が属していることを確認します。
Cloud Shell を開きます。
Google Cloud コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。セッションが初期化されるまで数秒かかることがあります。
既存のプロジェクトを使用している場合は、インストールされているすべての
gcloud
コンポーネントが最新バージョンになっていることを確認します。gcloud components update
サンプルコードを取得する
Cloud Shell で次のコマンドを入力して、サンプル API とスクリプトを取得します。
git clone https://github.com/GoogleCloudPlatform/endpoints-quickstart
サンプルコードが入っているディレクトリに移動します。
cd endpoints-quickstart
Endpoints 構成をデプロイする
Endpoints に REST API を公開するには、API を記述している OpenAPI 構成ファイルが必要です。サンプル API には、事前に構成された OpenAPI ファイル(openapi.yaml
)が付属しています。
Endpoints では、Google Cloud のインフラストラクチャ サービスである Service Management を使用して、API とサービスの作成と管理を行います。Endpoints を使用して API を管理するには、API の OpenAPI 構成ファイルを Service Management にデプロイします。
Endpoints 構成をデプロイするには:
Cloud Shell の
endpoints-quickstart
ディレクトリで、次のように入力します。cd scripts
サンプルに含まれている次のスクリプトを実行します。
./deploy_api.sh
Endpoints では、OpenAPI 構成ファイルの host
フィールドを使用して、サービスを識別します。deploy_api.sh
スクリプトは、Google Cloud プロジェクトの ID を、host
フィールドに構成されている名前の一部として設定します。独自サービス用の OpenAPI 構成ファイルを準備する際には、この処理を手動で行う必要があります。
その後、スクリプト内の gcloud endpoints services deploy openapi.yaml
コマンドによって、OpenAPI 構成が Service Management にデプロイされます。
サービスの作成と構成が行われる際、Service Management は情報を Google Cloud コンソールに出力します。openapi.yaml
内のパスが API キーを要求していないことを示す警告は無視して構いません。正常に完了すると、サービス構成 ID とサービス名を示す次のような行が表示されます。
Service Configuration [2017-02-13-r2] uploaded for service [airports-api.endpoints.example-project.cloud.goog]
必要なサービスを有効にする
Endpoints では、少なくとも次の Google サービスを有効にする必要があります。
名前 | タイトル |
---|---|
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
endpoints.googleapis.com |
Google Cloud Endpoints |
ほとんどの場合、Endpoints 構成をデプロイすると、これらの必須サービスが有効になります。
必要なサービスが有効になっていることを確認するには、次のコマンドを実行します。
gcloud services list
必要なサービスが表示されない場合は、次のコマンドを使用してサービスを有効にします。
gcloud services enable servicemanagement.googleapis.comgcloud services enable servicecontrol.googleapis.com
gcloud services enable endpoints.googleapis.com
Endpoints サービスも有効にします。
gcloud services enable YOUR-PROJECT-ID.appspot.com
gcloud
コマンドの詳細については、gcloud
サービスをご覧ください。
API バックエンドをデプロイする
ここまでの手順で OpenAPI 構成を Service Management にデプロイしましたが、API バックエンドを提供するためのコードはまだデプロイしていません。サンプルに含まれている deploy_app.sh
スクリプトでは、API バックエンドをホストする App Engine フレキシブル環境を作成し、API を App Engine にデプロイします。
API バックエンドをデプロイするには:
Cloud Shell の
endpoints-quickstart/scripts
ディレクトリで、次のスクリプトを実行します。./deploy_app.sh
このスクリプトは、gcloud app create --region="$REGION"
コマンドを実行して、us-central
リージョンに App Engine フレキシブル環境を作成します。
App Engine フレキシブル環境バックエンドが作成されるまでには数分かかります。アプリケーションが作成されると、次のように出力されます。
Success! The app is now created.
次に、gcloud app deploy
コマンドを実行して、サンプル API を App Engine にデプロイします。
次のように出力されます。
Deploying ../app/app_template.yaml...You are about to deploy the following services:
API を App Engine にデプロイするのに数分かかります。API が App Engine に正常にデプロイされると、次のように出力されます。
Deployed service [default] to [https://example-project.appspot.com]
API にリクエストを送信する
Cloud Shell で、サンプル API をデプロイした後、次のスクリプトを実行することにより、リクエストを送信できます。
./query_api.sh
このスクリプトでは、API にリクエストを送信するために使用される curl
コマンドがエコーされ、その結果が表示されます。次のように出力されます。
curl "https://example-project.appspot.com/airportName?iataCode=SFO" San Francisco International Airport
API には、SEA
や JFK
などの有効な IATA 空港コードを設定した 1 つのクエリ パラメータ iataCode
を渡します。
./query_api.sh JFK
注: App Engine がリクエストにレスポンスするまで数分かかる場合があります。リクエストを送信して HTTP 502、503 または他のサーバーエラーが返された場合には、1 分ほど待ってからもう一度リクエストしてください。
これで Endpoints の API のデプロイとテストが完了しました。
API の活動を追跡する
デプロイされた API を Endpoints で利用すると、Google Cloud コンソールで重要なオペレーション指標をモニタリングし、Stackdriver Logging によってユーザーと使用状況に関する分析情報を得ることができます。
Cloud Shell で、トラフィック生成スクリプトを実行して、グラフとログにデータが入力されるようにします。
./generate_traffic.sh
Google Cloud コンソールで、API のアクティビティ グラフを確認します。
リクエストがグラフに反映されるまでしばらく時間がかかることがあります。データが表示されるまでの間に、次の操作を行うことが可能です。
[権限] サイドパネルが開いていない場合は、[+ 権限] をクリックします。[権限] パネルを使用して、API にアクセスできるユーザーとアクセスレベルを制御できます。
[デプロイの履歴] をクリックします。このタブには、デプロイ時間や変更のデプロイ担当者など、API のデプロイ履歴が表示されます。
[概要] をクリックします。受信トラフィックが表示されます。トラフィック生成スクリプトを 1 分間実行すると、合計レイテンシ グラフに 3 行(50 パーセンタイル値、95 パーセンタイル値、98 パーセンタイル値)が表示されます。このデータからレスポンス時間を推定できます。
グラフの下のテーブルまでスクロールし、[リンク] の下にある [GET/airportName] の [ログを表示] をクリックします。[ログ エクスプローラ] ページに API のリクエストログが表示されます。
Cloud Shell を開きます。
スクリプトを停止するには、
Control+C
を押します。
API に割り当てを追加する
Endpoints を使用すると、アプリケーションが API を呼び出せるペースを制御するための割り当てを設定できます。割り当てを使用することにより、単一のクライアントによる過度の使用から API を保護できます。
Cloud Shell で、割り当てがある Endpoints 構成をデプロイします。
./deploy_api.sh ../openapi_with_ratelimit.yaml
更新された Endpoints 構成をデプロイすると、1 分以内にアクティブになります。
Google Cloud コンソールで、[認証情報] ページに移動します。
[認証情報を作成] をクリックし、[API キー] をクリックします。新しい API キーが画面に表示されます。
[コピー] をクリックします。file_copy
Cloud Shell で、次のように入力します。
YOUR_API_KEY
は、先ほど作成した API キーに置き換えます。export API_KEY=YOUR_API_KEY
生成された API キーを使用して API にリクエストを送信します。
./query_api_with_key.sh $API_KEY
出力は次のようになります。
curl -H 'x-api-key: AIzeSyDbdQdaSdhPMdiAuddd_FALbY7JevoMzAB' "https://example-project.appspot.com/airportName?iataCode=SFO" San Francisco International Airport
これで、API は 1 分あたりのリクエスト数が 5 に制限されました。次のコマンドを実行して、トラフィックを API に送信し、割り当て制限をトリガーします。
./generate_traffic_with_key.sh $API_KEY
このスクリプトを 5~10 秒間実行した後、
Control+C
キーを押してスクリプトを停止します。別の認証済みリクエストを API に送信します。
./query_api_with_key.sh $API_KEY
出力は次のようになります。
{ "code": 8, "message": "Insufficient tokens for quota 'airport_requests' and limit 'limit-on-airport-requests' of service 'example-project.appspot.com' for consumer 'api_key:AIzeSyDbdQdaSdhPMdiAuddd_FALbY7JevoMzAB'.", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "stackEntries": [], "detail": "internal" } ] }
レスポンスが異なる場合は、generate_traffic_with_key.sh
スクリプトをもう一度実行してから、再試行してください。
完了しました。これで、API のレート制限を正しく設定できました。API メソッドごとに異なる制限を設定したり、複数種類の割り当てを作成したり、どのユーザーがどの API を使用しているかを追跡したりすることもできます。
詳細については、割り当てについてをご覧ください。
API のデベロッパー ポータルを作成する
Cloud Endpoints Portal を使用してデベロッパー ポータルを作成できます。デベロッパー ポータルとは、サンプル API の操作に使用できるウェブサイトです。詳細については、Cloud Endpoints Portal の概要をご覧ください。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。
課金されないようにするには、Google Cloud プロジェクトを削除してプロジェクト内のすべてのリソースへの課金を停止します。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
Endpoints の概要については以下をご覧ください。
Endpoints でサポートされている各種 API フレームワークについては以下をご覧ください。
サンプル API の構成とデプロイの方法については、API フレームワークのいずれかのチュートリアルを選択してください。