[英]Will AWS S3 event forwarding to SQS will end up being a different message than S3 to SNS to SQS?
我正在使用Splunk技术插件,该插件将从SQS队列中提取消息。 尽管TA建议使用S3转发到SNS并订阅了SQS,但是S3也有可能直接转发到SQS。
SNS会对S3发送的内容进行任何更改吗? 还是对SQS完全透明的传输方法?
是的,默认情况下,S3→SQS和S3→SNS→SQS将在SQS消息主体内产生两种不同的数据结构/格式。
这是因为SNS订阅会为每个传递的消息提供元数据 -SNS MessageId
,验证真实性的Signature
,SNS最初接受消息的Timestamp
和其他属性。 原始消息在此外部JSON结构的Message
属性内被编码为JSON字符串。
因此,使用直接SQS,您可以使用(伪代码)提取S3事件...
s3event = JSON.parse(sqsbody)
...但是从SNS到SQS ...
s3event = JSON.parse(JSON.parse(sqsbody).Message)
您可以禁用其他结构,并通过对SNS主题的SQS订阅启用原始消息传递来使SNS仅发送原始有效负载。
https://docs.aws.amazon.com/sns/latest/dg/sns-large-payload-raw-message-delivery.html
启用原始消息传递后,S3→SQS和S3→SNS→SQS的内容将相同。
原始消息传递的不利之处在于,原始消息传递会丢失潜在有用的故障排除信息,例如SNS消息ID和SNS发出的时间戳。
另一方面,如果接收服务(SQS使用者)假定消息总是通过SNS来发送,并希望在SQS消息正文中找到SNS数据结构,则直接发送S3→SQS将导致使用者发现SQS的邮件正文与预期不符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.