Cloud Endpoints によって管理される API をデプロイする

このクイックスタートでは、Endpoints で管理するサンプル API をデプロイする手順について説明します。サンプルコードには次のものが含まれています。

  • 3 文字の IATA コードから空港名を照会するための REST API。
  • API 構成を Endpoints にアップロードするためのスクリプト。
  • サンプル API をホストする App Engine フレキシブル環境バックエンドをデプロイするためのスクリプト。

リクエストをサンプル API に送信した後、Google Cloud コンソールで Endpoints のアクティビティ グラフと Google Cloud Observability のログを確認できます。これらのツールによって API をモニタリングし、使用状況に関する分析情報を得ることができます。

このクイックスタートでは、スクリプトを使用して構成手順を簡素化し、アクティビティ グラフとログの動作をすばやく確認できます。サンプル API の構成とデプロイの方法については、API フレームワークのいずれかのチュートリアルを選択してください。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

Cloud Shell の起動

  1. Google Cloud コンソールで、サンプル API で使用するプロジェクトに自分が属していることを確認します。

  2. Cloud Shell を開きます。

    Cloud Shell を開く

    Google Cloud コンソールの一番下にある新しいフレームの中で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。セッションが初期化されるまで数秒かかることがあります。

    Cloud Shell セッション

  3. 既存のプロジェクトを使用している場合は、インストールされているすべての gcloud コンポーネントが最新バージョンになっていることを確認します。

    gcloud components update
    

サンプルコードを取得する

  1. Cloud Shell で次のコマンドを入力して、サンプル API とスクリプトを取得します。

    git clone https://github.com/GoogleCloudPlatform/endpoints-quickstart
    
  2. サンプルコードが入っているディレクトリに移動します。

    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 構成をデプロイするには:

  1. Cloud Shell の endpoints-quickstart ディレクトリで、次のように入力します。

    cd scripts
    
  2. サンプルに含まれている次のスクリプトを実行します。

    ./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.com
gcloud 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 には、SEAJFK などの有効な IATA 空港コードを設定した 1 つのクエリ パラメータ iataCode を渡します。

./query_api.sh JFK

: App Engine がリクエストにレスポンスするまで数分かかる場合があります。リクエストを送信して HTTP 502、503 または他のサーバーエラーが返された場合には、1 分ほど待ってからもう一度リクエストしてください。

これで Endpoints の API のデプロイとテストが完了しました。

API の活動を追跡する

デプロイされた API を Endpoints で利用すると、Google Cloud コンソールで重要なオペレーション指標をモニタリングし、Stackdriver Logging によってユーザーと使用状況に関する分析情報を得ることができます。

  1. Cloud Shell で、トラフィック生成スクリプトを実行して、グラフとログにデータが入力されるようにします。

    ./generate_traffic.sh
    
  2. Google Cloud コンソールで、API のアクティビティ グラフを確認します。

    [Endpoints] の [サービス] ページに移動

    リクエストがグラフに反映されるまでしばらく時間がかかることがあります。データが表示されるまでの間に、次の操作を行うことが可能です。

    • [権限] サイドパネルが開いていない場合は、[+ 権限] をクリックします。[権限] パネルを使用して、API にアクセスできるユーザーとアクセスレベルを制御できます。

    • [デプロイの履歴] をクリックします。このタブには、デプロイ時間や変更のデプロイ担当者など、API のデプロイ履歴が表示されます。

    • [概要] をクリックします。受信トラフィックが表示されます。トラフィック生成スクリプトを 1 分間実行すると、合計レイテンシ グラフに 3 行(50 パーセンタイル値、95 パーセンタイル値、98 パーセンタイル値)が表示されます。このデータからレスポンス時間を推定できます。

  3. グラフの下のテーブルまでスクロールし、[リンク] の下にある [GET/airportName] の [ログを表示] をクリックします。[ログ エクスプローラ] ページに API のリクエストログが表示されます。

  4. Cloud Shell を開きます。

    Cloud Shell を開く

  5. スクリプトを停止するには、Control+C を押します。

API に割り当てを追加する

Endpoints を使用すると、アプリケーションが API を呼び出せるペースを制御するための割り当てを設定できます。割り当てを使用することにより、単一のクライアントによる過度の使用から API を保護できます。

  1. Cloud Shell で、割り当てがある Endpoints 構成をデプロイします。

    ./deploy_api.sh ../openapi_with_ratelimit.yaml
    

    更新された Endpoints 構成をデプロイすると、1 分以内にアクティブになります。

  2. Google Cloud コンソールで、[認証情報] ページに移動します。

    [ドメインの確認] ページに移動

  3. [認証情報を作成] をクリックし、[API キー] をクリックします。新しい API キーが画面に表示されます。

  4. [コピー] をクリックします。

  5. Cloud Shell で、次のように入力します。YOUR_API_KEY は、先ほど作成した API キーに置き換えます。

    export API_KEY=YOUR_API_KEY
    
  6. 生成された 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
    
  7. これで、API は 1 分あたりのリクエスト数が 5 に制限されました。次のコマンドを実行して、トラフィックを API に送信し、割り当て制限をトリガーします。

    ./generate_traffic_with_key.sh $API_KEY
    
  8. このスクリプトを 5~10 秒間実行した後、Control+C キーを押してスクリプトを停止します。

  9. 別の認証済みリクエストを 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 プロジェクトを削除してプロジェクト内のすべてのリソースへの課金を停止します。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ