跨 AWS 账户在 2 个 SQS 队列中复制消息的最佳方式
Best way to copy messages within 2 SQS queues across AWS accounts
跨 AWS 账户将消息从一个 SQS 队列复制到另一个队列的最佳方法是什么?搜索后,我将授予 IAM 用户(在目标账户中)完全读写访问权限的策略附加到源队列。然后我将权限附加到源队列,以便每个人都可以在队列上发送和接收消息。
我遇到以下错误 -
Exception in thread "main" com.amazonaws.AmazonServiceException: The
security token included in the request is invalid. (Service:
AmazonSQS; Status Code: 403
可能是 IAM 用户凭证有问题,但是,我已经刷新了凭证,但仍然出现错误
权限是次要的。主要问题是如何 "copy messages from one SQS queue to the other across AWS accounts".
Amazon SQS 最近推出了在消息到达时触发 AWS Lambda 函数 的功能。您可以创建一个 Lambda 函数,然后在另一个队列(可能位于不同的账户、区域等)中创建消息。但是,原始消息在处理后将被删除,因此它并不是真正的"copying"消息。
更好的方法是:
- 不是将消息发送到 Amazon SQS 消息,而是将其发送到 Amazon SNS 主题
- 然后您可以将 Amazon SQS 队列订阅到该主题 -- 是的,您可以将多个队列订阅到该主题
- 这样,每当有消息发送到 SNS 主题时,两个队列都会收到它
有一个 great video from AWS re:Invent 展示了如何一起使用 SQS 和 SNS。
更新:如何复制队列中的现有消息
"there are existing messages in a queue that needs to be copied to a new queue in a new account."
如果是这样,那你就麻烦了!
队列的思想是检索处理并删除消息。显然,这对 "copying" 消息来说不是个好主意,因为您不想删除它们。
您可以尝试增加队列的隐身超时,然后检索队列中的所有消息。它们将被放置在飞行中,这意味着它们暂时不可见,但如果在隐身超时期限结束时未被删除,它们将重新出现在队列中。因此,您的应用程序可以读取每条消息(但不能删除它们)并在第二个队列中创建新消息。然后,每条原始消息将重新出现在原始队列中。
或者,您可以编写一个应用程序来读取每条消息并将其发送到两个队列,同时删除源消息。然后,将其中一个新队列视为原始队列的替换。
底线:没有预先提供的方法。你必须自己做。
跨 AWS 账户将消息从一个 SQS 队列复制到另一个队列的最佳方法是什么?搜索后,我将授予 IAM 用户(在目标账户中)完全读写访问权限的策略附加到源队列。然后我将权限附加到源队列,以便每个人都可以在队列上发送和接收消息。
我遇到以下错误 -
Exception in thread "main" com.amazonaws.AmazonServiceException: The security token included in the request is invalid. (Service: AmazonSQS; Status Code: 403
可能是 IAM 用户凭证有问题,但是,我已经刷新了凭证,但仍然出现错误
权限是次要的。主要问题是如何 "copy messages from one SQS queue to the other across AWS accounts".
Amazon SQS 最近推出了在消息到达时触发 AWS Lambda 函数 的功能。您可以创建一个 Lambda 函数,然后在另一个队列(可能位于不同的账户、区域等)中创建消息。但是,原始消息在处理后将被删除,因此它并不是真正的"copying"消息。
更好的方法是:
- 不是将消息发送到 Amazon SQS 消息,而是将其发送到 Amazon SNS 主题
- 然后您可以将 Amazon SQS 队列订阅到该主题 -- 是的,您可以将多个队列订阅到该主题
- 这样,每当有消息发送到 SNS 主题时,两个队列都会收到它
有一个 great video from AWS re:Invent 展示了如何一起使用 SQS 和 SNS。
更新:如何复制队列中的现有消息
"there are existing messages in a queue that needs to be copied to a new queue in a new account."
如果是这样,那你就麻烦了!
队列的思想是检索处理并删除消息。显然,这对 "copying" 消息来说不是个好主意,因为您不想删除它们。
您可以尝试增加队列的隐身超时,然后检索队列中的所有消息。它们将被放置在飞行中,这意味着它们暂时不可见,但如果在隐身超时期限结束时未被删除,它们将重新出现在队列中。因此,您的应用程序可以读取每条消息(但不能删除它们)并在第二个队列中创建新消息。然后,每条原始消息将重新出现在原始队列中。
或者,您可以编写一个应用程序来读取每条消息并将其发送到两个队列,同时删除源消息。然后,将其中一个新队列视为原始队列的替换。
底线:没有预先提供的方法。你必须自己做。