Amazon SQS-FIFO 队列是否有替代解决方案来维护从 S3 接收的事件顺序?

Is there a alternative solution for Amazon SQS-FIFO Queue to maintain Order of events that are received from S3?

我有一个项目的 10 个 lambda 函数和一个从 SFTP 复制文件并将其放在 S3 中的路由器 lambda,然后 S3 根据文件的类型触发 lambda 函数。

我的方案是维护一种文件类型的文件事件的顺序。

本来想用SQS-FIFO来对S3事件进行排队,后来发现SQS-FIFO不支持S3按照推送的顺序来处理事件。 最好的替代解决方案是什么?

看来您的情况是:

  • 文件出现在 SFTP
  • 您的“Router Lambda”将文件从 SFTP 复制到 Amazon S3 存储桶
  • 根据复制的文件类型,您需要特定的 Lambda 函数 来处理该文件
  • 对于每种文件类型,您希望按照从'router lambda'接收的顺序处理文件,并且您不希望处理相同的文件类型与另一个相同类型的文件并行

我建议,不要让 Amazon S3 向 Amazon SQS 队列发送消息,而应让 'router lambda' 这样做。当前,'router lambda' 正在“根据文件类型”复制文件。您只需要再添加一个命令,向 FIFO SQS 队列e 发送一条消息,其中包含已复制对象的详细信息。这取代了让 S3 将消息发送到 SQS 队列。

因此,您将拥有:

  • 10 个 Lambda 函数(大概每个文件类型一个)
  • 10 个 Amazon SQS FIFO 队列(每种文件类型一个)

'router lambda' 会:

  • 将文件从 SFTP 复制到 S3
  • 将消息推送到适当的 SQS FIFO 队列中,其中包含已复制文件的详细信息

SQS FIFO 队列将触发适当的 Lambda 函数来处理文件。请注意,可以将多个文件传递给单个 Lambda 调用,因此请确保遍历 events['Records'] 数组。或者,如果您只想每次调用处理一个文件,请将 Lambda 函数的批量大小设置为 1。

另请参阅:New for AWS Lambda – SQS FIFO as an event source | AWS Compute Blog