将数据从 AWS Lambda 插入到 AWS Aurora

Insert data from AWS Lambda to AWS Aurora

在我的应用程序中,我使用 AWS S3 上传和存储文件。每当将文件上传到 S3 时,都会创建一个事件来触发特定的 lambda 函数 λ。然后,我的 lambda 函数 λ 应该对我的 运行 AWS Aurora 实例执行 SQL 插入(使用 S3 事件的事件数据)。我预计 λ 每秒将被调用大约 10 - 50 次。

总结:S3 EVENT → TRIGGERS λ → AURORA INSERT

我发现各种帖子声称从 lambda 函数访问 Aurora(或一般的 RDS)可能会由于缺少 AWS Lambda 的连接池和无状态容器架构(例如 AWS Lambda RDS Connection Pooling)而导致问题。

我的 λ 可以用任何语言编写,所以问题是,language/framework 使用什么才不会遇到 AWS Lambda 连接池问题,或者换句话说,是否有可能使用 Aurora MySQL 兼容的 db.t2.small 实例每秒向 Aurora 执行 10 - 50 次插入?或者是否有任何替代方法可以使用 Lambda 以外的其他服务(例如 SNS)对 Aurora 执行 INSERTS 而无需写入和 运行 我自己的 EC2 实例?

2017-12-10 更新:AWS 最近宣布 Serverless AWS Aurora 作为预览版,在无服务器架构方面看起来很有前途。

连接池问题不是特定于语言的。这是由您在代码中用于连接和断开与数据库的方法引起的。

基本上,避免它的最佳方法是 连接 并在您的 lambda 调用期间 断开与数据库的连接。从性能的角度来看,这不是最佳的,但这是最不容易出错的。

可以重复使用数据库连接(出于性能原因),但这可能会或可能不会出现连接问题,具体取决于您的数据库配置为处理空闲连接的方式。这需要一些反复试验和一些数据库配置调整。最重要的是,适用于开发的调整可能不适用于生产(因为生产流量不同)。

现在,回答您的问题:

Is it possible to perform 10 - 20 inserts per second to Aurora with an Aurora MySQL compatible db.t2.small instance?

我不明白为什么不。每秒 50 次插入并不算高。

Are there any alternatives to perform INSERTS to Aurora with another service than Lambda (e.g. SNS) without writing and running my own EC2 instance?

我认为没有。 SQL INSERT 使用模式,因此您在插入数据时必须了解该模式,这意味着您必须使用 Lambda 自行编码。