Я использую экземпляр EC2 в учетной записи A и имею очереди SQS в учетной записи A & B. Мое приложение работает на экземпляре EC2 учетной записи A. Слушатель сообщений получает queueUrl и опрашивает сообщения из очередей, которые могут находиться в учетной записи A или B. Вот пример кода для получения queueUrl, который отлично работает, если мы получаем queueUrl учетной записи A, но не работает, если мы предоставляем очередь учетной записи B sqs в качестве входного параметра:
public String getQueueUrl(String queueOwnerAccountId, String region, String queueName) throws AwsException {
try {
AmazonSQS sqs = AmazonSQSClientBuilder.standard().withRegion(Regions.fromName(region)).build();
GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest(queueName).withQueueOwnerAWSAccountId(queueOwnerAccountId);
GetQueueUrlResult result = sqs.getQueueUrl(getQueueUrlRequest);
return result.getQueueUrl();
} catch (QueueDoesNotExistException e) {
throwAwsException("With accountId:"+queueOwnerAccountId+" ,Queue: "+queueName+" does not exists in region: "+region);
} catch (AmazonClientException e) {
throwAwsException("Invalid destination address:"+e.getMessage());
}
return null;
}
Я добавил политику (в политике есть ARN для очередей обеих учетных записей) к ролям IAM в учетной записи A для очереди обеих учетных записей. Пожалуйста, дайте мне знать, если я пропускаю какие-либо настройки. Спасибо.