arrow_back

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

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

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

Lab 1時間 30分 universal_currency_alt クレジット: 5 show_chart 中級
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

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 コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

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

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

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

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

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

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

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

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

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

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

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

  2. 出力は次のようになります。

出力:

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

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

Apigee UI を開く

Apigee UI には、Google Cloud コンソールとは別のページからアクセスします。このラボでは、Google Cloud プロジェクトと同じ名前の Apigee 組織が自動的に作成されています。

  • クリックして、Apigee UI を開きます。

    Google Cloud コンソールから Apigee UI を開くこともできます。開くには、ナビゲーション メニューナビゲーション メニュー)を開き、[Apigee API Management] > [Apigee] を選択します。

プロジェクトに組織がプロビジョニングされていないことを示すエラーが表示される場合は、過去のラボの組織をタブが読み込もうとしている可能性があります。

このエラーが表示される場合:

  • 組織プルダウンをクリックします。

    「プロビジョニングされていません」エラー メッセージ

    組織プルダウンには、Google Cloud プロジェクトと同じ名前の組織が表示されているはずです。

    Apigee UI 組織プルダウン

    リストアップされている組織は、ログイン ユーザーがアクセスできる組織です。このラボでは、ラボの開始時に [ラボの詳細] パネルで指定されたラボ認証情報を使用してログインする必要があります。

    Apigee UI を操作するには、左側のナビゲーション メニューを使用します。ランディング ページには、よく使用される場所に移動できるクイックリンクも表示されます。

タスク 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. Cloud コンソールタブのナビゲーション メニューナビゲーション メニュー アイコン)で、[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 API プロキシを作成する

  1. ブラウザ ウィンドウで Apigee UI タブを選択します。

  2. 左側のナビゲーション メニューで、[Develop] > [API Proxies] の順に選択します。

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

  4. [No target] ボックスをクリックします。

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

注: [No target] ボックス内の [Use OpenAPI Spec] リンクをクリックしないでください。
  1. [Proxy details] で次のように指定します。

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

  3. [Common Policies] の設定はデフォルトのままにして、[Next] をクリックします。

  4. [Summary] ページで、設定をデフォルトのままにして [Create] をクリックします。

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

  6. 右上隅に [Switch to Classic] リンクがある場合は、そのリンクをクリックします。

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

  1. [Develop] タブをクリックします。

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

  3. [New Conditional Flow] ダイアログで次の値を指定します。

    プロパティ
    Flow Name postComment
    Description 特定のカテゴリのコメントを POST する
    Condition Type [Path and Verb] を選択
    Path /comments
    Verb [POST] を選択

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

  4. [Add] をクリックしてから、[Save] をクリックします。

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

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

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

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

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

  1. ハイライト表示されていない場合は [postComment] フローをクリックし、次に Request フローの上の 右側にある [+ Step] ボタンをクリックします。

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

  3. 以下を指定します。

    プロパティ
    Display Name EV-ExtractRequest
    Name EV-ExtractRequest
  4. [Add] をクリックします。

  5. 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 フローの下の左側にある [+ Step] ボタンをクリックします。

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

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

  3. 以下を指定します。

    プロパティ
    Display Name SC-NaturalLanguage
    Name SC-NaturalLanguage
  4. [Add] をクリックします。

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

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

  5. [SC-NaturalLanguage] ポリシーをクリックします。

  6. 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 へのアクセス権の提供に使用されるアクセス トークンを指定します。

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

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

  • 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 to eval] をクリックします。

    デプロイの確認を求めるダイアログが表示されます。

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

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  4. [Deploy] をクリックします。

  5. [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

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

  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. Cloud コンソールタブのナビゲーション メニューナビゲーション メニュー アイコン)で、[Pub/Sub] > [トピック] に移動します。

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

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

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

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

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

  2. [postComment] フローをクリックしてから、Response フローの下の左側にある [+ Step] ボタンをクリックします。

  3. [Mediation] セクションで、[Extract Variables] ポリシータイプを選択します。

  4. 以下を指定します。

    プロパティ
    Display Name EV-ExtractSentiment
    Name EV-ExtractSentiment
  5. [Add] をクリックしてから、[EV-ExtractSentiment] ポリシーをクリックします。

  6. 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 フローの下の左側にある [+ Step] ボタンをクリックします。

  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>

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

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

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

条件を使用して、フロー内のポリシーを必要に応じてスキップできます。

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

    ProxyEndpoint 構成が表示されます。

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

PM-PublishScore 次の内容に置き換えます。 ```text <Step> <Name>PM-PublishScore</Name> <Condition>sentimentScore LesserThan 0.0</Condition> </Step> ```

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

API をデプロイする

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

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

    デプロイの確認を求めるダイアログが表示されます。

  3. [Deploy] をクリックし、デプロイが完了するまで待ちます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 否定的コメントを通知するメッセージを 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. Cloud コンソールタブのナビゲーション メニューナビゲーション メニュー アイコン)で、[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 UI タブに戻り、必要に応じて 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 フローの下の左側にある [+ Step] ボタンをクリックします。

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

  3. 以下を指定します。

    プロパティ
    Display Name ML-LogToCloudLogging
    Name ML-LogToCloudLogging
  4. [Add] をクリックしてから、[ML-LogToCloudLogging] ポリシーをクリックします。

  5. 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] をクリックします。プロキシが新しいリビジョンとして保存されたことを知らせるメッセージが表示された場合は、[OK] をクリックします。

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

    デプロイの確認を求めるダイアログが表示されます。

  3. [Deploy] をクリックし、デプロイが完了するまで待ちます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 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. Cloud コンソールタブのナビゲーション メニューナビゲーション メニュー アイコン)で、[ロギング] > [ログ エクスプローラ] に移動します。

  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 に記録しました。

クエストを完了する

このセルフペース ラボは、Qwiklabs の「Develop and Secure APIs with Apigee X」クエストの一部です。クエストとは学習パスを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、こちらのクエストまたはこのラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。

次のラボを受講する

シリーズの次のラボ「Develop and Secure APIs with Apigee X: チャレンジラボ」に進んでクエストを続けてください。

次のステップと詳細情報

マニュアルの最終更新日: 2023 年 2 月 4 日
マニュアルの最終テスト日: 2023 年 1 月 16 日

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