API 管理の追加

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

Endpoints Frameworks で利用できる API 管理機能は次のとおりです。

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

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

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

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

Python 用の gcloud CLI をインストールして構成する

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

    gcloud CLI をダウンロードしてインストールする

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

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

    gcloud components update
    
  4. gcloud CLI が、Google Cloud にある対象のデータとサービスにアクセスできるよう許可されていることを確認します。

    gcloud auth login
    

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

  5. デフォルト プロジェクトを実際のプロジェクト ID に設定します。YOUR_PROJECT_ID は、実際の Google Cloud プロジェクト 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 は、Google Cloud プロジェクト 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 は、Google Cloud プロジェクト 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 は実際の Google Cloud プロジェクトのプロジェクト 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 は実際の Google Cloud プロジェクト 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 の指標を表示するには、Google Cloud コンソールでプロジェクトの [Endpoints] > [サービス] ページを開きます。

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