AWS RDS 到 AWS ES

AWS RDS to AWS ES

要求:在 insert/update 到特定 table 创建数据流并将其推送到弹性搜索。

认为 AWS RDS(MariaDb) ----- insert/update 说用户 table - --> AWS Kinesis 流 -- 使用 AWS Lambda--> AWS ES

问题 如何在 insert/update 上为特定的 table 创建运动流?我可以通过 AWS Lambda 完成吗?

如果您使用的是 Amazon Aurora,则可以执行此操作。

Amazon Aurora 的最新更新之一是支持从存储过程调用 Lambda 函数。

因此,为了实现您的要求,您可以创建一个 SQL 触发器来调用 SQL 存储过程,然后调用 Lambda 函数将数据发送到 Elastic Search。

参考:Invoking a Lambda Function from an Amazon Aurora DB Cluster

交易注意事项:

@Ahmad Nabil pointed out in the 一样,触发器可以在事务提交之前执行。因此,调用 Lambda 的 SQL 触发器可能不是您想要的。


如果您不使用 Aurora,而是使用 MySQL 或 MariaDB,如果此功能对您的应用程序真的很重要,我建议切换。

如果您使用的数据库不是 Aurora、MySQL 或 MariaDB,则必须重新考虑您的应用程序以将数据并行写入 RDS 和 ElasticSearch。我还推荐以下架构模式:

我尝试使用 Amazon Aurora 触发器来调用 lambda 函数,但这在使用事务时导致了一些问题,因为 触发器可以在事务提交之前执行

所以我最终做的是修改应用程序层以在将数据发送到数据库的同一“事务”中异步调用 lambda 函数, 该 lambda 函数将序列化的 JSON 作为输入(来自应用层),然后将该输入发送到 elasticsearch。

如果该 lambda 函数出现故障,您可以重试并使用 DLQ(死信队列)来确保数据没有丢失并真正进入 elasticsearch。