API 管理の追加

Cloud Endpoints Frameworks は、Extensible Service Proxy(ESP)が Cloud Endpoints に提供する機能に匹敵する API 管理機能を提供します。Endpoints Frameworks には、API バックエンドにリクエストを転送する前にすべてのリクエストを傍受し、必要なチェック(認証など)を行う組み込みの API ゲートウェイが含まれています。バックエンドが応答すると、Endpoints Frameworks はテレメトリーを収集して報告します。API の指標は、Google Cloud Platform Console の [エンドポイント] > [サービス] ページで確認できます。

Endpoints Frameworks で利用できる API 管理機能には次のものがあります。

API を Endpoints で管理するには、OpenAPI 仕様のバージョン 2.0 を使用して API を記述した OpenAPI ドキュメントをデプロイする必要があります。このページでは、Endpoints による API 管理を可能にする OpenAPI ドキュメントを生成してデプロイする方法について説明します。

API 管理を追加しなくても API でリクエストを処理することはできますが、その場合、API は GCP Console の [エンドポイント] > [サービス] ページに表示されず、Endpoints によって提供される機能(ロギング、モニタリング、割り当ての設定など)を使用できません。

必須ソフトウェアをインストールして構成する

まだ Python 用 Cloud SDK をインストールして構成していない場合は、API プロジェクト ディレクトリに Endpoints Frameworks Python ライブラリを追加します。このライブラリは、デプロイ時に API コードと一緒にアップロードされます。

Python 用 Cloud SDK をインストールして構成する

  1. Cloud SDK をインストールして初期化します。

    Cloud SDK をダウンロードしてインストールする

  2. Python 用の App Engine 拡張機能が含まれている gcloud コンポーネントをインストールします。

    gcloud components install app-engine-python
    
  3. Cloud SDK を更新します。

    gcloud components update
    
  4. Cloud SDK に GCP のデータやサービスへのアクセスが許可されていることを確認します。

    gcloud auth login
    

    新しいブラウザタブが開き、アカウントの選択を要求するプロンプトが表示されます。

  5. デフォルト プロジェクトをプロジェクト ID に設定します。YOUR_PROJECT_ID は、実際の GCP プロジェクト ID に置き換えてください。

    gcloud config set project YOUR_PROJECT_ID
    
  6. Linux の場合、ENDPOINTS_GAE_SDK 環境変数を App Engine SDK フォルダのパスに設定します。

    PATH_TO_CLOUD_SDK/platform/google_appengine
    

    PATH_TO_CLOUD_SDK は、次のコマンドの出力に置き換えます。

    gcloud info --format="value(installation.sdk_root)"
    

Endpoints Frameworks Python ライブラリを追加する

  1. C 拡張機能を Python 用にコンパイルできることを確認します。

    • Windows: Microsoft Visual C++ 9.0 以上が必要です。Microsoft ダウンロード センターから Microsoft Visual C++ Compiler for Python 2.7 をダウンロードできます。

    • その他のオペレーティング システム: オペレーティング システムによっては、コンパイラ ツール(build-essential というパッケージに含まれている場合もあります)や Python 開発ヘッダー(python-dev というパッケージに含まれている場合もあります)のインストールが必要になることがあります。

  2. API のメイン ディレクトリに移動します。

  3. API のメイン ディレクトリに /lib サブディレクトリを作成します。

    mkdir lib
    
  4. ライブラリをインストールします。

    pip install -t lib google-endpoints --ignore-installed
    

OpenAPI ドキュメントを生成する

API のメイン ディレクトリでフレームワーク ツールを使用し、OpenAPI ドキュメントを生成します。例:

単一のクラス

次のコマンドで、YOUR_PROJECT_ID を GCP プロジェクト ID に置き換えます。

python lib/endpoints/endpointscfg.py get_openapi_spec main.EchoApi \
    --hostname YOUR_PROJECT_ID.appspot.com

表示される警告は無視してください。

複数のクラス

コマンドラインで複数のクラスを一覧表示できます。Endpoints は、API 名とバージョンの組み合わせごとに OpenAPI ドキュメントを生成します。

1 つのサービスとして複数の API 名を異なる API 名でデプロイする場合は、--x-google-api-name フラグも追加する必要があります。このフラグを有効にすると、API 名に制限が追加されます。たとえば、名前は正規表現 [a-z][a-z0-9]{0,39} と一致している必要があります。つまり、名前は 1~40 文字で構成する必要があります。名前には英数字(小文字)と数字を使用できます。ただし、名前の先頭を数字にすることはできません。例:

次のコマンドで、YOUR_PROJECT_ID を GCP プロジェクト ID に置き換えます。

python lib/endpoints/endpointscfg.py get_openapi_spec main.FooApi main.BarApi \
   --hostname YOUR_PROJECT_ID.appspot.com \
   --x-google-api-name

表示される警告は無視してください。

Endpoints は、hostname 引数で指定されたテキストをサービス名として使用します。App Engine に API をデプロイすると、YOUR_PROJECT_ID.appspot.com という形式の名前を持つ DNS エントリが自動的に作成されます。

OpenAPI ドキュメントをデプロイする

単一のクラス

gcloud endpoints services deploy echov1openapi.json

複数のクラス

複数の OpenAPI ドキュメントがある場合は、これらのドキュメントをすべてコマンドラインで一覧表示します。次に例を示します。

 gcloud endpoints services deploy foov1openapi.json barv1openapi.json

OpenAPI ドキュメントを初めてデプロイすると、新しい Endpoints サービスが YOUR_PROJECT_ID.appspot.com という名前で作成されます。

正常に完了すると、次のような行にサービス構成 ID とサービス名が表示されます。

Service Configuration 2017-02-13r0 uploaded for service example-project-12345.appspot.com

上記の例では、2017-02-13r0 がサービス構成 ID です。この ID は、日付スタンプとそれに続くリビジョン番号で構成されます。OpenAPI ドキュメントを再度デプロイすると、サービス構成 ID のリビジョン番号が大きくなります。

サービス構成 ID をもう一度表示する必要がある場合は、次のコマンドを実行します。ただし、YOUR_PROJECT_ID を実際の GCP プロジェクトのプロジェクト ID に置き換えてください。

gcloud endpoints configs list --service=YOUR_PROJECT_ID.appspot.com

生成されたドキュメントを使用するのではなく、独自の OpenAPI ドキュメントを作成してデプロイできます。その場合は、上記の echov1openapi.json を独自の OpenAPI ドキュメントへのパスに置き換えるだけです。OpenAPI ドキュメントの作成方法の詳細については、OpenAPI の概要をご覧ください。

API を再デプロイしてテストする

  1. プロジェクトの app.yaml ファイルを編集し、次のように env_variables セクションを追加します。

    env_variables:
      ENDPOINTS_SERVICE_NAME: YOUR_PROJECT_ID.appspot.com
      ENDPOINTS_SERVICE_VERSION: YOUR_SERVICE_VERSION
    

    YOUR_PROJECT_ID は実際の GCP プロジェクト ID で、YOUR_SERVICE_VERSION は前の手順で取得したサービス構成 ID で置き換えますこれを app.yaml ファイルに追加してアプリケーションを再デプロイすると、Endpoints が API を管理するようになります。

  2. アプリケーションを再デプロイします。

    gcloud app deploy
    
  3. デプロイが成功するまで数分待ちます。警告メッセージは無視します。デプロイが完了すると、次のようなメッセージが表示されます。

    File upload done.
    Updating service [default]...done.
    
  4. 再デプロイに成功しているかどうか確認します。たとえば、次のように cURL を使用します。

    curl --request POST \
        --header "Content-Type: application/json" \
        --data '{"content":"echo"}' \
        https://YOUR_PROJECT_ID.appspot.com/_ah/api/echo/v1/echo?n=2
    

    echo は、API の名前で置き換えます。

    結果は次のようになります。

    {
     "content": "echo echo"
    }
    
  5. API にいくつかの追加のリクエストを行います。

  6. API の指標を表示するには、GCP Console で Endpoints のプロジェクトの [エンドポイント] > [サービス] ページを開きます。

    [エンドポイント] の [サービス] ページに移動

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

App Engine 用 Cloud Endpoints Frameworks
ご不明な点がありましたら、Google のサポートページをご覧ください。