amazon-web-services - 跨 AWS 账户在 2 个 SQS 队列中复制消息的最佳方式

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

跨 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 用户凭据可能有问题,但是,我已刷新凭据,但仍然收到错误消息

最佳答案

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

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。

    更新:如何复制队列中的现有消息

    "there are existing messages in a queue that needs to be copied to a new queue in a new account."



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

    队列的思想是检索处理和删除消息。显然,这是“复制”消息的坏主意,因为您不想删除它们。

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

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

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

    关于amazon-web-services - 跨 AWS 账户在 2 个 SQS 队列中复制消息的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51113549/

    相关文章:

    node.js - AWS - Lambda 无法访问 ElasticTranscoder

    amazon-web-services - 当最大值表示为43200时,为什么SQS不能将VisibilityTimeout设置为43199?

    eclipse - 在 eclipse 2.0 的 aws 工具包中承担/切换角色

    amazon-web-services - 如何使用 CDK 将帐户作为主体添加到 Elasticsearch 访问策略?

    amazon-web-services - 为什么某些 AWS 服务要求请求者拥有 IAM 策略?

    amazon-web-services - 如果丢失了我的 .pem 文件,如何从 aws.amazon.com 检索密码?

    amazon-web-services - 如何在Elastic beantalk docker json中定义多个任务

    amazon-web-services - AWS Secrets Manager 的 GetSecretValue 操作未授权错误

    ruby-on-rails - 如何处理 Rails 无限/无限进程

    amazon-web-services - SNS 中的时间戳 -> SQS 消息体