示例:从 RDS for PostgreSQL 数据库实例调用 Lambda 函数 - Amazon Relational Database Service

示例:从 RDS for PostgreSQL 数据库实例调用 Lambda 函数

在下文中,您可以找到调用 aws_lambda.invoke 函数的一些示例。大多数示例都使用您在 步骤 4:将 Lambda 帮助程序函数与 RDS for PostgreSQL 数据库实例搭配使用(可选) 中创建的复合结构 aws_lambda_arn_1 来简化函数详细信息的传递。有关异步调用的示例,请参阅 示例:Lambda 函数的异步(事件)调用。列出的其他示例均使用同步调用。

要了解有关 Lambda 调用类型的更多信息,请参阅《AWS Lambda 开发人员指南》中的调用 Lambda 函数。有关 aws_lambda_arn_1 的更多信息,请参阅 aws_commons.create_lambda_function_arn

示例:Lambda 函数的同步 (RequestResponse) 调用

以下是 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 帮助程序函数与 RDS for PostgreSQL 数据库实例搭配使用(可选) 中创建的复合结构。您还可以通过内联方式在 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 函数的异步(事件)调用

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

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

示例:在函数响应中捕获 Lambda 执行日志

您可以使用 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_lambda.invoke 函数的 log_type 参数设置为 Tail,以在响应中包含执行日志。log_type 参数的默认值为 None

返回的 log_resultbase64 编码的字符串。您可以使用 decodeconvert_from PostgreSQL 函数的组合来解码内容。

有关 log_type 的更多信息,请参阅 aws_lambda.invoke

示例:在 Lambda 函数中包含客户端上下文

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_lambda.invoke 函数的 context 参数。

有关 context 参数的更多信息,请参阅 aws_lambda.invoke 参考。

示例:调用 Lambda 函数的特定版本

通过在 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_lambda.invoke 参考。