簡體   English   中英

跨AWS賬戶在2個SQS隊列中復制消息的最佳方法

[英]Best way to copy messages within 2 SQS queues across AWS accounts

將消息從一個SQS隊列復制到整個AWS賬戶的另一個隊列的最佳方法是什么? 搜索之后,我將允許IAM用戶(在目標帳戶中)的完全讀寫訪問權限的策略附加到源隊列。 然后,我在源隊列上附加了一個權限,以便每個人都可以在隊列上發送和接收消息訪問權限。

我遇到錯誤-

線程“ main” com.amazonaws.AmazonServiceException中的異常:請求中包含的安全令牌無效。 (服務:AmazonSQS;狀態碼:403

IAM用戶憑據可能有問題,但是,我刷新了憑據,但仍然收到錯誤

許可是次要的。 主要問題是如何“將消息從一個SQS隊列復制到整個AWS賬戶中的另一個”。

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。

更新:如何復制隊列中的現有消息

“隊列中已有消息,需要將其復制到新帳戶中的新隊列中。”

如果真是這樣,那么您就有麻煩了!

隊列的思想是檢索一條消息並進行處理和刪除。 顯然,這對於“復制”郵件是個壞主意,因為您不想刪除它們。

您可以嘗試增加隊列的隱身超時時間 ,然后檢索隊列中的所有消息。 它們將在飛行中放置,這意味着它們暫時不可見,但是如果在看不見超時時間結束時未刪除,它們將重新出現在隊列中。 因此,您的應用可以讀取每條消息(但不能刪除它們)並在第二個隊列中創建新消息。 然后,每個原始消息將重新出現在原始隊列中。

或者,您可以編寫一個應用程序來讀取每條消息並將其發送到兩個隊列,並隨即刪除源消息。 然后,將其中一個新隊列替換為原始隊列。

底線:沒有預先提供的方法。 您必須自己做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM