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

时间:2018-06-30 09:20:43

标签: amazon-web-services amazon-sqs amazon-iam

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

我遇到错误-

  

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

IAM用户凭据可能存在问题,但是,我已经刷新了凭据,但是仍然出现错误

1 个答案:

答案 0 :(得分:6)

权限是次要的事情。主要问题是如何“将消息从一个SQS队列复制到整个AWS账户中的另一个队列”。

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

更好的方法是:

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

请参阅:Sending Amazon SNS messages to an Amazon SQS queue in a different account - Amazon Simple Notification Service

有一个great video from AWS re:Invent展示了如何一起使用SQS和SNS。

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

  

“队列中已有消息,需要将其复制到新帐户中的新队列中。”

如果是这样,那么您就有麻烦了!

队列的思想是对消息进行检索处理并删除。显然,这对于“复制”邮件是个坏主意,因为您不想删除它们。

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

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

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