Лучший способ скопировать сообщения в пределах 2 очередей SQS через учетные записи AWS - PullRequest
0 голосов
/ 30 июня 2018

Как лучше всего копировать сообщения из одной очереди SQS в другую через учетные записи AWS? После поиска я прикрепил политику, предоставляющую полный доступ на чтение и запись для пользователя IAM (в целевой учетной записи) к исходной очереди. Затем я прикрепил Разрешение к исходной очереди, чтобы все имели возможность отправлять и получать сообщения в очереди.

Я получаю ошибку ниже -

Исключение в теме "главная" com.amazonaws.AmazonServiceException: The Маркер безопасности, включенный в запрос, недействителен. (Обслуживание: AmazonSQS; Код статуса: 403

Возможно, что-то не так с учетными данными пользователя IAM, однако я обновил учетные данные, но все еще получаю сообщение об ошибке

1 Ответ

0 голосов
/ 30 июня 2018

Разрешения являются второстепенным вопросом. Основной вопрос - как «скопировать сообщения из одной очереди 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 вместе.

Обновление: Как скопировать существующие сообщения в очередь

"в очереди есть существующие сообщения, которые необходимо скопировать в новую очередь в новой учетной записи."

Если это так, то у вас проблемы!

Идея очереди заключается в том, что сообщение извлекается, обрабатывается и удаляется. Очевидно, что это «плохая идея» для «копирования» сообщения, потому что вы не хотите его удалять.

Можно попытаться увеличить тайм-аут невидимости очереди, а затем извлечь все сообщения в очереди. Они будут помещены в полете , что означает, что они временно невидимы, но будут появляться в очереди, если не будут удалены в конце периода ожидания невидимости. Таким образом, ваше приложение может читать каждое сообщение (но не удалять его) и создавать новые сообщения во второй очереди. Затем каждое исходное сообщение будет появляться в исходной очереди.

Или вы можете написать приложение, которое читает каждое сообщение и отправляет его в две очереди, удаляя исходные сообщения по мере их поступления. Затем обработайте одну из новых очередей как замену исходной очереди.

Итог: Предустановленного метода не существует. Тебе придется сделать это самому.

...