访问 700 多个实验和课程

将 Google Cloud 服务与 Apigee X 搭配使用

实验 1 小时 30 分钟 universal_currency_alt 5 个点数 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP845

Google Cloud 自学实验的徽标

概览

Apigee 是一个用于开发和管理 API 的平台。Apigee 可帮助您利用 Google Cloud 服务,例如 Pub/SubCloud Logging 或提供 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 | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 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 上,且支持 Tab 自动补全功能。

  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。

    当 Natural Language API 指示用户不满意时,系统会使用 Pub/Sub 向主题发布消息。您可以选择创建一个 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 Publisher

    Apigee API 代理将向 Pub/Sub 主题发布消息。

  6. 点击 + 添加其他角色

  7. 对于选择角色,选择 Logging > Logs Writer

    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(OpenAPI 规范模板)部分中使用 No target(无目标)选项。
  1. Proxy details(代理详情)部分,指定以下内容:

    属性
    代理名称 services-v1
    基本路径 /services/v1
    注意:请确认使用 /services/v1 作为基本路径,而不是 /services-v1
  2. 点击下一步

  3. Deploy (optional)(部署 [可选])设置保留默认值,然后点击创建

创建新的条件流

  1. 点击代理编辑器中的开发标签页。

  2. 在左侧窗格中,依次选择 Proxy endpoints(代理端点)> 默认

  3. 点击响应窗格上方的 + 按钮。

  4. Add conditional flow(添加条件流)对话框中,指定以下值:

    属性
    流名称 postComment
    说明 发布特定类别的评论
    条件类型 选择“路径”和“动词”
    路径 /comments
    动词 选择“POST”(发布)

    将目标网址留空。

  5. 点击添加

部署 API

  1. 点击保存。如果您收到代理已另存为新修订版本的通知,请点击另存为新修订版本

  2. 点击部署

  3. 对于环境,选择 eval

  4. 对于服务账号,指定服务账号的邮箱:

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. 点击部署,然后点击确认

    等待部署完成。

点击“检查我的进度”以验证是否完成了以下目标: 创建 API 代理

任务 4. 调用 Natural Language API

在此任务中,您将添加 ServiceCallout 政策,以调用 Natural Language API 来判断传入评论的情感。

提取输入参数

POST /comments 资源会使用 JSON 载荷,其中包含两个参数:comment(用户输入的自由文本)和 category(用于指定评论类型)。ExtractVariables 政策将提取输入。

  1. 在“流”窗格中,点击“请求”窗格中 postComment 流旁边的 +

  2. Add policy step(添加政策步骤)对话框中,点击创建新政策

  3. Select Policy(选择政策)下拉菜单中,从“中介”部分选择 Extract Variables(提取变量)政策类型。

  4. 指定下列内容:

    属性
    显示名称 EV-ExtractRequest
    名称 EV-ExtractRequest
  5. 点击添加

  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 请求中提取“comment”和“category”。“IgnoreUnresolvedVariables”元素设置为“false”,这会导致在未指定这两项输入时引发故障。

注意:在生产 API 中,您需要添加故障处理功能,以重写大多数源自政策的错误。在本实验中,我们不会添加故障处理功能。

调用 Natural Language API

系统将使用 ServiceCallout 政策来调用 Natural Language API,以返回评论的情感分析结果。

  1. 点击 postComment 流(如果它未突出显示),然后点击“响应”窗格中 postComment 流旁边的 +

    Natural Language API 调用的响应将返回给调用方。

  2. Add policy step(添加政策步骤)对话框中,点击创建新政策

  3. Select Policy(选择政策)下拉菜单中,从“扩展程序”部分选择 Service Callout(服务调用)政策类型。

  4. 指定下列内容:

    属性
    显示名称 SC-NaturalLanguage
    名称 SC-NaturalLanguage
  5. 点击添加

    该流应如下所示:

    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”部分会指定发布到服务的请求。此载荷的格式只适用于 Natural Language API

    “Response”元素指示 Natural Language API 响应将存储在 response 消息中。

    “HTTPTargetConnection”部分指定要调用的服务网址。该网址以及请求和响应格式可在 Natural Language API 参考文档中找到。

    “Authentication”部分指定 Google Cloud API 的身份验证系统会自动将 Google OAuth 访问令牌添加到调用请求中。“Scope”部分指出访问令牌将用于提供对 Natural Language API 的访问权限。

  8. 点击保存

确认运行时实例可用

  • 在 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 代理,然后点击开发标签页。

  2. 点击部署

  3. 对于环境,选择 eval

  4. 对于服务账号,指定服务账号的邮箱:

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. 依次点击部署确认

  6. 点击概览标签页,然后等待 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 中,打开与测试虚拟机的 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 会话现在正在虚拟机内运行。

  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 发布消息

在此任务中,您将添加 PublishMessage 政策,以便在收到负面评论时向 Pub/Sub 主题发布 Pub/Sub 消息。主题的订阅方可以运行工作流程,尝试为评论者解决问题。

创建一个 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. 打开开发标签页。点击 postComment 流。

  4. 在“流”窗格中,点击“响应”窗格中 postComment 流旁边的 +

  5. Add policy step(添加政策步骤)对话框中,点击创建新政策

  6. Select Policy(选择政策)下拉菜单中,从“中介”部分选择 Extract Variables(提取变量)政策类型。

  7. 指定下列内容:

    属性
    显示名称 EV-ExtractSentiment
    名称 EV-ExtractSentiment
  8. 点击添加,然后点击 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. 在“扩展程序”部分中,选择 发布消息政策类型。

  3. 指定下列内容:

    属性
    显示名称 PM-PublishScore
    名称 PM-PublishScore
  4. 点击添加,然后点击 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. 点击保存。如果您收到代理已另存为新修订版本的通知,请点击另存为新修订版本

    “response.content”是 Natural Language API 返回的载荷,将是 Pub/Sub 消息。请求中的 category 用于构建 Pub/Sub 主题名称。

    任何不正确的类别都会导致主题名称不存在。在生产 API 中,您需要先验证指定的类别,然后再尝试发布 Pub/Sub 消息。在此例中,政策中的“continueOnError”设置为“true”,因此当主题不存在时,不会引发故障。

为 PublishMessage 政策添加条件检查

条件可用于选择性地跳过流中的政策。

  1. 在代理的导航菜单中,点击 Proxy Endpoints(代理端点)下的默认

    系统会显示 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. 点击保存。如果您收到代理已另存为新修订版本的通知,请点击另存为新修订版本

  2. 点击部署

  3. 对于环境,选择 eval

  4. 对于服务账号,指定服务账号的邮箱:

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. 依次点击部署确认

点击“检查我的进度”以验证是否完成了以下目标: 针对负面评论向 Pub/Sub 发布消息

测试 API

  1. 在 Cloud Shell 中,打开与测试虚拟机的 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

    如果系统提示您进行授权,请点击授权

  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. 点击消息标签页,然后点击拉取

  7. 在消息中,点击“查看所有行内容”下拉菜单按钮。

    您可以查看针对带有负面情感的任何评论发送的 JSON 载荷。

任务 6. 添加 MessageLogging 政策

在此任务中,您将添加 MessageLogging 政策,以将消息记录到 Cloud Logging。

创建 PostClientFlow

ProxyEndpoint 具有一个名为 PostClientFlow 的可选流。附加到此流的政策会在响应已返回给调用方之后运行。这可能是执行消息日志记录的理想位置,因为日志记录不会为请求增加额外的延迟时间。

  1. 返回 Apigee 标签页,如有必要,返回 services-v1“开发”页面。

  2. 在代理的导航菜单中,点击 Proxy Endpoints(代理端点)下的默认

    系统会显示 ProxyEndpoint 配置。

  3. HTTPProxyConnection 部分的正上方,添加以下行:

    <PostClientFlow/>

    添加此行后,ProxyEndpoint 代码的底部应如下所示:

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

这会向 ProxyEndpoint 添加一个空的 PostClientFlow。

添加 MessageLogging 政策

  1. 在代理的导航菜单中,点击 Proxy Endpoints(代理端点)下的 PostClientFlow,然后点击“Response”流下方的 + 按钮。

  2. Add policy step(添加政策步骤)对话框中,点击创建新政策

  3. Select Policy(选择政策)下拉菜单中,从“扩展程序”部分选择 Message Logging(消息日志记录)政策类型。

  4. 指定下列内容:

    属性
    显示名称 ML-LogToCloudLogging
    名称 ML-LogToCloudLogging
  5. 点击添加,然后点击 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 格式,但您可以在日志中使用任何类型的文本消息。日志的内容通常应包含有助于您调试任何问题的代理流变量。例如,如果 Pub/Sub 消息未发送,变量“publishmessage.failed”将为“true”。

    您还可以向已记录的消息添加标签,以便对消息内容进行分类。

部署 API

  1. 点击保存。如果您收到代理已另存为新修订版本的通知,请点击另存为新修订版本

  2. 点击部署

  3. 对于环境,选择 eval

  4. 对于服务账号,指定服务账号的邮箱:

    apigee-gc-service-access@{{{ project_0.project_id | PROJECT }}}.iam.gserviceaccount.com
  5. 依次点击部署确认

    等待部署完成。

点击“检查我的进度”以验证是否完成了以下目标: 添加 MessageLogging 政策

测试 API

  1. 在 Cloud Shell 中,如果您的 SSH 连接已关闭,请打开与测试虚拟机的 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

    如果系统提示您进行授权,请点击授权

  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. 导航菜单 (“导航菜单”图标) 中,依次前往 Logging > Logs Explorer

  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 日

版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。