API 管理の追加

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

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

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

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

API に API 管理を追加するには:

  1. ビルドファイルを構成するの説明に従って、Maven pom.xml ファイルまたは Gradle build.gradle ファイルを設定します。

  2. ビルドファイルで Google Cloud プロジェクト ID を設定していることを確認します。

    Maven

    <endpoints.project.id> を検索します。YOUR_PROJECT_ID は、実際の Google Cloud プロジェクト ID で置き換えます。次に例を示します。

    <endpoints.project.id>example-project-12345</endpoints.project.id>

    <endpoints.project.id>YOUR_PROJECT_ID</endpoints.project.id>

    Gradle

    1. def projectId を検索します。YOUR_PROJECT_ID は、実際の Google Cloud プロジェクト ID で置き換えます。例:

      def projectId = 'example-project-12345'

    2. build.gradle ファイルに replaceProjectId タスクが含まれていることを確認します。これにより、appengine-web.xml ファイルと web.xml ファイルにプロジェクト ID が設定されます。

      task replaceProjectId(type: Copy) {
          from 'src/main/webapp/WEB-INF/'
          include '*.xml'
          into "build/exploded-${archivesBaseName}/WEB-INF"
          expand(endpoints:[project:[id:projectId]])
          filteringCharset = 'UTF-8'
      }

  3. API プロジェクトの web.xml ファイルで、API 管理サーブレットのフィルタ構成を追加します。

    <!-- Add a filter that fetches the service config from service management. -->
    <filter>
        <filter-name>endpoints-api-configuration</filter-name>
        <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class>
    </filter>
    
    <!-- Add a filter that performs Endpoints logging and monitoring. -->
    <filter>
        <filter-name>endpoints-api-controller</filter-name>
        <filter-class>com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter</filter-class>
        <init-param>
            <param-name>endpoints.projectId</param-name>
            <param-value>${endpoints.project.id}</param-value>
        </init-param>
        <init-param>
            <param-name>endpoints.serviceName</param-name>
            <param-value>${endpoints.project.id}.appspot.com</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>endpoints-api-configuration</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>endpoints-api-controller</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
  4. API プロジェクトのビルド構成を変更します。

    Maven

    1. API 管理の依存関係を追加します。

      <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.14</version>
      </dependency>
    2. クライアント ライブラリと OpenAPI ドキュメント openapi.json の生成に使用できるプラグインを含めます。

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>endpoints-framework-maven-plugin</artifactId>
        <version>2.1.0</version>
        <configuration>
          <!-- plugin configuration -->
          <hostname>${endpoints.project.id}.appspot.com</hostname>
        </configuration>
      </plugin>

    Gradle

    1. API 管理の依存関係を追加します。

      compile 'com.google.endpoints:endpoints-management-control-appengine:1.0.14'
      compile 'com.google.endpoints:endpoints-framework-auth:1.0.14'
    2. プラグインを Maven Central から取得するように外部依存関係を宣言します。

      classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
    3. サーバー側の Endpoints Frameworks Gradle プラグインを使用します。このプラグインは Open API ドキュメントを生成します。

      apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    4. Endpoints サービスの名前を構成します。

      endpointsServer {
        // Endpoints Framework Plugin server-side configuration
        hostname = "${projectId}.appspot.com"
      }
  5. 依存関係を変更した後、プロジェクトをクリーンアップして API をビルドします。

    Maven

        mvn clean
        mvn package

    Gradle

        gradle clean
        gradle build
  6. OpenAPI ドキュメント openapi.json を生成します。

    Maven

    mvn endpoints-framework:openApiDocs

    Gradle

    gradle endpointsOpenApiDocs
  7. OpenAPI ドキュメントをデプロイします。

     gcloud endpoints services deploy openapi.json
    

    初めて openapi.json をデプロイするとき、新しい 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.json を再度デプロイすると、サービス構成 ID のリビジョン番号が増分されます。

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

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

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

  8. 環境変数の値を設定するために、appengine-web.xml ファイルを編集します。

    <env-variables>
        <env-var name="ENDPOINTS_SERVICE_NAME" value="${endpoints.project.id}.appspot.com" />
    </env-variables>

    ${endpoints.project.id} は、実際の Google Cloud プロジェクト ID に置き換えます。例:

    <env-var name="ENDPOINTS_SERVICE_NAME" value="example-project-12345.appspot.com" />
    
  9. アプリケーションを再デプロイします。

    Maven

    mvn appengine:deploy

    Gradle

    gradle appengineDeploy

  10. API にリクエストを送信して、API をテストします。

  11. API の指標を表示するには、Google Cloud コンソールでプロジェクトの [Endpoints] > [サービス] ページを開きます。

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