Google Cloud Functions 扩展程序

<ph type="x-smartling-placeholder"></ph> 您正在查看 Apigee Edge 文档。
转到 Apigee X 文档
信息

<ph type="x-smartling-placeholder">

版本 1.0.5

调用通过 Google Cloud 项目部署的 Cloud Functions 函数。

目前,此扩展程序支持调用 HTTP 触发器函数

前提条件

本文提供了配置和使用此扩展程序的参考信息。在通过 API 代理使用 ExtensionCallout 政策使用扩展程序之前,您必须:

  1. 启用 Cloud Functions API

  2. 在 Cloud Functions 中为您的 Google Cloud 项目定义部署函数。

  3. 通过 IAM 授予用户访问权限,以获取函数所需的访问权限级别。例如,您可以将函数访问权限限制为仅限用于配置扩展程序的服务账号。

  4. 使用 GCP Console 为服务账号生成密钥

  5. 在通过配置参考添加和配置扩展程序时,使用所生成的密钥 JSON 文件的内容。

Cloud Functions 简介

借助 Google Cloud Functions,您可以在 Google Cloud 上创建和部署函数,然后通过其他代码调用这些函数。如需查看 Cloud Functions 简介,请参阅某个快速入门

示例

以下示例说明了如何使用 ExtensionCallout 政策调用 Cloud Functions 中的函数。

调用 Node.js 函数

以下示例展示了调用 Google Cloud Functions 扩展程序的 ExtensionCallout 政策。该扩展程序会调用默认的“hello world”函数。

以下 Node.js JavaScript 已在 Cloud Functions 中针对一个 GCP 账号部署。如果请求包含 message 属性,则代码会返回该属性。否则,它会返回“Hello World!”作为其响应。

/**
 * Responds to any HTTP request.
 *
 * @param {!express:Request} req HTTP request context.
 * @param {!express:Response} res HTTP response context.
 */
exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';
  res.status(200).send(message);
};

此示例包含一个 Google Cloud Functions 扩展程序,该扩展程序配置了了进行身份验证和获得授权以调用 Cloud Functions 上的代码所需的凭据。

上述函数代码在 Cloud Functions 中保存为 helloWorld。以下 ExtensionCallout 政策配置代码使用此名称,以及与部署该函数的 Cloud Functions 环境的细节相匹配的区域和项目 ID 值。

<Action>invoke</Action>
<Input><![CDATA[
  {
    "region" : "us-central1",
    "projectId" : "my-project",
    "functionName" : "hello-world",
    "method" : "POST",
    "payload" : { "message" : "Hello yourself!" }
  }
]]></Input>
<Output parsed="false">function.response</Output>

以下 AssignMessage 政策会出于调试目的捕获响应值。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Function-Response">
    <DisplayName>Get Function Response</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{function.response}</Payload>
    </Set>
</AssignMessage>

上述请求的响应如下所示:

Hello yourself!

parsed 的默认值为 true。此示例在政策的 <Output> 标记中设置 parsed="false", 这会阻止政策解析 JSON 响应。 在大多数情况下,在使用 Cloud Functions 扩展程序时,您需要设置 parsed="false"。 参见 <Output>元素

如果 Cloud Functions 函数返回 JSON 响应并且您设置了 parsed="true",则扩展程序的响应是对象引用。如需从引用中提取响应,请使用以下语法:{objectName}.{jsonKey}。例如:

function.response.message

操作

<ph type="x-smartling-placeholder">

调用

调用 Cloud Functions 函数。

目前,此扩展程序支持调用 HTTP 触发器函数

语法

<Action>invoke</Action>
<Input><![CDATA[
  {
    "region" : "deployment-region",
    "projectId" : "project-id",
    "functionName" : "function-name",
    "method" : "http-method",
    "payload" : { json-payload }
  }
]]></Input>
<Output>function.response</Output>

示例

<Action>invoke</Action>
<Input><![CDATA[
  {
    "region" : "us-central1",
    "projectId" : "my-project",
    "functionName" : "hello-world",
    "method" : "POST",
    "payload" : { "message" : "Hello yourself!" }
  }
]]></Input>
<Output>function.response</Output>

请求参数

参数 说明 类型 默认 必填
区域 部署函数的 Google Cloud 区域 String。 无。 是。
projectId GCP 项目 ID。 String。 无。 是。
functionName 要调用的 HTTP 函数的名称。这是您在创建函数时使用的名称(不一定是函数代码中的名称)。 String。 无。 是。
method 调用函数时使用的 HTTP 方法。 String。 GET 数量
payload 随函数调用一起发送的载荷。 JSON。 无。 数量

响应

指定函数的响应值(如果有)。

响应属性

无。

配置参考

在配置和部署此扩展程序以供在 API 代理中使用时,请使用以下代码。如需了解使用 Apigee 控制台配置扩展程序的步骤,请参阅添加和配置扩展程序

常见的扩展属性

每个扩展程序都有以下属性。

属性 说明 默认 必需
name 您为扩展程序配置此名称。
packageName Apigee Edge 提供的扩展包的名称。
version 配置扩展程序所用的扩展程序软件包的版本号。
configuration 特定于您要添加的附加信息的配置值。请参阅此扩展程序软件包的属性

此扩展程序软件包的属性

为此扩展程序的以下配置属性指定值。

属性 说明 默认 必填
凭据 在 Apigee Edge 控制台中输入时,这是服务账号密钥文件的内容。通过 Management API 发送时,此值为根据服务账号密钥文件生成的 base64 编码值。 无。 是。