arrow_back

Apigee X での Google Cloud サービスの使用

ログイン 参加
700 以上のラボとコースにアクセス

Apigee X での Google Cloud サービスの使用

ラボ 1時間 30分 universal_currency_alt クレジット: 5 show_chart 中級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

GSP845

Google Cloud セルフペース ラボのロゴ

概要

Apigee は API の開発と管理を行うためのプラットフォームです。Pub/SubCloud Logging などの Google Cloud サービスのほか、REST API を提供する他のクラウド サービスを活用するのに役立ちます。このラボでは、Apigee API プロキシでいくつかの Google Cloud サービスを使用します。

このラボでは、Apigee API プロキシから複数の Google Cloud サービスを使用して、ユーザーのコメントを処理します。

目標

このラボでは、次のタスクの実行方法について学びます。

  • 必要な Google Cloud API を有効にする
  • サービス アカウントを作成して、適切なロールを適用する
  • Google Cloud REST API を使用して Google Cloud サービスを呼び出す
  • Cloud Natural Language API を呼び出して感情分析を行う
  • PublishMessage ポリシーを使用して Pub/Sub メッセージをパブリッシュする
  • エラー メッセージを Cloud Logging に記録する

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] ペインでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] ペインでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニュー アイコンと検索フィールド

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. Google Cloud API を有効にする

このタスクでは、Apigee API プロキシで使用する API を有効にします。

  1. Cloud コンソールナビゲーション メニューナビゲーション メニュー アイコン)で、[API とサービス] > [ライブラリ] に移動します。

    このページで、Apigee API プロキシで使用する API を有効にすることができます。

  2. [API とサービスを検索] に「Cloud Natural Language」と入力し、Enter キーを押します。

    Cloud Natural Language API は、感情分析やエンティティ認識などの自然言語の分析情報を提供します。この API を使用して、ユーザーからのコメントが不満を表しているかどうかを判断します。

  3. [Cloud Natural Language API] をクリックします。

    これで API が有効になります。

    gcloud コマンドを使用して API を有効にすることもできます。

  4. Cloud Shell で次のコマンドを使用して、必要な API を有効にします。

    gcloud services enable language.googleapis.com pubsub.googleapis.com logging.googleapis.com

    Cloud Natural Language API に加えて、Pub/Sub API と Cloud Logging API も有効にします。

    Pub/Sub は、ユーザーが不満を持っていることが Natural Language API で示された場合に、メッセージをトピックにパブリッシュするために使用します。問題を解決して顧客満足度を向上させるために、メッセージごとに実行する Cloud Functions の関数を作成し、ユーザーに連絡することもできます。

    Cloud Logging は、受け取った各コメントのログエントリを収集するために使用します。これらのログには内部 API の詳細を含めることができるため、サービスやアプリケーションに関する問題の検出に役立ちます。

タスク 2. サービス アカウントを作成する

このタスクでは、Apigee プロキシで使用するサービス アカウントを作成します。

IAM サービス アカウントを作成する

  1. ナビゲーション メニューナビゲーション メニュー アイコン)で、[IAM と管理] > [サービス アカウント] に移動します。

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

  3. [サービス アカウント名] に次のように入力します。

    apigee-gc-service-access

    このサービス アカウントを使用することで、Apigee API プロキシは指定の Google Cloud サービスにアクセスできるようになります。

  4. [作成して続行] をクリックします。

  5. [ロールを選択] で、[Pub/Sub] > [Pub/Sub パブリッシャー] を選択します。

    Apigee API プロキシは、Pub/Sub トピックにメッセージをパブリッシュします。

  6. [+ 別のロールを追加] をクリックします。

  7. [ロールを選択] で、[Logging] > [ログ書き込み] を選択します。

    Apigee API プロキシは、Cloud Logging にログメッセージを書き込みます。

注: Natural Language API を呼び出すためにロールを指定する必要はありません。
  1. [完了] をクリックします。

    これでサービス アカウントが作成されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 サービス アカウントを作成し、ロールを割り当てる

タスク 3. API プロキシを作成する

このタスクでは、Apigee API プロキシを作成します。この API プロキシはポリシーを使用してサービスを呼び出すため、ターゲットは必要ありません。

Apigee コンソールを開く

Apigee コンソールを開くには、次の手順に沿って操作します。

  • Google Cloud コンソールの [検索] フィールドに「Apigee」と入力し、検索結果で [Apigee API Management] をクリックします。

Apigee コンソールが開き、よく使用される場所へのクイックリンクがランディング ページに表示されます。

  • ナビゲーション メニューナビゲーション メニュー)で、[Apigee] の横にある [固定](固定アイコン)をクリックします。

Apigee がナビゲーション メニューに固定されます。

Apigee API プロキシを作成する

  1. ナビゲーション メニューで、[プロキシ開発] > [API プロキシ] を選択します。

  2. [作成] をクリックし、プロキシ ウィザードを使用して新しいプロキシを作成します。

  3. [Proxy template] で、[General template] > [No target] を選択します。

    今回作成するプロキシはバックエンド サービスを使用しません。外部サービスとの通信はすべてポリシーを使用して行います。

注: [OpenAPI spec template] セクション内の [No target] は選択しないでください。
  1. [Proxy details] で次のように指定します。

    プロパティ
    プロキシの名前 services-v1
    ベースパス /services/v1
    注: ベースパスには /services-v1 ではなく /services/v1 を使用してください。
  2. [次へ] をクリックします。

  3. [Deploy (optional)] の設定はデフォルトのままにして、[Create] をクリックします。

新しい条件付きフローを作成する

  1. プロキシ エディタの [Develop] タブをクリックします。

  2. 左側のペインで、[Proxy endpoints > default] を選択します。

  3. [Response] ペインの上にある [+] ボタンをクリックします。

  4. [Add conditional flow] ダイアログで次の値を指定します。

    プロパティ
    フローの名前 postComment
    説明 特定のカテゴリのコメントを POST する
    条件タイプ [Path and Verb] を選択
    パス /comments
    動詞 [POST] を選択

    [Target URL] は空白のままにします。

  5. [Add] をクリックします。

API をデプロイする

  1. [Save] をクリックします。プロキシが新しいリビジョンとして保存されたことを知らせるメッセージが表示された場合は、[Save as new revision] をクリックします。

  2. [Deploy] をクリックします。

  3. [Environment] で [eval] を選択します。

  4. [Service Account] にサービス アカウントのメールアドレスを指定します。

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. [Deploy]、[Confirm] の順にクリックします。

    デプロイが完了するまで待ちます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 API プロキシを作成する

タスク 4. Natural Language API を呼び出す

このタスクでは、Natural Language API を呼び出して新着コメントの感情を判定するために、ServiceCallout ポリシーを追加します。

入力パラメータを抽出する

POST /comments リソースは、次の 2 つのパラメータを含む JSON ペイロードを使用します。1 つはユーザーが入力したフリーテキストの comment で、もう 1 つはコメントのタイプを示す category です。ExtractVariables ポリシーを使用してこれらの入力を抽出します。

  1. [Flow] ペインで、[Request] ペインの postComment フローの横にある [+] をクリックします。

  2. [Add policy step] ダイアログで、[Create new policy] をクリックします。

  3. [Select Policy] プルダウンで、[Mediation] セクションから [Extract Variables] ポリシータイプを選択します。

  4. 以下を指定します。

    プロパティ
    表示名 EV-ExtractRequest
    名前 EV-ExtractRequest
  5. [Add] をクリックします。

  6. EV-ExtractRequest ポリシーをクリックし、ExtractVariables XML 構成を次の内容に置き換えます。

<ExtractVariables name="EV-ExtractRequest"> <Source>request</Source> <JSONPayload> <Variable name="comment"> <JSONPath>$.comment</JSONPath> </Variable> <Variable name="category"> <JSONPath>$.category</JSONPath> </Variable> </JSONPayload> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </ExtractVariables>

これにより、POST /comments の JSON リクエストから commentcategory が抽出されます。IgnoreUnresolvedVariables 要素が false に設定されているため、これら 2 つの入力が指定されていない場合はエラーが発生します。

注: 本番環境 API では、エラー処理を追加してポリシーに由来する大部分のエラーを書き換えてください。このラボでは、エラー処理は追加しません。

Natural Language API を呼び出す

ServiceCallout ポリシーを使用して、コメントの感情を返すために Natural Language API を呼び出します。

  1. ハイライト表示されていない場合は postComment フローをクリックしてから、[Response] ペインで postComment フローの横にある [+] をクリックします。

    Natural Language API 呼び出しからのレスポンスが呼び出し元に返されます。

  2. [Add policy step] ダイアログで、[Create new policy] をクリックします。

  3. [Select Policy] プルダウンで、[Extension] セクションから [Service Callout] ポリシータイプを選択します。

  4. 以下を指定します。

    プロパティ
    表示名 SC-NaturalLanguage
    名前 SC-NaturalLanguage
  5. [Add] をクリックします。

    フローは次のようになります。

    Request タイルと Response タイルを含む postComment フロー。

  6. SC-NaturalLanguage ポリシーをクリックします。

  7. ServiceCallout XML 構成を次の内容に置き換えます。

    <ServiceCallout name="SC-NaturalLanguage"> <Request clearPayload="true"> <Set> <Verb>POST</Verb> <Payload contentType="application/json">{ "document": { "content": "{comment}", "type": "PLAIN_TEXT" } } </Payload> </Set> </Request> <Response>response</Response> <HTTPTargetConnection> <Properties/> <URL>https://language.googleapis.com/v1/documents:analyzeSentiment</URL> <Authentication> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-language</Scope> </Scopes> </GoogleAccessToken> </Authentication> </HTTPTargetConnection> </ServiceCallout>

    ServiceCallout ポリシーの Request セクションでは、サービスに POST されるリクエストを指定します。このペイロードの形式は Natural Language API に固有のものです。

    Response 要素は、Natural Language API レスポンスが response メッセージに格納されることを示します。

    HTTPTargetConnection セクションでは、呼び出されるサービス URL を指定します。この URL およびリクエストとレスポンスの形式は、Natural Language API のリファレンスに記載されています。

    Authentication セクションでは、Google Cloud API の認証を指定します。Google OAuth アクセス トークンは、コールアウト リクエストに自動的に追加されます。Scope では、Natural Language API へのアクセス権の提供に使用されるアクセス トークンを指定します。

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

ランタイム インスタンスが使用できることを確認する

  • Cloud Shell で、次のコマンドセットを貼り付けて実行します。

    export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\") | .environment" --join-output); [[ "${ATTACHMENT_DONE}" != "${ENV_NAME}" ]] || break; echo -n "."; sleep 5; done; echo "***ORG IS READY TO USE***";

    この一連のコマンドでは Apigee API を使用して、Apigee ランタイム インスタンスが作成されて eval 環境がアタッチされていることを確認します。

インスタンスが準備できるまで待ちます。

***ORG IS READY TO USE*** というテキストが表示されたら、インスタンスの準備は完了です。ラボを開始する前に、すでに Apigee 組織が作成されていることがあります。その場合はインスタンスが作成されるまで待つ必要はありません。

組織の準備ができるまで待つ場合は、その間に Google Cloud で提供されている AI のプロダクトとサービスをご覧ください。

API をデプロイする

  1. services-v1 API プロキシに戻り、[Develop] タブをクリックします。

  2. [Deploy] をクリックします。

  3. [Environment] で [eval] を選択します。

  4. [Service Account] にサービス アカウントのメールアドレスを指定します。

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. [Deploy]、[Confirm] の順にクリックします。

  6. [Overview] タブをクリックして、プロキシがデプロイされたことが eval のデプロイ ステータスに示されるまで待ちます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Natural Language API を呼び出す

API をテストする

Apigee 組織の eval 環境は、eval.example.com というホスト名を使用して呼び出すことができます。このホスト名の DNS エントリはすでにプロジェクト内に作成されており、Apigee ランタイム インスタンスの IP アドレスに解決します。この DNS エントリは限定公開ゾーンに作成されているため、内部ネットワークのみに表示されます。

Cloud Shell は内部ネットワークに存在しないため、Cloud Shell のコマンドではこの DNS エントリを解決できません。プロジェクト内の仮想マシン(VM)は、限定公開ゾーンの DNS にアクセスできます。apigeex-test-vm という名前の仮想マシンが自動的に作成されており、このマシンを使用して API プロキシを呼び出すことができます。

  1. Cloud Shell で、テスト VM への SSH 接続を開きます。

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite

    [Do you want to continue (Y/n)] というメッセージが表示されたら、「Y」と入力します。

  2. Cloud Shell で確認されるすべての項目について、Enter キー(リターンキー)を押してデフォルトの入力を指定します。

    プロジェクトのオーナーとしてログインしているため、このマシンへの SSH 接続が許可されます。

    これで、Cloud Shell セッションが VM 内で実行されます。

  3. eval 環境にデプロイした services-v1 API プロキシを呼び出します。

    curl -i -k -X POST -H "Content-Type: application/json" 'https://eval.example.com/services/v1/comments' -d '{"comment":"Jane was nice enough to return to her car to get me extra hot sauce. Thanks Jane!", "category":"delivery-reviews"}'

    Natural Language API から次のようなレスポンスが返されます。

{ "documentSentiment": { "magnitude": 1.8, "score": 0.9 }, "language": "en", "sentences": [ { "documentSentiment": { "magnitude": 1.8, "score": 0.9 }, "language": "en", "sentences": [ { "text": { "content": "Jane was nice enough to return to her car to get me extra hot sauce.", "beginOffset": -1 }, "sentiment": { "magnitude": 0.9, "score": 0.9 } }, { "text": { "content": "Thanks Jane!", "beginOffset": -1 }, "sentiment": { "magnitude": 0.9, "score": 0.9 } } ] } ] }

documentSentiment スコアの範囲は 1~-1 で、1 が最も肯定的、-1 が最も否定的であることを示します。この例では、感情は非常に肯定的です。

  1. もう一度 API プロキシを呼び出します。

    curl -i -k -X POST -H "Content-Type: application/json" 'https://eval.example.com/services/v1/comments' -d '{"comment":"The driver never arrived with my dinner. :(", "category":"delivery-reviews"}'

    このコメントの感情はかなり否定的です。

  2. コマンド exit を入力して SSH セッションを終了し、Cloud Shell に戻ります。

タスク 5. 否定的なコメントのメッセージを Pub/Sub にパブリッシュする

このタスクでは、否定的なコメントを受け取ったときに Pub/Sub トピックに Pub/Sub メッセージをパブリッシュするために PublishMessage ポリシーを追加します。トピックのサブスクライバーは、コメント投稿者の問題の解決を図るワークフローを実行できます。

配達レビューの Pub/Sub トピックを作成する

各カテゴリに対応する Pub/Sub トピックを作成します。メッセージをトピックにパブリッシュするには、事前にトピックを作成しておく必要があります。

  1. ナビゲーション メニューナビゲーション メニュー アイコン)で、[Pub/Sub] > [トピック] に移動します。

  2. [+ トピックを作成] をクリックします。

  3. トピック ID として「apigee-services-v1-delivery-reviews」と入力し、[作成] をクリックします。

    新しいトピックとサブスクリプションが作成されます。

Natural Language API レスポンスからスコアを抽出する

  1. Cloud コンソールの Apigee に戻ります。

  2. 左側のナビゲーション メニューで、[プロキシ開発] > [API プロキシ] を選択し、[services-v1] をクリックします。

  3. [Develop] タブを開きます。postComment フローをクリックします。

  4. [Flow] ペインで、[Response] ペインの postComment フローの横にある [+] をクリックします。

  5. [Add policy step] ダイアログで、[Create new policy] をクリックします。

  6. [Select Policy] プルダウンで、[Mediation] セクションから [Extract Variables] ポリシータイプを選択します。

  7. 以下を指定します。

    プロパティ
    表示名 EV-ExtractSentiment
    名前 EV-ExtractSentiment
  8. [Add] をクリックしてから、EV-ExtractSentiment ポリシーをクリックします。

  9. ExtractVariables XML 構成を次の内容に置き換えます。

    <ExtractVariables name="EV-ExtractSentiment"> <Source>response</Source> <JSONPayload> <Variable name="sentimentScore"> <JSONPath>$.documentSentiment.score</JSONPath> </Variable> </JSONPayload> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>

PublishMessage ポリシーを追加する

  1. postComment フローをクリックしてから、Response フローの下の [+] ボタンをクリックします。

  2. [Extension] セクションで、[Publish Message] ポリシータイプを選択します。

  3. 以下を指定します。

    プロパティ
    表示名 PM-PublishScore
    名前 PM-PublishScore
  4. [Add] をクリックしてから、PM-PublishScore ポリシーをクリックします。

  5. PublishMessage XML 構成を次の内容に置き換えます。

    <PublishMessage continueOnError="true" name="PM-PublishScore"> <Source>{response.content}</Source> <CloudPubSub> <Topic>projects/{organization.name}/topics/apigee-services-v1-{category}</Topic> </CloudPubSub> </PublishMessage>
  6. [Save] をクリックします。プロキシが新しいリビジョンとして保存されたことを知らせるメッセージが表示された場合は、[Save as new revision] をクリックします。

    response.content は Natural Language API から返されたペイロードであり、これが Pub/Sub メッセージになります。リクエストに含まれる category を使用して Pub/Sub トピック名が作成されます。

    誤ったカテゴリがあると、存在しないトピック名になります。本番環境 API では、Pub/Sub メッセージをパブリッシュする前に、指定されたカテゴリを検証してください。この例では、ポリシーで continueOnError が true に設定されているため、トピックが存在しなくてもエラーは発生しません。

PublishMessage ポリシー用の条件チェックを追加する

条件を使用すると、フロー内のポリシーをスキップすることができます。

  1. プロキシのナビゲーション メニューで、[Proxy Endpoints] の [default] をクリックします。

    ProxyEndpoint 構成が表示されます。

  2. PM-PublishScore ステップに条件を追加するには、以下の部分を

<Step> <Name>PM-PublishScore</Name> </Step>

次のように変更します。

<Step> <Name>PM-PublishScore</Name> <Condition>sentimentScore LesserThan 0.0</Condition> </Step>

これにより、感情スコアが 0 未満の場合にのみ PublishMessage ポリシーが実行されます。

API をデプロイする

  1. [Save] をクリックします。プロキシが新しいリビジョンとして保存されたことを知らせるメッセージが表示された場合は、[Save as new revision] をクリックします。

  2. [Deploy] をクリックします。

  3. [Environment] で [eval] を選択します。

  4. [Service Account] にサービス アカウントのメールアドレスを指定します。

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. [Deploy]、[Confirm] の順にクリックします。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 否定的なコメントのメッセージを Pub/Sub にパブリッシュする

API をテストする

  1. Cloud Shell で、テスト VM への SSH 接続を開きます。

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite

    承認するよう求められた場合は、[Authorize] をクリックします。

  2. eval 環境にデプロイした services-v1 API プロキシを呼び出します。

    curl -i -k -X POST -H "Content-Type: application/json" 'https://eval.example.com/services/v1/comments' -d '{"comment":"The driver never arrived with my dinner. :(", "category":"delivery-reviews"}'
  3. ナビゲーション メニューナビゲーション メニュー アイコン)から [Pub/Sub] > [トピック] に移動します。

  4. apigee-services-v1-delivery-reviews トピックをクリックします。

  5. 一番下までスクロールし、apigee-services-v1-delivery-reviews-sub サブスクリプションをクリックします。

  6. [メッセージ] タブをクリックし、[pull] をクリックします。

  7. メッセージで、[行の内容をすべて表示する] プルダウン ボタンをクリックします。

    否定的な感情を表すコメントについて送信された JSON ペイロードが表示されます。

タスク 6. MessageLogging ポリシーを追加する

このタスクでは、メッセージを Cloud Logging に記録するために MessageLogging ポリシーを追加します。

PostClientFlow を作成する

ProxyEndpoint には、PostClientFlow というオプションのフローがあります。このフローにアタッチされているポリシーは、レスポンスが呼び出し元に返された後に実行されます。ロギング処理によってリクエストのレイテンシが増加することがないため、ここはメッセージのロギングを行うのに最適な場所です。

  1. [Apigee] タブに戻り、必要に応じて services-v1 の [Develop] ページに戻ります。

  2. プロキシのナビゲーション メニューで、[Proxy Endpoints] の [default] をクリックします。

    ProxyEndpoint 構成が表示されます。

  3. HTTPProxyConnection セクションのすぐ上に、次の行を追加します。

    <PostClientFlow/>

    この行を追加した後、ProxyEndpoint コードの最後は次のようになります。

<PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <PostClientFlow/> <HTTPProxyConnection> <BasePath>/services/v1</BasePath> </HTTPProxyConnection> <RouteRule name="noroute"/> </ProxyEndpoint>

これにより、空の PostClientFlow が ProxyEndpoint に追加されます。

MessageLogging ポリシーを追加する

  1. プロキシのナビゲーション メニューで [Proxy Endpoints] > [PostClientFlow] に移動し、Response フローの下の [+] ボタンをクリックします。

  2. [Add policy step] ダイアログで、[Create new policy] をクリックします。

  3. [Select Policy] プルダウンで、[Extension] セクションから [Message Logging] ポリシータイプを選択します。

  4. 以下を指定します。

    プロパティ
    表示名 ML-LogToCloudLogging
    名前 ML-LogToCloudLogging
  5. [Add] をクリックしてから、ML-LogToCloudLogging ポリシーをクリックします。

  6. PublishMessage XML 構成を次の内容に置き換えます。

    <MessageLogging name="ML-LogToCloudLogging"> <CloudLogging> <LogName>projects/{organization.name}/logs/apiproxy-{apiproxy.name}</LogName> <Message contentType="application/json">{ "messageid": "{messageid}", "environment": "{environment.name}", "apiProxy": "{apiproxy.name}", "proxyRevision": "{apiproxy.revision}", "uri": "{request.uri}", "statusCode": "{response.status.code}", "category": "{category}", "score": "{sentimentScore}", "publishFailed": "{publishmessage.failed}" }</Message> <Labels> <Label> <Key>proxyName</Key> <Value>services-v1</Value> </Label> </Labels> </CloudLogging> </MessageLogging>

    CloudLogging セクションでは、Cloud Logging に記録する情報を指定します。プロキシの名前が LogName の一部として使用されるため、Cloud Logging で簡単に見つかります。

    このポリシーに含まれるのは JSON メッセージですが、ログではどのような種類のテキスト メッセージも使用できます。通常、ログの内容には問題のデバッグに役立つプロキシフロー変数を含めます。たとえば、変数 publishmessage.failed は、Pub/Sub メッセージが送信されなかった場合に true になります。

    ログメッセージに Labels を追加して、メッセージの内容を分類することもできます。

API をデプロイする

  1. [Save] をクリックします。プロキシが新しいリビジョンとして保存されたことを知らせるメッセージが表示された場合は、[Save as new revision] をクリックします。

  2. [Deploy] をクリックします。

  3. [Environment] で [eval] を選択します。

  4. [Service Account] にサービス アカウントのメールアドレスを指定します。

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. [Deploy]、[Confirm] の順にクリックします。

    デプロイが完了するまで待ちます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 MessageLogging ポリシーを追加する

API をテストする

  1. SSH 接続が閉じている場合は、Cloud Shell でテスト VM への SSH 接続を開きます。

    TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)") gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite

    承認するよう求められた場合は、[Authorize] をクリックします。

  2. eval 環境にデプロイした services-v1 API プロキシを呼び出します。

    curl -i -k -X POST -H "Content-Type: application/json" 'https://eval.example.com/services/v1/comments' -d '{"comment":"The driver never arrived with my dinner. :(", "category":"invalid-category"}'

    対応する Pub/Sub トピックは、指定したカテゴリ(invalid-category)に存在しません。

  3. ナビゲーション メニューナビゲーション メニュー アイコン)で、[ロギング] > [ログ エクスプローラ] に移動します。

  4. [クエリ] ボックスで次のクエリを入力します。

    "invalid-category"
  5. [クエリを実行] をクリックします。

  6. [クエリ結果] ペインのログエントリ、[jsonPayload] の順に開きます。

ログエントリを開くと、ログに記録された JSON メッセージとその他のメタデータが表示されます。jsonPayload は次のようになります。

{ "apiProxy": "services-v1", "category": "invalid-category", "environment": "eval", "messageid": "32c1eda7-f661-98f4-8d66-3c1c158dc620", "proxyRevision": "4", "publishFailed": "true", "score": "-0.8", "statusCode": "200", "uri": "/services/v1/comments" }

このカテゴリのために作成されたトピックが存在しないため、publishFailed が true になっています。適切に設計されたログは、API プロキシやバックエンド サービスの問題を検出するのに役立ちます。

お疲れさまでした

このラボでは、Google Cloud API を有効にしてサービス アカウントを作成しました。また、ServiceCallout ポリシーを使用して Cloud Natural Language API を呼び出し、Apigee によって提供されるサービス アカウント認証を利用しました。次に、PublishMessage ポリシーを使用して、メッセージを Pub/Sub トピックにパブリッシュしました。最後に、MessageLogging ポリシーを使用して、ログメッセージを Cloud Logging に記録しました。

次のステップと詳細情報

マニュアルの最終更新日: 2025 年 8 月 8 日

マニュアルの最終テスト日: 2025 年 8 月 8 日

Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。