ESPv2 を使用した Compute Engine 用の Cloud Endpoints のスタートガイド

このチュートリアルでは、Compute Engine 上に事前にビルドされた Docker コンテナ内で稼働するサンプル API と Extensible Service Proxy V2(ESPv2)を構成してデプロイする方法について説明します。

サンプルコードの REST API は、OpenAPI 仕様に従って作成されています。このチュートリアルでは、API キーを作成して API へのリクエストで使用する方法も説明します。

Cloud Endpoints の概要については、Endpoints についてEndpoints アーキテクチャをご覧ください。

目標

タスクの概要を示す次のリストを参照しながら、チュートリアルを実施してください。API にリクエストを送信するには、すべてのタスクを行う必要があります。

  1. Google Cloud プロジェクトを設定します。始める前にをご覧ください。
  2. Compute Engine VM インスタンスを作成します。Compute Engine のインスタンスを作成するをご覧ください。
  3. サンプルコードをダウンロードします。サンプルコードを取得するをご覧ください。
  4. Endpoints の構成に使用する openapi.yaml ファイルを構成します。Endpoints を構成するをご覧ください。
  5. Endpoints 構成をデプロイして Endpoints サービスを作成します。Endpoints 構成をデプロイするをご覧ください。
  6. API と ESPv2 を Compute Engine VM でデプロイします。API バックエンドをデプロイするをご覧ください。
  7. IP アドレスを使用して API にリクエストを送信します。IP アドレスを使用してリクエストを送信するをご覧ください。
  8. サンプル API の DNS レコードを構成します。Endpoints の DNS を構成するをご覧ください。
  9. 完全修飾ドメイン名を使用して API にリクエストを送信します。FQDN を使用してリクエストを送信するをご覧ください。
  10. API のアクティビティを追跡します。API の活動を追跡するをご覧ください。
  11. Google Cloud アカウントに課金されないようにします。クリーンアップをご覧ください。

費用

このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. 後で必要になるため、プロジェクト ID をメモしておきます。
  7. サンプル API にリクエストを送信するためのアプリケーションが必要です。

    • Linux ユーザーと MacOS ユーザーの場合: このチュートリアルでは、curl の使用例を示します。これは通常、オペレーティング システムにプリインストールされています。 curl を所有していない場合は、curlリリースとダウンロードのページからダウンロードできます。
    • Windows ユーザーの場合: このチュートリアルでは、Invoke-WebRequest の使用例を示しています。これは PowerShell 3.0 以降でサポートされています。
  8. Google Cloud CLI をダウンロードします
  9. gcloud CLI を更新し、Endpoints コンポーネントをインストールします。
    gcloud components update
  10. Google Cloud CLI(gcloud)が、 Google Cloudにある対象のデータとサービスへのアクセスが許可されていることを確認します。
    gcloud auth login
    表示された新しいブラウザタブで、アカウントを選択します。
  11. デフォルト プロジェクトを実際のプロジェクト ID に設定します。
    gcloud config set project YOUR_PROJECT_ID

    YOUR_PROJECT_ID を実際のプロジェクト ID に置き換えます。他にも Google Cloud プロジェクトがあり、gcloud を使用してそれらのプロジェクトを管理する場合は、gcloud CLI 構成の管理をご覧ください。

  12. このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

Compute Engine インスタンスの作成

    Compute Engine のインスタンスを作成するには:

    1. In the Google Cloud console, go to the Create an instance page.

      Go to Create an instance

    2. [ファイアウォール] で、 [HTTP トラフィックを許可する] と [HTTPS トラフィックを許可する] を選択します。
    3. VM を作成するには、[作成] をクリックします。
    4. 必要なオプションを設定した状態の VM インスタンス作成ウィンドウのスクリーンショット

      インスタンスが起動するまで、しばらくお待ちください。準備が完了すると、[VM インスタンス] ページに緑色のステータス アイコン付きで表示されます。

    5. VM インスタンスに接続できることを確認します。
      1. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
      2. これで、ターミナルを使用して Debian インスタンスで Linux コマンドを実行できるようになりました。
      3. インスタンスとの接続を切断するには、「exit」と入力します。
    6. 後で必要となるため、インスタンス名、ゾーン、外部 IP アドレスをメモします。

サンプルコードをダウンロードする

サンプルコードをローカルマシンにダウンロードします。

Java

サンプル API をクローニングまたはダウンロードするには:

  1. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/java-docs-samples

    または、zip ファイルとしてサンプルをダウンロードし、ファイルを解凍します。

  2. サンプルコードが含まれているディレクトリに移動します。
    cd java-docs-samples/endpoints/getting-started
Python

サンプル API をクローニングまたはダウンロードするには:

  1. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples

    または、zip ファイルとしてサンプルをダウンロードし、ファイルを解凍します。

  2. サンプルコードが含まれているディレクトリに移動します。
    cd python-docs-samples/endpoints/getting-started
Go

サンプル API をクローニングまたはダウンロードするには:

  1. GOPATH 環境変数が設定されていることを確認します。
  2. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
    go get -d github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
  3. サンプルコードが含まれているディレクトリに移動します。
    cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
PHP

サンプル API をクローニングまたはダウンロードするには:

  1. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/php-docs-samples

    または、zip ファイルとしてサンプルをダウンロードし、ファイルを解凍します。

  2. サンプルコードが含まれているディレクトリに移動します。
    cd php-docs-samples/endpoints/getting-started
Ruby

サンプル API をクローニングまたはダウンロードするには:

  1. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples

    または、zip ファイルとしてサンプルをダウンロードし、ファイルを解凍します。

  2. サンプルコードが含まれているディレクトリに移動します。
    cd ruby-docs-samples/endpoints/getting-started
NodeJS

サンプル API をクローニングまたはダウンロードするには:

  1. ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples

    または、zip ファイルとしてサンプルをダウンロードし、ファイルを解凍します。

  2. サンプルコードが含まれているディレクトリに移動します。
    cd nodejs-docs-samples/endpoints/getting-started

Endpoints を構成する

OpenAPI 2.0 または OpenAPI 3.x に基づいて、アプリの surface と認証要件を記述する OpenAPI ドキュメントを用意する必要があります。詳細については、サポートされている OpenAPI バージョンをご覧ください。

また、ESPv2 がアプリを呼び出すために必要な情報を取得できるよう、このドキュメントには各アプリの URL を設定した Google 固有のフィールドも追加する必要があります。OpenAPI を初めて使用する場合は、OpenAPI の概要で詳細をご覧ください。

OpenAPI 2.0

OpenAPI 2.0 仕様を使用して Endpoints を構成するには、ダウンロードしたサンプルコードの endpoints/getting-started ディレクトリにある openapi.yaml ファイルを使用します。

OpenAPI 2.0 仕様の内容は次のようになります。

swagger: "2.0"
info:
  description: "A simple Google Cloud Endpoints API example."
  title: "Endpoints Example"
  version: "1.0.0"

host: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"

consumes:
  - "application/json"
produces:
  - "application/json"

schemes:
# Uncomment the next line if you configure SSL for this API.
# - "https"
  - "http"

paths:
  /echo:
    post:
      description: "Echo back a given message."
      operationId: "echo"
      produces:
        - "application/json"
      responses:
        200:
          description: "Echo"
          schema:
            $ref: "#/definitions/echoMessage"
      parameters:
        -
          description: "Message to echo"
          in: body
          name: message
          required: true
          schema:
            $ref: "#/definitions/echoMessage"
      security:
        - api_key: []
  /auth/info/googlejwt:
    get:
      description: "Returns the requests' authentication information."
      operationId: "auth_info_google_jwt"
      produces:
        - "application/json"
      responses:
        200:
          description: "Authenication info."
          schema:
            $ref: "#/definitions/authInfoResponse"
      security:
        - api_key: []
          google_jwt: []
  /auth/info/googleidtoken:
    get:
      description: "Returns the requests' authentication information."
      operationId: "authInfoGoogleIdToken"
      produces:
        - "application/json"
      responses:
        200:
          description: "Authentication info."
          schema:
            $ref: "#/definitions/authInfoResponse"
      security:
        - api_key: []
          google_id_token: []

definitions:
  echoMessage:
    type: "object"
    properties:
      message:
        type: "string"
  authInfoResponse:
    properties:
      id:
        type: "string"
      email:
        type: "string"

securityDefinitions:
  # This section configures basic authentication with an API key.
  api_key:
    type: "apiKey"
    name: "key"
    in: "query"

  # This section configures authentication using Google API Service Accounts
  # to sign a json web token. This is mostly used for server-to-server
  # communication.
  google_jwt:
    authorizationUrl: ""
    flow: "implicit"
    type: "oauth2"
    # This must match the 'iss' field in the JWT.
    x-google-issuer: "jwt-client.endpoints.sample.google.com"
    # Update this with your service account's email address.
    x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/jwk/YOUR_SERVICE_ACCOUNT_EMAIL"
    # This must match the "aud" field in the JWT. You can add multiple
    # audiences to accept JWTs from multiple clients.
    x-google-audiences: "echo.endpoints.sample.google.com"
  # This section configures authentication using Google OAuth2 ID Tokens.
  # ID Tokens can be obtained using OAuth2 clients, and can be used to access
  # your API on behalf of a particular user.

  google_id_token:
    authorizationUrl: ""
    flow: "implicit"
    type: "oauth2"
    x-google-issuer: "https://accounts.google.com"
    x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs"
    # Your OAuth2 client's Client ID must be added here. You can add
    # multiple client IDs to accept tokens from multiple clients.
    x-google-audiences: "YOUR_CLIENT_ID"

OpenAPI 3.x

OpenAPI 3.x 仕様を使用して Endpoints を構成するには、ダウンロードしたサンプルコードの endpoints/getting-started ディレクトリにある openapi.yaml ファイルの内容を置き換えます。

  1. テキスト エディタで openapi.yaml を開き、内容を次のように置き換えます。
    openapi: 3.0.4
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    servers:
      - url: "http://echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"
        x-google-endpoint: {}
    
    paths:
      /echo:
        post:
          description: "Echo back a given message."
          operationId: "echo"
          requestBody:
            description: "Message to echo"
            required: true
            content:
              "application/json":
                schema:
                  $ref: "#/components/schemas/echoMessage"
          responses:
            '200':
              description: "Echo"
              content:
                "application/json":
                  schema:
                    $ref: "#/components/schemas/echoMessage"
          security:
            - api_key: []
    
      /auth/info/googlejwt:
        get:
          description: "Returns the requests' authentication information."
          operationId: "auth_info_google_jwt"
          responses:
            '200':
              description: "Authentication info."
              content:
                "application/json":
                  schema:
                    $ref: "#/components/schemas/authInfoResponse"
          security:
            - api_key: []
              google_jwt: []
    
      /auth/info/googleidtoken:
        get:
          description: "Returns the requests' authentication information."
          operationId: "authInfoGoogleIdToken"
          responses:
            '200':
              description: "Authentication info."
              content:
                "application/json":
                  schema:
                    $ref: "#/components/schemas/authInfoResponse"
          security:
            - api_key: []
              google_id_token: []
    
    components:
      schemas:
        echoMessage:
          type: "object"
          properties:
            message:
              type: "string"
        authInfoResponse:
          properties:
            id:
              type: "string"
            email:
              type: "string"
    
      securitySchemes:
        api_key:
          type: "apiKey"
          name: "key"
          in: "query"
    
        google_jwt:
          type: "oauth2"
          flows:
            implicit:
              authorizationUrl: ""
              scopes: {}
          x-google-auth:
            issuer: "jwt-client.endpoints.sample.google.com"
            jwksUri: "https://www.googleapis.com/service_accounts/v1/jwk/YOUR_SERVICE_ACCOUNT_EMAIL"
            audiences:
            - "echo.endpoints.sample.google.com"
    
        google_id_token:
          type: "oauth2"
          flows:
            implicit:
              authorizationUrl: ""
              scopes: {}
          x-google-auth:
            issuer: "https://accounts.google.com"
            jwks_uri: "https://www.googleapis.com/oauth2/v3/certs"
            audiences:
              - "YOUR_CLIENT_ID"
  2. openapi.yaml の新しい内容を保存します。

このチュートリアルでは、サービス名を構成できる OpenAPI 仕様の Google 固有の拡張機能を使用します。サービス名を指定する方法は、使用している OpenAPI 仕様のバージョンによって異なります。

OpenAPI 2.0

host フィールドを使用して、サービス名を指定します。

host: echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog

Endpoints を構成するには:

  1. openapi.yaml ファイルを開きます。
  2. host フィールドで、YOUR_PROJECT_ID を Google Cloud プロジェクト ID に置き換えます。
  3. openapi.yaml ファイルを保存します。

OpenAPI 3.x

サービス名を指定するには、servers オブジェクトの url フィールドを使用します。

servers:
  - url: https://echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog
    x-google-endpoint: {}

Endpoints を構成するには:

  1. openapi.yaml ファイルを開きます。
  2. openapi.yaml ファイルに host フィールドがある場合は、削除します。
  3. 次に示すように、servers オブジェクトを追加します。
  4. url フィールドで、YOUR_PROJECT_ID を Google Cloud プロジェクト ID に置き換えます。
  5. openapi.yaml ファイルを保存します。

次の構成手順をすべて完了し、IP アドレスを使用してサンプル API にリクエストを正常に送信できるようになったら、Endpoints の DNS を構成するを参照して、echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog を完全修飾ドメイン名(FQDN)として構成する方法をご確認ください。

Endpoints 構成をデプロイする

Endpoints の構成をデプロイするには、gcloud endpoints services deploy コマンドを使用します。このコマンドを実行すると、Service Management を使用してマネージド サービスが作成されます。

Endpoints 構成をデプロイするには:

  1. openapi.yaml 構成ファイルがあるディレクトリにいることを確認します。
  2. 構成をアップロードしてマネージド サービスを作成します。
    gcloud endpoints services deploy openapi.yaml
    

gcloud コマンドが Service Management API を呼び出して、openapi.yaml ファイルの host フィールドまたは servers.url フィールドで指定した名前のマネージド サービスを作成します。Service Management は、openapi.yaml ファイル内の設定に従ってサービスを構成します。openapi.yaml に変更を加えるときは、このファイルを再デプロイして Endpoints サービスを更新する必要があります。

Service Management でサービスの作成と構成が行われるとき、情報がターミナルに出力されます。openapi.yaml ファイル内のパスが API キーを要求していないことを示す警告は無視して問題ありません。サービスの構成が完了すると、Service Management に、次のようなサービス構成 ID とサービス名を含むメッセージが表示されます。

Service Configuration [2017-02-13r0] uploaded for service [echo-api.endpoints.example-project-12345.cloud.goog]

上記の例では、2017-02-13r0 はサービス構成 ID、echo-api.endpoints.example-project-12345.cloud.goog は Endpoints サービスです。サービス構成 ID は、日付スタンプとそれに続くリビジョン番号で構成されます。同じ日に openapi.yaml ファイルを再度デプロイすると、サービス構成 ID のリビジョン番号が増分されます。Endpoints サービスの構成は、 Google Cloud コンソールの [エンドポイント] > [サービス] ページで確認できます。

エラー メッセージが表示された場合は、Endpoints 構成のデプロイのトラブルシューティングをご覧ください。

必要なサービスの確認

Endpoints と ESP を使用するには、少なくとも次の Google サービスの有効化が必要です。
名前 タイトル
servicemanagement.googleapis.com Service Management API
servicecontrol.googleapis.com Service Control API

ほとんどの場合、gcloud endpoints services deploy コマンドによってこれらの必須サービスが有効化されます。ただし、以下の状況では、gcloud コマンドは正常に完了しますが、必須サービスが有効になりません。

  • Terraform などのサードパーティのアプリケーションを使用していて、上記のサービスを含めていない場合。

  • 上記のサービスが明示的に無効にされている既存のGoogle Cloud プロジェクトに Endpoints 構成をデプロイした場合。

必要なサービスが有効になっていることを確認するには、次のコマンドを実行します。

gcloud services list

必要なサービスが表示されない場合は、次のコマンドを使用してサービスを有効にします。

gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com

Endpoints サービスも有効にします。

gcloud services enable ENDPOINTS_SERVICE_NAME

ENDPOINTS_SERVICE_NAME を確認するには、次のいずれかを行います。

  • Endpoints 構成をデプロイ後、Cloud コンソールの [Endpoints] ページに移動します。[サービス名] 列に、考えられる ENDPOINTS_SERVICE_NAME のリストが表示されます。

  • OpenAPI の場合、ENDPOINTS_SERVICE_NAME は OpenAPI 仕様の host フィールドで指定したものです。gRPC の場合、ENDPOINTS_SERVICE_NAME は gRPC Endpoints 構成の name フィールドで指定したものです。

gcloud コマンドの詳細については、gcloud サービスをご覧ください。

API バックエンドをデプロイする

ここまでの手順で OpenAPI ドキュメントを Service Management にデプロイしましたが、API バックエンドを処理するコードはまだデプロイしていません。このセクションでは、VM インスタンスで Docker を設定し、Docker コンテナで API バックエンド コードと ESPv2 を実行する方法について説明します。

必要な権限を確認する

  • Google Cloud コンソールで、Compute Engine インスタンス ページに移動します。

    [Compute Engine] ページに移動

  • インスタンスをリストから選択します。
  • 関連するサービス アカウントと与えられている権限を確認できます。
  • サービス アカウントに必要な権限を付与します。

    gcloud projects add-iam-policy-binding PROJECT_NAME \
      --member "serviceAccount:SERVICE_ACCOUNT" \
      --role roles/servicemanagement.serviceController
    

    詳細については、ロールと権限についてをご覧ください。

VM インスタンスに Docker をインストールする

Docker を VM インスタンスにインストールするには:

  1. 次のコマンドを実行して、プロジェクトのゾーンを設定します。
    gcloud config set compute/zone YOUR_INSTANCE_ZONE
    

    YOUR_INSTANCE_ZONE は、インスタンスが実行されているゾーンに置き換えます。

  2. 次のコマンドを使用して、インスタンスに接続します。
    gcloud compute ssh INSTANCE_NAME
    

    INSTANCE_NAME は、VM インスタンス名に置き換えます。

  3. Docker のドキュメントを参照して Docker リポジトリを設定します。VM インスタンスの該当するバージョンとアーキテクチャ用の手順に従ってください。
    • Jessie 以降
    • x86_64 / amd64

Docker コンテナで API と ESPv2 を実行する

ESPv2 は、ユーザーのバックエンド コードの前にある Envoy ベースのプロキシです。受信トラフィックを処理し、認証、API キー管理、ロギングなどの Endpoints の API 管理機能を提供します。 サンプル API と ESPv2 を Docker コンテナにインストールして実行するには:

  1. esp_net という独自のコンテナ ネットワークを作成します。
    sudo docker network create --driver bridge esp_net
    
  2. サンプル API を提供するサンプルの Echo サーバーを実行します。
    Java
    sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-java:1.0
    
    Python
    sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-python:1.0
    
    Go
    sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-go:1.0
    
    PHP
    sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-php:1.0
    
    Ruby
    sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-ruby:1.0
    
    NodeJS
    sudo docker run --detach --name=echo --net=esp_net gcr.io/google-samples/echo-node:1.0
    
  3. あらかじめパッケージ化されたパブリック ESPv2 Docker コンテナを実行します。ESPv2 スタートアップ オプションで、SERVICE_NAME を実際のサービスの名前に置き換えます。これは、OpenAPI ドキュメントでホスト名として構成した名前と同じです。

    sudo docker run \
        --detach \
        --name=esp \
        --publish=80:9000 \
        --net=esp_net \
        gcr.io/endpoints-release/endpoints-runtime:2 \
        --service=SERVICE_NAME \
        --rollout_strategy=managed \
        --listener_port=9000 \
        --backend=http://echo:8080
    

    --rollout_strategy=managed オプションを指定すると、デプロイ済みの最新のサービス構成を使用するように ESPv2 が構成されます。このオプションを指定すると、新しいサービス構成をデプロイしてから 1 分以内に ESPv2 が変更を検出し、自動的に使用します。ESPv2 が特定の構成 ID でなく、このオプションを使用するようにしてください。使用されている他の ESPv2 オプションについては、ESPv2 起動オプションをご覧ください。

エラー メッセージが表示された場合は、Compute Engine の Endpoints をトラブルシューティングするをご覧ください。 詳細については、API バックエンドをデプロイするご覧ください。

IP アドレスを使用してリクエストを送信する

サンプル API と ESPv2 が Compute Engine インスタンスで実行されたら、ローカルマシンから API にリクエストを送信できます。

API キーを作成し、環境変数を設定する

サンプルコードには API キーが必要です。リクエストを簡単にするために、API キーの環境変数を設定します。

  1. API に使用したのと同じ Google Cloud プロジェクトの API 認証情報ページで API キーを作成します。別の Google Cloud プロジェクトで API キーを作成する場合は、 Google Cloud プロジェクトで API を有効にするをご覧ください。

    [認証情報] ページに移動

  2. [認証情報を作成] をクリックして [API キー] を選択します。
  3. キーをクリップボードにコピーします。
  4. [閉じる] をクリックします。
  5. ローカルマシンで、API キーを貼り付けて環境変数に割り当てます。
    • Linux または Mac OS の場合: export ENDPOINTS_KEY=AIza...
    • Windows PowerShell の場合: $Env:ENDPOINTS_KEY="AIza..."

リクエストを送信する

Linux または Mac OS

前の手順で設定した ENDPOINTS_KEY 環境変数を使用して、curl を使用して HTTP リクエストを送信します。IP_ADDRESS をインスタンスの外部 IP アドレスに置き換えます。

curl --request POST \
   --header "content-type:application/json" \
   --data '{"message":"hello world"}' \
   "http://IP_ADDRESS:80/echo?key=${ENDPOINTS_KEY}"

上記の curl で:

  • --data オプションは、API に送信するデータを指定します。
  • --header オプションは、データが JSON 形式であることを指定します。

PowerShell

前の手順で設定した ENDPOINTS_KEY 環境変数を使用して、Invoke-WebRequest により HTTP リクエストを送信します。IP_ADDRESS をインスタンスの外部 IP アドレスに置き換えます。

(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' `
    -Headers @{"content-type"="application/json"} `
    -URI "http://IP_ADDRESS:80/echo?key=$Env:ENDPOINTS_KEY").Content

上記の例では、最初の 2 行はバッククォートで終わります。この例を PowerShell に貼り付けるとき、バッククォートの後にスペースがないことを確認してください。このリクエスト例で使用されているオプションについては、Microsoft のドキュメントの Invoke-WebRequest をご覧ください。

サードパーティ製アプリ

Chrome ブラウザの拡張機能である Postman などのサードパーティのアプリケーションを使用してリクエストを送信できます。

  • HTTP 動詞として POST を選択します。
  • ヘッダーで、キー content-type とその値 application/json を選択します。
  • 本文で、次のように入力します。
    {"message":"hello world"}
  • URL で、環境変数ではなく実際の API キーを使用します。 例:
    http://192.0.2.0:80/echo?key=AIza...

API によって送信メッセージがエコーバックされ、次のようなレスポンスが返されます。

{
  "message": "hello world"
}

正常なレスポンスが返されなかった場合は、レスポンス エラーのトラブルシューティングをご覧ください。

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

Endpoints の DNS を構成する

<< "endpoints/docs/_shared/_configuring-endpoints-dns.md" >>

FQDN を使用してリクエストを送信する

<< "endpoints/docs/_shared/_send-request-fqdn.md" >>

API の活動を追跡する

API の活動を追跡するには:

  1. [エンドポイント] > [サービス] ページで API のアクティビティ グラフを確認します。

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


    グラフにリクエストが反映されるまでに、しばらく時間がかかる場合があります。
  2. [ログ エクスプローラ] ページで、API のリクエストログを確認します。

    [ログ エクスプローラ] ページに移動

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

クリーンアップ

  1. API を削除します。
    gcloud endpoints services delete SERVICE_NAME

    SERVICE_NAME は、実際のサービス名に置き換えます。

  2. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  3. Select the checkbox for the instance that you want to delete.
  4. To delete the instance, click More actions, click Delete, and then follow the instructions.

次のステップ