您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
版本 2.0.2
调用通过 Google Cloud 项目部署的 Cloud Functions 函数。
目前,此扩展程序支持调用 HTTP 触发函数。
前提条件
此内容提供了有关配置和使用此扩展程序的参考信息。在通过 ExtensionCallout 政策从 API 代理中使用扩展程序之前,您必须执行以下操作:
通过 IAM 授予用户访问权限,以确定您希望为该函数设置的访问权限级别。例如,您可以限制对该函数的访问权限,仅允许用于配置扩展程序的服务账号访问。
Cloud Functions 简介
借助 Google Cloud Functions,您可以在 Google Cloud 上创建和部署函数,然后从其他代码中调用这些函数。如需了解 Cloud Functions,请尝试其中一个快速入门。
示例
以下示例说明了如何使用 ExtensionCallout 政策在 Cloud Functions 中调用函数。
调用 Node.js 函数
以下示例展示了调用 Google Cloud Functions 扩展程序的 ExtensionCallout 政策。扩展程序会调用您启用 Cloud Functions API 时包含的默认“hello world”函数。
以下 Node.js JavaScript 部署在 GCP 账号的 Cloud Functions 中。如果请求包含 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
操作
调用
调用 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 控制台中输入时,这是服务账号密钥文件的内容。通过管理 API 发送时,它是根据服务账号密钥文件生成的 base64 编码值。 | 无。 | 是。 |