您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 info
版本 2.0.1
调用通过 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 部署在 Cloud Functions 中,适用于 GCP 账号。如果请求包含消息属性,则代码会返回该属性。否则,它会返回“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 Function 返回 JSON 响应,并且您设置了 parsed="true",则扩展程序的响应将是对象引用。如需从引用中提取响应,请使用以下语法:{objectName}.{jsonKey}。例如:
function.response.message
操作
调用
调用 Cloud Function。
目前,此扩展程序支持调用 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。 | 无。 | 是。 |
| 方法 | 调用函数时使用的 HTTP 方法。 | String。 | GET |
否。 |
| payload | 要随函数调用发送的 payload。 | JSON。 | 无。 | 否。 |
响应
指定函数的响应值(如果有)。
响应属性
无。
配置参考文档
在配置和部署此扩展程序以在 API 代理中使用时,请使用以下内容。如需了解使用 Apigee 控制台配置扩展程序的步骤,请参阅添加和配置扩展程序。
常见扩展程序属性
每个扩展程序都有以下属性。
| 属性 | 说明 | 默认 | 必需 |
|---|---|---|---|
name |
您为扩展程序配置此名称。 | 无 | 是 |
packageName |
Apigee Edge 提供的扩展包的名称。 | 无 | 是 |
version |
配置扩展程序所用的扩展程序软件包的版本号。 | 无 | 是 |
configuration |
特定于您要添加的附加信息的配置值。请参阅此扩展程序软件包的属性 | 无 | 是 |
此扩展程序软件包的属性
为此扩展程序特有的以下配置属性指定值。
| 属性 | 说明 | 默认值 | 必需 |
|---|---|---|---|
| 凭证 | 在 Apigee Edge 控制台中输入时,这是服务账号密钥文件的内容。通过 Management API 发送时,它是根据服务账号密钥文件生成的 base64 编码值。 | 无。 | 是。 |