您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
版本 2.0.0
调用通过 Google Cloud 项目部署的 Cloud Functions 函数。
目前,此扩展程序支持调用 HTTP 触发器函数。
前提条件
本文档提供了有关配置和使用此扩展程序的参考信息。在使用 ExtensionCallout 政策从 API 代理使用扩展程序之前,您必须满足以下条件:
通过 IAM 授予用户访问权限,以便为函数授予所需的访问权限级别。例如,您可以将对该函数的访问权限限制为仅限您用于配置扩展程序的服务账号。
Cloud Functions 简介
借助 Google Cloud Functions,您可以在 Google Cloud 上创建和部署函数,然后从其他代码调用这些函数。如需了解 Cloud Functions 的相关信息,请尝试使用其中一个快速入门。
示例
以下示例展示了如何使用 ExtensionCallout 政策在 Cloud Functions 中调用函数。
调用 Node.js 函数
以下示例展示了ExtensionCallout 政策调用 Google Cloud Functions 扩展程序。该扩展程序会调用您启用 Cloud Functions API 时包含的默认“hello world”函数。
以下 Node.js JavaScript 已在 GCP 账号的 Cloud Functions 中部署。如果请求包含消息属性,代码会返回该属性。否则,它会返回“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
操作
调用
调用 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 编码值。 | 无。 | 是。 |