将数据从AWS Lambda插入AWS Aurora

时间:2017-11-09 14:18:23

标签: mysql amazon-web-services amazon-s3 aws-lambda amazon-rds-aurora

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

总结:S3 EVENT → TRIGGERS λ → AURORA INSERT

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

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

更新2017-12-10 :AWS最近宣布Serverless AWS Aurora作为预览,对于无服务器架构看起来很有希望。

1 个答案:

答案 0 :(得分:2)

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

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

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

现在,问题:

  

是否可以使用Aurora MySQL兼容的db.t2.small实例每秒对Aurora执行10-20次插入?

我不明白为什么不。每秒50次插入不是很高。

  

在没有编写和运行我自己的EC2实例的情况下,是否有其他服务可以使用除Lambda之外的其他服务(例如SNS)执行INSERTS?

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