我可以通过给定的AWS集成将SNS(或SQS)消息持久化到S3吗?

10

我希望将所有SNS消息保存到S3中,以便于保留完整历史记录,并且在诊断问题时有能力回溯查看,日后进行索引,并用于审核、回放和重建数据等。目前,我只想将它们倾倒到S3中(成本低廉),以后需要时再深入研究。

  • 我不需要转换或处理数据,现在只需将其倾倒。

我是否可以使用AWS提供的集成来完成此操作,还是需要编写自己的HTTP服务或Lambda?

如果可以避免,我宁愿不编写和维护lambda或服务。

我所看到的是我可以将HTTP端点设置为SNS订阅者,但它具有与S3 http api不同的消息格式,因此需要一个lambda来进行转换。而且初始订阅确认消息也需要转换。这是不可能的吗?我应该开始编写自己的服务/lambda吗?


你最终采用了什么方法?我有一个类似的用例,希望在订阅者失败事件发生时将消息持久化到某个地方。 - Andy Dufresne
1
@AndyDufresne 我创建了一个 Lambda,订阅了 SNS 主题,并将通过 SNS 主题传递的每个 JSON 放入 S3 文档中。此外,在两者之间添加了 SQS 队列,以便消息不会丢失。这意味着我们必须支付 Lambda 运行的费用,对于低容量来说不算什么,但对于我们拥有的所有主题来说是巨大的成本。希望有一天可以实现这种集成,使其工作和成本不再必要! - Chip
2个回答

3

一个SNS主题可以通过Kinesis Data Firehose进行订阅,然后Firehose可以将数据发布到S3存储桶中以实现持久化。

来自文档

SNS to Firehose to S3


1
据我所知,这是不可能的。您可以编写一个Lambda函数来保存SNS或SQS消息,这相当简单。您也可以使用类似于sqs-s3-logger的工具(请注意,此代码基于您无法从SQS触发Lambda,但现在可以,因此您不需要定时任务)。请参考sqs-s3-logger

谢谢!知道这是不可能的,可以为我节省时间,非常有帮助! - Chip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接