Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6066,6 +6066,9 @@ included in the future will have a corresponding CHANGELOG entry in future relea
- **CUMULUS-1808**
- Add additional error messaging in `deleteSnsTrigger` to give users more context about where to look to resolve ResourceNotFound error when disabling or deleting a rule.

- **CUMULUS-5046**
- Support cross account SQS queues by extracting the owner account ID from the URL and using that in validation of queues.

### Fixed

- **CUMULUS-2281**
Expand Down
7 changes: 6 additions & 1 deletion packages/aws-client/src/SQS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export interface SQSMessage extends Message {
}

export const getQueueNameFromUrl = (queueUrl: string) => queueUrl.split('/').pop();
export const getQueueOwnerAccountFromUrl = (queueUrl: string) => queueUrl.split('/')[queueUrl.split('/').length - 2];

export const getQueueUrl = (sourceArn: string, queueName: string) => {
const arnParts = sourceArn.split(':');
Expand Down Expand Up @@ -184,12 +185,16 @@ export const deleteSQSMessage = (QueueUrl: string, ReceiptHandle: string) => {
*/
export const sqsQueueExists = async (queueUrl: string) => {
const QueueName = getQueueNameFromUrl(queueUrl);
const QueueAccount = getQueueOwnerAccountFromUrl(queueUrl);

if (!QueueName) {
throw new Error(`Unable to determine QueueName from ${queueUrl}`);
}

const command = new GetQueueUrlCommand({ QueueName });
const command = new GetQueueUrlCommand({
QueueName: QueueName,
QueueOwnerAWSAccountId: QueueAccount,
});

try {
await sqs().send(command);
Expand Down
9 changes: 9 additions & 0 deletions packages/aws-client/tests/test-SQS.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const { sqs } = require('../services');
const {
createQueue,
getQueueNameFromUrl,
getQueueOwnerAccountFromUrl,
parseSQSMessageBody,
sqsQueueExists,
sendSQSMessage,
Expand Down Expand Up @@ -78,6 +79,14 @@ test('getQueueNameFromUrl extracts queue name from a queue URL', (t) => {
t.is(extractedName, queueName);
});

test('getQueueNameFromUrl extracts queue owner account ID from a queue URL', (t) => {
const queueOwnerAccount = '123456789012';
const queueName = 'MyQueue';
const queueUrl = `https://sqs.us-east-2.amazonaws.com/${queueOwnerAccount}/${queueName}`;
const extractedOwnerAccount = getQueueOwnerAccountFromUrl(queueUrl);
t.is(extractedOwnerAccount, queueOwnerAccount);
});

test('sendSQSMessage logs errors', async (t) => {
const testConsole = new TestConsole();
const log = new Logger({ console: testConsole });
Expand Down
Loading