使用SQS或SNS发送电子邮件

oso*_*rio 6 amazon-sqs amazon-web-services amazon-sns amazon-ses aws-lambda

我有一个Web应用程序,当应用程序发生问题时,该应用程序应该向管理员用户发送电子邮件。例如,注册一个新用户。

我想避免在应用程序内部建立/发送电子邮件的逻辑。我宁愿应用程序在队列中发布消息,然后再有另一个系统侦听并做出适当的反应以发送电子邮件。

流程将是这样的。

  • 应用程序在队列中发布消息(SQS或SNS ??)
  • Lambda函数是触发器。Lambda读取消息并调用SES。
  • SES发送电子邮件

我不确定这是否是最好的方法。我读到SQS和Lambda之间存在差距。使用SNS会更好吗?

正确的流程是什么?

应用-> SQS-> Lambda-> SES

要么

应用-> SNS-> Lambda-> SES

也许还有别的吗?

请考虑这一想法,始终是从所有逻辑中抽象Web应用程序。Web应用程序只会在某处发布消息。然后魔术发生在后台。

kix*_*orz 5

根据您的描述,我建议采用以下架构:

App -> SQS -> Lambda -> SES

我会用来从应用程序SQS执行该Lambda函数,或者使用 Cron 作业工作器作为队列中的工作器定期运行它。

这种架构将应用程序与邮件服务解耦,提供异步调用和排队。如果您需要发送更大的有效负载,请使用S3来存储这些对象并将SQS消息中的密钥传递给您的Lambda.


Rod*_*o M 3

将 SNS 从电子邮件中剔除,因为您需要成为某个主题的订阅者才能接收通知。它实际上用于 AWS 相关事件通知。

使用 SQS,您必须处理与消息相关的限制。默认最大消息大小为 256kb,除非您使用特殊的 SDK,否则它是 2GB。

考虑第三种选择。应用程序 -> 数据库 -> Lambda -> SES

数据库中的邮件队列是一个简单的表结构,您可以让 Lambda 按计划或事件驱动的方式扫描它,并通过 SES 处理邮件。而且这样就没有SQS消息限制了。