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

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

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

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

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

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

コンソール

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

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

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

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

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

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

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

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

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

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

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

    エンドポイント サービス

  11. カスタム コンテンツを同期させるために使用する API の名前をクリックし、そのアクセス権を変更します。

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

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

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

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

gcloud

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

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

    gcloud config set project [YOUR_PROJECT_ID]
        
  3. Cloud SDK(gcloud)が Google Cloud 上のデータとサービスにアクセスする権限があることを確認します。

    gcloud auth login
        

    アカウントが複数ある場合は、API がある Google Cloud プロジェクトのアカウントを選択してください。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] は、適切な値で置き換えてください。リクエストが正常に完了すると、200 の HTTP ステータス コードが返されます。

次の例で、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