Google Cloud Functions 扩展程序

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

版本 1.0.5

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

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

前提条件

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

  1. 启用 Cloud Functions API

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

  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 政策。此扩展程序会调用您启用 Cloud Functions API 时包含的默认“hello world”函数。

在 Cloud Functions 中为 GCP 帐号部署了以下 Node.js JavaScript。如果请求包含消息属性,代码会返回该属性。否则,它会返回“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 上调用代码的授权所需的凭据。

上述函数代码以 helloWorld 的形式保存在 Cloud Functions 中。以下 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

Action

invoke

调用 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 编码值。 无。 有。