

# 示例：从 Aurora PostgreSQL 数据库集群调用 Lambda 函数
<a name="PostgreSQL-Lambda-examples"></a>

在下文中，您可以找到调用 [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 函数的一些示例。大多数示例都使用您在 [步骤 4：将 Lambda 帮助程序函数与 Aurora PostgreSQL 数据库集群 搭配使用（可选）](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function) 中创建的复合结构 `aws_lambda_arn_1` 来简化函数详细信息的传递。有关异步调用的示例，请参阅 [示例：Lambda 函数的异步（事件）调用](#PostgreSQL-Lambda-Event)。列出的其他示例均使用同步调用。

要了解有关 Lambda 调用类型的更多信息，请参阅《AWS Lambda 开发人员指南**》中的[调用 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html)。有关 `aws_lambda_arn_1` 的更多信息，请参阅[aws\$1commons.create\$1lambda\$1function\$1arn](PostgreSQL-Lambda-functions.md#aws_commons.create_lambda_function_arn)。

**Topics**
+ [示例：Lambda 函数的同步 (RequestResponse) 调用](#PostgreSQL-Lambda-RequestResponse)
+ [示例：Lambda 函数的异步（事件）调用](#PostgreSQL-Lambda-Event)
+ [示例：在函数响应中捕获 Lambda 执行日志](#PostgreSQL-Lambda-log-response)
+ [示例：在 Lambda 函数中包含客户端上下文](#PostgreSQL-Lambda-client-context)
+ [示例：调用 Lambda 函数的特定版本](#PostgreSQL-Lambda-function-version)

## 示例：Lambda 函数的同步 (RequestResponse) 调用
<a name="PostgreSQL-Lambda-RequestResponse"></a>

以下是 Lambda 函数同步调用的两个示例。这些 `aws_lambda.invoke` 函数调用的结果相同。

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json);
```

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse');
```

参数如下所述：
+ `:'aws_lambda_arn_1'`：此参数使用 `aws_commons.create_lambda_function_arn` 帮助程序函数标识在 [步骤 4：将 Lambda 帮助程序函数与 Aurora PostgreSQL 数据库集群 搭配使用（可选）](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function) 中创建的复合结构。您还可以通过内联方式在 `aws_lambda.invoke` 调用中创建此结构，如下所示。

  ```
  SELECT * FROM aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function', 'aws-region'),
  '{"body": "Hello from Postgres!"}'::json
  );
  ```
+ `'{"body": "Hello from PostgreSQL!"}'::json` – 要传递到 Lambda 函数的 JSON 负载。
+ `'RequestResponse'` – Lambda 调用类型。

## 示例：Lambda 函数的异步（事件）调用
<a name="PostgreSQL-Lambda-Event"></a>

以下是异步 Lambda 函数调用的示例。`Event` 调用类型使用指定的输入负载计划 Lambda 函数调用并立即返回。在某些不依赖于 Lambda 函数结果的工作流程中使用 `Event` 调用类型。

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'Event');
```

## 示例：在函数响应中捕获 Lambda 执行日志
<a name="PostgreSQL-Lambda-log-response"></a>

您可以使用 `aws_lambda.invoke` 函数调用中的 `log_type` 参数，在函数响应中包含执行日志的最后 4 kB。默认情况下，此参数设置为 `None`，但您可以指定 `Tail` 在响应中捕获 Lambda 执行日志的结果，如下所示。

```
SELECT *, select convert_from(decode(log_result, 'base64'), 'utf-8') as log FROM aws_lambda.invoke(:'aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'Tail');
```

将 [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 函数的 `log_type` 参数设置为 `Tail`，以在响应中包含执行日志。`log_type` 参数的默认值为 `None`。

返回的 `log_result` 是 `base64` 编码的字符串。您可以使用 `decode` 和 `convert_from` PostgreSQL 函数的组合来解码内容。

有关 `log_type` 的更多信息，请参阅[aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke)。

## 示例：在 Lambda 函数中包含客户端上下文
<a name="PostgreSQL-Lambda-client-context"></a>

`aws_lambda.invoke` 函数具有 `context` 参数，可用于传递独立于有效负载的信息，如下所示。

```
SELECT *, convert_from(decode(log_result, 'base64'), 'utf-8') as log FROM aws_lambda.invoke(:'aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'Tail');
```

要包含客户端上下文，请将 JSON 对象用于 [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 函数的 `context` 参数。

有关 `context` 参数的更多信息，请参阅 [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 参考。

## 示例：调用 Lambda 函数的特定版本
<a name="PostgreSQL-Lambda-function-version"></a>

通过在 `aws_lambda.invoke` 调用中包含 `qualifier` 参数，您可以指定 Lambda 函数的特定版本。在下文中，您可以找到一个使用 `'custom_version'` 作为版本别名完成此操作的示例。

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'None', NULL, 'custom_version');
```

您还可以改为提供包含 Lambda 函数名称详细信息的 Lambda 函数限定符，如下所示。

```
SELECT * FROM aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function:custom_version', 'us-west-2'),
'{"body": "Hello from Postgres!"}'::json);
```

有关 `qualifier` 和其他参数的详细信息，请参阅 [aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 参考。