2017-10-19 201 views
-1

我会需要一个星期发出大约200-300k电子邮件,我们的每周通讯。这个数字预计会随着时间的推移而增加,这就是为什么我想让lambda处理我们的缩放比例。发送带有AWS拉姆达,SES,SQS,群发邮件的sns

将有员工触发这些电子邮件的发送UI。我最初的想法是将电子邮件地址列表添加到SNS主题,并使用lambda函数订阅它以触发实际发送的电子邮件。我读过,这可能会导致一些意外的行为,并不是追踪错误的最佳选择。

我们目前的限制是每秒90封电子邮件。结合执行lambda函数的最大时间为5分钟,让我想知道如何分解它。我是否需要批量将这些内容发送给SNS,以便多个lambda容器可以均匀旋转以完成工作?据我所知,lambda可以扩展事件,比如向S3添加文件,但我如何明确告诉lambda旋转多个来处理所有需要发送的电子邮件?有更好的设计模式吗?

我的另一个想法是将电子邮件添加到SQS队列,因此电子邮件可以坚持柜面错误的,但需要做一些变通方法,使那部戏很好地与拉姆达。

+2

我觉得你让这个太难了。我刚刚检查了[sendgrid.com](https://sendgrid.com/),每月的1.2M邮件甚至不是它们的最高层。这不便宜 - 大约650美元/月,但你不必建立已经存在的确切的东西。他们有工具让你自定义和处理垃圾邮件/取消订阅/开放计数等等。我对他们没有经济利益(还有其他提供者),但过去他们成功地使用了它们。 – stdunbar

+1

@奥斯汀我愿意投入良好的资金,你可以与第三方合作。我使用过Mailgun,他们有一个用于发送电子邮件和支持webhook的API。我严重怀疑它不能用Sendgrid或Mailgun完成。 –

+0

我不怀疑它不能完成,但有一些其他业务需求需要它在内部构建。 – Austin

回答

5

在λ看起来似乎是一个很好的解决方案的表面,但事实并非如此。

你要么需要开发自己的软件或者端口/迁移现有的解决方案。管理电子邮件列表和发送电子邮件是一项适合正常EC2实例(适当调整大小)以及RDS的任务。发送单个电子邮件的过程很慢(对于每个电子邮件几秒钟的很多SMTP服务器),因此重叠是至关重要的。使用Lambda时,您将支付Lambda等待SMTP服务器接受每封电子邮件的所有秒数。

有在发送大量电子邮件(量大)很多问题。这就是为什么第三方服务变得如此受欢迎。他们提供的管理服务只需插入您的应用程序,即可转到下一个任务。

如果你要使用AWS来发送电子邮件,可以阅读这个最佳实践文档:

Amazon Simple Email Service Email Sending Best Practices

+0

我们目前正在以每秒20次的速度发送它们,而我们的旧实施已到位。 – Austin

0

一件事实现基于λ-解决方案时,要记住的是,每个拉姆达保证至少运行。偶尔会出现一个小故障,一些用户会收到重复的电子邮件。 Here估计大约0.02%的所有调用导致多次执行。