RDS 服务触发 Lambda

Posted

技术标签:

【中文标题】RDS 服务触发 Lambda【英文标题】:RDS Service Triggering Lambda 【发布时间】:2015-11-29 09:07:18 【问题描述】:

我是 AWS 新手,我正在寻找一种从 RDS 服务(尤其是 mysql)触发 Lambda 的方法。有没有办法实现它? 如果没有,还有其他方法可以达到同样的效果吗?

【问题讨论】:

【参考方案1】:

现在有多种方法可以从 AWS RDS 和 AWS MySQL 触发 Lambda,但支持因数据库引擎而异。如果您真的对 AWS Lambda 处理的 RDS 事件消息感到好奇,请参阅此答案的以下编辑部分。


编辑: 如果您正在寻找一种方法让 AWS Lambda 响应Event messages emitted by AWS RDS(关于集群状态而不是数据库数据事件),请read these docs。 注意: 同样,这与 AWS Lambda 调用和响应数据库表/记录上的数据操作事件无关。

【讨论】:

感谢您的回答。根据 RDS 事件列表(在 AWS 文档中),如果 RDS 数据库表中的数据发生更改,似乎无法调用 Lambda。我正在寻找类似于 Dynamo DBStreams 的东西。有谁知道是否可以为 RDS MySQL 实例实现类似 DBStreams 的东西? 嘿@Chris,如果 RDS 表中的数据发生变化,你能弄清楚如何调用 lambda 函数吗? 您可以使用 mySQL 触发器以及 LAMBDA_ASYNC() 过程或 mySQL 本机函数来实现此效果。 截至 22 年 3 月 15 日,此答案已与现实过时。有关 MySQL 和 RDS 引擎的 Aurora 和 RDS 产品的完整文档,请参阅以下 @Desha 的回答。 @garnaat,我认为您的回答是试图专注于通过 AWS SNS 主题订阅 AWS Lambda 到 AWS RDS 事件通知,而不是根据数据库表/记录上的数据事件触发 Lambda,这是 OP 的问题.因此,我进行了编辑。【参考方案2】:

如果您使用的是 AWS Aurora,则可以通过调用 mysql.lambda_async 过程来调用 AWS Lambda 函数。

例子:

CALL mysql.lambda_async (
  lambda_function_ARN,
  lambda_function_input
)

lambda_function_ARN

要调用的 Lambda 函数的 Amazon 资源名称 (ARN)。

lambda_function_input

调用的 Lambda 函数的 JSON 格式的输入字符串。

编辑: 更多详情请点击此处:Invoking a Lambda function from an Amazon Aurora MySQL DB cluster

【讨论】:

RDS Postgres 有类似的功能吗?谢谢 @Kostanos 遗憾的是,Postgres RDS 目前没有这样的功能 @Kostanos,请检查以下用户 Desha 添加的答案,我编辑了该答案以获得更准确的文档。 @Dimitriy Kankalovich,您的评论链接到 PostgreSQL 在 RDS 中触发 AWS Lambda 的文档,原来的问题是关于 MySQL,所以我必须标记它。 @Jim Geurts,您的答案是针对 AWS Aurora,这有点相关,但 OP 问题是关于 AWS RDS 和 MySQL 引擎的。此外,文档中的链接现在已损坏,并且首先是错误的,因为您谈论 Aurora 并且文档指向 RDS,因此我将进行编辑以至少匹配 Aurora MySQL 的文档:docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/…【参考方案3】:

自 2022 年 3 月 15 日起,您只能从 RDS 中的 PostgreSQL 引擎调用 AWS Lambda 函数,而不能从 MySQL 引擎调用。文档如下:

    Invoking an AWS Lambda function from an RDS for PostgreSQL DB instance

您还可以从 Aurora 中的 MySQL 或 PostgreSQL 引擎调用 AWS Lambda 函数(注意:Aurora 不同于 RDS 的 AWS 服务)。两者的文档如下:

    Invoking an AWS Lambda function from an Aurora PostgreSQL DB cluster Invoking a Lambda function from an Amazon Aurora MySQL DB cluster

【讨论】:

如果您对答案投了反对票,请说明原因。

以上是关于RDS 服务触发 Lambda的主要内容,如果未能解决你的问题,请参考以下文章

RDS 触发器的 Lambda 函数访问导致连接丢失

AWS Lambda NodeJS 连接到 RDS Postgres 数据库

从未在 Lambda 函数中调用与 Sequelize 的 RDS 连接

AWS Appsync 从 Lambda 调用变异?

AWS Cognito Post-Confirmation [已结束]

无服务器中的 SQS 触发 lambda 存在延迟