API によるカスタム ドキュメントの同期

ポータルには、カスタム コンテンツを同期するための特殊な API があります。この API を呼び出すには、次の操作を行います。

  1. 少なくとも 1 回は、カスタム コンテンツを手動で同期します
  2. 適切な権限とキーを使用してサービス アカウントを作成します。
  3. HTTP リクエストによってコンテンツを同期します。

このドキュメントでは、サービス アカウントを作成する手順を説明し、Python またはコマンドラインからリクエストを行う例を示します。

承認済みサービス アカウントを作成する

API を使用してカスタム コンテンツを同期させるには、適切な権限と鍵を持つサービス アカウントが必要です。サービス アカウントを作成して適切な役割を付与し、必要な鍵ファイルを取得するには、次の手順に従います。

Console

  1. GCP Console で [サービス アカウント] ページを開きます。

    [サービス アカウント] ページに移動

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択し、[開く] をクリックします。

  4. add [サービス アカウントを作成] をクリックします。

  5. [サービス アカウント名] 項目に、サービス アカウントの表示名を入力します。

  6. [新しい秘密鍵の提供] チェックボックスを選択します。

  7. [キーのタイプ] で、デフォルトの [JSON] を使用します。

  8. [保存] をクリックします。

  9. ダイアログ ボックスに鍵の情報が表示されます。続行するには、ダイアログ ボックスを閉じます。

  10. GCP Console で、プロジェクトの [エンドポイント] > [サービス] ページに移動します。

    エンドポイント サービス

  11. カスタム コンテンツを同期させる必要がある API の名前をクリックし、そのアクセス権を変更します。

  12. [権限] サイドパネルが開いていない場合は、[+ 権限] をクリックします。

  13. 作成したサービス アカウントに API に対するアクセス権を付与するために、[メンバーを追加] 項目にそのサービス アカウントのメールアドレスを入力します。

  14. [役割を選択] プルダウン リストで [サービス管理] をクリックし、サービス アカウントの役割として [Service Config 編集者] を選択します。

これで、サービス アカウントを作成し、その秘密鍵を JSON ファイルにダウンロードして、サービス アカウントに適切な役割を割り当てました。

gcloud

  1. 次のコマンドを入力して、Google Cloud Platform(GCP)プロジェクトのプロジェクト ID を表示します。

    gcloud projects list
    
  2. 次のコマンドの [YOUR_PROJECT_ID] の部分を、API が含まれているプロジェクトに置き換え、デフォルトのプロジェクトに設定します。

    gcloud config set project [YOUR_PROJECT_ID]
    
  3. Cloud SDK(gcloud)に GCP のデータとサービスへのアクセスを許可します。

    gcloud auth login
    

    アカウントが複数ある場合は、API が含まれている GCP プロジェクトで使用されているアカウントを選択してください。gcloud auth list を実行すると、選択したアカウントがプロジェクトの有効なアカウントとして表示されます。

  4. サービス アカウントを作成するには、次のコマンドを実行します。[SERVICE_ACCOUNT_NAME][Service Account to Sync Custom Content] は、使用する名前、表示名でそれぞれ置き換えてください。

    gcloud iam service-accounts create [SERVICE_ACCOUNT_NAME] \
      --display-name "[Service Account to Sync Custom Content]"
    

    このコマンドは、サービス アカウントのメールアドレスを次の形式で割り当てます。

    [SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com
    

    このメールアドレスは、後で実行するコマンドで必要になります。

  5. サービス アカウントのキーファイルを作成します。[KEY_FILE] は、キーのファイル名で置き換えてください。

    gcloud iam service-accounts keys create ~/[KEY_FILE] \
      --iam-account [SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com
    
  6. カスタム コンテンツで使用する API へのアクセス権をサービス アカウントに付与するには、次のコマンドを実行します。このとき [YOUR_SERVICE_NAME] をカスタム コンテンツで使用する API の名前に置き換えます。

    gcloud endpoints services add-iam-policy-binding [SERVICE-NAME] \
          --member=serviceAccount:[SERVICE_ACCOUNT_NAME]@[YOUR_PROJECT_ID].iam.gserviceaccount.com \
          --role roles/servicemanagement.configEditor
    

カスタム コンテンツの同期リクエストを送信する

次の例は、カスタム コンテンツの同期をリクエストする方法を示しています。このリクエストは次のようになります。

 POST https://endpointsportal.[YOUR_PROJECT_ID].cloud.goog/api/v1/[YOUR_SERVICE_NAME]/custom-content/

[YOUR_PROJECT_ID][YOUR_SERVICE_NAME] は、適切な値で置き換えてください。リクエストが正常に完了すると、HTTP ステータス コードが 200 に設定されたレスポンスが返されます。

次の例で、Google の承認サーバーからアクセス トークンを取得し、そのトークンを使ってポータルのエンドポイントに対してリクエストを実行する方法を、Python とコマンドラインのそれぞれを使用した場合について説明します。

Python

  1. 必要な Python ライブラリをインストールします。
        pip install --upgrade google-auth
  2. サービス アカウントの認証情報とエンドポイントに必要なスコープから Credentials オブジェクトを作成し、コンテンツの同期リクエストを実行するには、次のスクリプトを使用します。[YOUR_PROJECT_ID]/path/to/service.json[YOUR_SERVICE_NAME] は、それぞれ適切な値で置き換えてください。
    from google.oauth2 import service_account
    from google.auth.transport.requests import AuthorizedSession
    
    SCOPES = ["https://www.googleapis.com/auth/service.management.readonly"]
    SERVICE_ACCOUNT_FILE = "/path/to/service.json"
    PROJECT_ID = "[YOUR_PROJECT_ID]"
    SERVICE_NAME = "[YOUR_SERVICE_NAME]"
    
    credentials = service_account.Credentials.from_service_account_file(
       SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    authed_session = AuthorizedSession(credentials)
    endpoint =
    "https://endpointsportal.%s.cloud.goog/api/v1/%s/custom-content" % (PROJECT_ID, SERVICE_NAME)
    result = authed_session.post(endpoint)
    print result

コマンドライン

  1. Cloud Shell を開きます。または、Linux パソコンに Cloud SDK がインストールされている場合はターミナル ウィンドウを開きます。
  2. サービス アカウントに対する認証を行うには、次のコマンドを実行します。[KEY_FILE] は、サービス アカウント キーファイルのパスで置き換えてください。
    gcloud auth activate-service-account --key-file [KEY_FILE]
  3. サービス アカウントを使用して承認トークンを取得します。
    ACCESS_TOKEN=$(gcloud auth print-access-token)
  4. API を呼び出す際は、このトークンの値を Authorization ヘッダーで署名なしトークンとして渡します。[YOUR_PROJECT_ID][YOUR_SERVICE_NAME] は、適切な値で置き換えてください。
    curl -X POST -H "Authorization: Bearer ${ACCESS_TOKEN}" \
    https://endpointsportal.[YOUR_PROJECT_ID].cloud.goog/api/v1/[YOUR_SERVICE_NAME]/custom-content
このページは役立ちましたか?評価をお願いいたします。

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

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