跨AWS账户在2个SQS队列中复制消息的最佳方法

Rav*_*avi 3 amazon-sqs amazon-web-services amazon-iam

在AWS账户中将消息从一个SQS队列复制到另一个队列的最佳方法是什么?搜索之后,我附加了策略,授予IAM用户(在目标帐户中)对源队列的完全读写访问权限.然后,我为每个人的源队列附加了一个权限,以便在队列上发送和接收消息访问.

我收到以下错误 -

线程"main"中的异常com.amazonaws.AmazonServiceException:请求中包含的安全令牌无效.(服务:AmazonSQS;状态代码:403

可能是IAM用户凭据有问题,但是,我刷新了凭据,但我仍然收到错误

Joh*_*ein 8

权限是次要问题.主要问题是如何"跨AWS账户将消息从一个SQS队列复制到另一个队列".

Amazon SQS最近推出了在消息到达时触发AWS Lambda功能的功能.您可以创建一个Lambda函数,然后在另一个队列(可能位于不同的帐户,区域等)中创建消息.但是,原始邮件在处理后将被删除,因此它不会真正"复制"邮件.

更好的方法是:

  • 不是将消息发送到Amazon SQS消息,而是将其发送到Amazon SNS主题
  • 然后,您可以将Amazon SQS队列订阅到该主题 - 是的,您可以为该主题订阅多个队列
  • 这样,每当向SNS主题发送消息时,两个队列都将接收它

请参阅:将Amazon SNS消息发送到其他帐户中的Amazon SQS队列 - Amazon Simple Notification Service

AWS re:Invent提供了一个很棒的视频,展示了如何一起使用SQS和SNS.

更新:如何复制队列中的现有邮件

"队列中存在需要复制到新帐户中新队列的消息."

如果是这样,那你就麻烦了!

队列的想法是检索处理和删除的消息.显然,这是"复制"消息的一个坏主意,因为您不想删除它们.

您可以尝试增加队列的隐身超时,然后检索队列中的所有消息.它们将被放置在飞行中,这意味着它们暂时不可见,但如果在隐身超时期限结束时未被删除,它将重新出现在队列中.因此,您的应用程序可以读取每条消息(但不删除它们)并在第二个队列中创建新消息.然后,每个原始消息将重新出现在原始队列中.

或者,您可以编写一个应用程序来读取每条消息并将其发送到两个队列,随时删除源消息.然后,将其中一个新队列视为原始队列的替代.

底线:没有预先提供的方法.你必须自己做.