Aws lambda 保存AWS Lambda调用数据的最佳方法?

Aws lambda 保存AWS Lambda调用数据的最佳方法?,aws-lambda,Aws Lambda,我使用AWS简单电子邮件服务(SES)发送电子邮件。我已经将SES配置为将传入的电子邮件保存到S3存储桶中,这将触发AWS Lambda函数。此函数读取新对象并将对象内容转发到备用电子邮件地址 我想记录一些基本信息。在调用过程中从我的AWS Lambda函数——电子邮件来自谁,发送给谁,是否包含任何链接,等等 理想情况下,我会保存这些信息。对于数据库,但是由于AWS Lambda函数的成本很高(相对于其他AWS操作而言),因此我希望尽可能高效地执行此操作 我想我可以向一个私有端点发出一个HTTP

我使用AWS简单电子邮件服务(SES)发送电子邮件。我已经将SES配置为将传入的电子邮件保存到S3存储桶中,这将触发AWS Lambda函数。此函数读取新对象并将对象内容转发到备用电子邮件地址

我想记录一些基本信息。在调用过程中从我的AWS Lambda函数——电子邮件来自谁,发送给谁,是否包含任何链接,等等

理想情况下,我会保存这些信息。对于数据库,但是由于AWS Lambda函数的成本很高(相对于其他AWS操作而言),因此我希望尽可能高效地执行此操作

我想我可以向一个私有端点发出一个HTTPS GET请求,并使用一个包含信息的查询字符串。我要记录。因为我可以异步启动我的请求。在开始和继续处理时,我认为这可能是一种既便宜又有效的方法

这是一个好方法吗?还有其他选择吗

我的Lambda函数不定期启动,因此尽管Lambda函数在启动后保持活动状态10分钟左右,但数据库连接可能很慢,而且成本很高,因为AWS每100毫秒的使用收费


由于我每个月可以收到数千封电子邮件,因此确保Lambda功能的有效性对于成本至关重要。我拥有100多个域名,所以我的数字不会被夸大。提前感谢。

我不认为每月发送数千封电子邮件是个问题,这些云服务的开发考虑到了可扩展性,可以远远超过您建议的数量

就持久性而言,我无法真正理解——缺少日志和度量——为什么数据库连接会很慢。从您使用AWS的那一刻起,它将使用自己的内部基础设施,因此速度将很高,您不必担心

我不是计费方面的专家,但从您描述的内容来看,使用lambdas+S3+dynamoDB似乎是针对您的用例进行了高度优化的

从您所描述的数据类型(电子邮件数据)来看,您似乎既没有内存问题(lambda有mem约束,这可能是一个难题)也没有IO瓶颈。如果您可以分享更多关于调用期间使用的内存和所用时间的详细信息,那将非常好。以及在每次lambda调用中存储的数据量

我认为您可以轻松地在dynamodb中存储电子邮件数据的jsonified字符串,它应该是非常无缝的,并且没有那么昂贵

还没有使用过(SES),但只要存储一条记录,就可以在DynamoDB上设置一个触发器,以防您想继续使用另一个lambda。 你可以把S3和dynamoDB结合起来。存储记录时,只需将包含该记录的文件上载到新的S3键,并使用指向新S3对象的指针更新DynamoDB中的行


这是非常广泛的,没有更多的信息。正确编码后,到DynamoDB或RDS服务器或EC2上的DB的数据库连接不会很慢,如果不使用它,也不会花费任何费用。但这取决于你希望有多少兰姆达。如果您只关心成本,您是否考虑过使用非常小的EC2服务器?这将取决于您使用Lambda的数量,以确定它是否值得。嗯,我的用例需要一个Lambda函数,因此我必须在其中建立连接。如果我必须建立连接并在每次调用时保存数据,那么这将非常昂贵。也许我错了,它太慢了?Lambda函数按100ms充电。我不知道你想实现什么。您似乎想要缩短Lambda函数的运行持续时间?然而,我不确定你说的是什么“价值”。你可以编辑你的问题来提供更多的信息吗?另外,你目前的兰博达成本是多少?约翰,我添加了一些内容,我认为这些内容澄清了我要做的事情。你是对的,我正在尽可能减少Lambda函数的持续时间,以使它们更便宜。Thx.按照我描述的方式使用HTTP GET方法是否更快?如果执行速度是您关心的问题(我不确定为什么您需要超过100毫秒,尽管每次lambda写入所需的时间应该少于100毫秒),我想不出更快的方法。然而,如果您想要执行RESTAPI get+持久化,那么您可以使用类似芹菜任务队列的东西,每个任务都是一个HTTPGET。您可以让每个任务使用异步IO。这样,您可以在等待包含电子邮件数据的单个get响应时发出多个get,然后写入数据库。从理论上讲,你完全可以避开兰博达斯。但这是您的选择,您需要进行实验。我如何避免使用Lambda函数?Lambda函数在保存到S3存储桶的对象上被触发,Lambda函数调用就是完成这项工作的方法——发送电子邮件。您的解决方案非常好,只是试图完全解决我的任何缺点。您可以删除触发器,只需执行一个芹菜任务,每隔几分钟读取s3存储桶中的新对象,根据创建的日期,处理它们并将处理结果发送到任何地方。不同之处在于,您现在将进行轮询,而不是依赖于事件。但如果你想要的话,你至少会避免使用lambda。虽然我认为Lambda是一种更整洁的方法。