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 をインストールして構成する
gcloud CLI をインストールして初期化します。
Python 用の App Engine 拡張機能が含まれている
gcloud
コンポーネントをインストールします。gcloud components install app-engine-python
gcloud CLI を更新します。
gcloud components update
gcloud CLI が、Google Cloud にある対象のデータとサービスにアクセスできるよう許可されていることを確認します。
gcloud auth login
新しいブラウザタブが開き、アカウントの選択を求めるプロンプトが表示されます。
デフォルト プロジェクトを実際のプロジェクト ID に設定します。
YOUR_PROJECT_ID
は、実際の Google Cloud プロジェクト ID に置き換えてください。gcloud config set project YOUR_PROJECT_ID
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 ライブラリを追加する
C 拡張機能を Python 用にコンパイルできることを確認します。
Windows: Microsoft Visual C++ 9.0 以上が必要です。Microsoft ダウンロード センターから Microsoft Visual C++ Compiler for Python 2.7 をダウンロードできます。
その他のオペレーティング システム: オペレーティング システムによっては、コンパイラ ツール(
build-essential
というパッケージに含まれている場合もあります)や、Python 開発ヘッダー(python-dev
というパッケージに含まれている場合もあります)のインストールが必要です。
API のメイン ディレクトリに移動します。
API のメイン ディレクトリにサブディレクトリ
/lib
を作成します。mkdir lib
ライブラリをインストールします。
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 を再デプロイしてテストする
プロジェクトの
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 を管理するようになります。アプリケーションを再デプロイします。
gcloud app deploy
デプロイが成功するまで数分待ちます。警告メッセージは無視します。デプロイが完了すると、次のようなメッセージが表示されます。
File upload done. Updating service [default]...done.
再デプロイに成功しているかどうか確認します。たとえば、次のように 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" }
API にいくつかの追加のリクエストを行います。
API の指標を表示するには、Google Cloud コンソールでプロジェクトの [Endpoints] > [サービス] ページを開きます。