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 の開発と管理を行うためのプラットフォームです。Apigee から、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] で次のように指定します。

    プロパティ
    Proxy name services-v1
    Base path /services/v1
    注: Base path は /services/v1 です。/services-v1 ではないので注意してください。
  2. [次へ] をクリックします。

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

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

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

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

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

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

    プロパティ
    Flow Name postComment
    Description 特定のカテゴリのコメントを POST する
    Condition Type [Path and Verb] を選択
    Path /comments
    Verb [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. 以下を指定します。

    プロパティ
    Display Name EV-ExtractRequest
    Name 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. 以下を指定します。

    プロパティ
    Display Name SC-NaturalLanguage
    Name 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 というホスト名を使用して呼び出すことができます。このホスト名を Apigee ランタイム インスタンスの IP アドレスに解決する DNS エントリは、すでにプロジェクト内に作成されています。この 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 キーまたは Return キーを押して、デフォルトの入力を指定します。

    プロジェクトのオーナーとしてログインしているため、このマシンへの 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. 以下を指定します。

    プロパティ
    Display Name EV-ExtractSentiment
    Name 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. 以下を指定します。

    プロパティ
    Display Name PM-PublishScore
    Name 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>

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

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. 以下を指定します。

    プロパティ
    Display Name ML-LogToCloudLogging
    Name 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"}'

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

  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 つのラボ

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

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

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