bus-sqs is throwing an error when asserting queues
valdestron opened this issue · 1 comments
valdestron commented
Hi, I can not see how you are updating an aws sdk client with provided configuration, but seems that current aws-sdk sqs client fails to create queue with provided configuration.
//config.ts
export const sqsConfiguration: SqsTransportConfiguration = {
queueName,
queueUrl: `https://sqs.${env.AWS_SQS_REGION}.amazonaws.com/${env.AWS_ACCOUNT_ID}/${queueName}`,
queueArn: `arn:aws:sqs:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${queueName}`,
deadLetterQueueName: `${queueName}-DLQ`,
deadLetterQueueArn: `arn:aws:sqs:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${queueName}-DLQ`,
resolveTopicName: () => `${env.SERVICE_NAME}-${env.SERVICE_INSTANCE_ID}`,
resolveTopicArn: (topicName: string) =>
`arn:aws:sns:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${topicName}`,
queuePolicy: `
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Effect": "Allow",
"Action": "SQS:*",
"Resource": [
"arn:aws:sqs:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${queueName}"
]
}
]
}
`,
};
//index.ts
import 'reflect-metadata';
import { Container } from 'inversify';
import { LoggerModule } from '@node-ts/logger-core';
import { BUS_SYMBOLS, BusModule, ApplicationBootstrap } from '@node-ts/bus-core';
import { WorkflowRegistry, BusWorkflowModule, BUS_WORKFLOW_SYMBOLS } from '@node-ts/bus-workflow';
import { BUS_SQS_SYMBOLS, BusSqsModule } from '@node-ts/bus-sqs';
import logger from './utils/logger';
import { sqsConfiguration } from './config/aws';
const container = new Container();
container.load(new LoggerModule());
container.load(new BusModule());
container.load(new BusWorkflowModule());
container.load(new BusSqsModule());
container.bind(BUS_SQS_SYMBOLS.SqsConfiguration).toConstantValue(sqsConfiguration);
const bootstrap = async () => {
const workflows = container.get<WorkflowRegistry>(BUS_WORKFLOW_SYMBOLS.WorkflowRegistry);
await workflows.initializeWorkflows();
const appBootstrap = container.get<ApplicationBootstrap>(BUS_SYMBOLS.ApplicationBootstrap);
await appBootstrap.initialize(container);
logger.info('Workflows service is listening...');
};
bootstrap().catch(logger.error);
error
qsTransport: SQS queue could not be created { queueName: 'workflows-development-vmworkflowsid-DLQ',
error:
{ ConfigError: Missing region in config
at Request.VALIDATE_REGION (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/event_listeners.js:92:45)
at Request.callListeners (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at callNextListener (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at /Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/event_listeners.js:86:9
at finish (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/config.js:372:7)
at /Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/config.js:390:9
at SharedIniFileCredentials.get (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/credentials.js:127:7)
at getAsyncCredentials (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/config.js:384:24)
at Config.getCredentials (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/config.js:404:9)
at Request.VALIDATE_CREDENTIALS (/Users/valdasmazrimas/Projects/connectus.we/node_modules/@node-ts/bus-sqs/node_modules/aws-sdk/lib/event_listeners.js:81:26)
message: 'Missing region in config',
code: 'ConfigError',
time: 2019-12-02T13:01:13.355Z } }
valdestron commented
Solved,
Seems that:
const queuePrefix = env.SERVICE_NAME;
const queueRoot = !env.SERVICE_PRODUCITON ? 'development' : '';
const queueSuffix = env.SERVICE_INSTANCE_ID;
const queueName = `${queuePrefix}-${queueRoot}-${queueSuffix}`;
process.env.AWS_REGION = env.AWS_SQS_REGION; //add these to process.env
process.env.AWS_ACCOUNT_ID = env.AWS_ACCOUNT_ID; //add these to process.env
export const sqsConfiguration: SqsTransportConfiguration = {
queueName,
queueUrl: `https://sqs.${env.AWS_SQS_REGION}.amazonaws.com/${env.AWS_ACCOUNT_ID}/${queueName}`,
queueArn: `arn:aws:sqs:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${queueName}`,
deadLetterQueueName: `${queueName}-DLQ`,
deadLetterQueueArn: `arn:aws:sqs:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${queueName}-DLQ`,
resolveTopicName: () => `${env.SERVICE_NAME}-${env.SERVICE_INSTANCE_ID}`,
resolveTopicArn: (topicName: string) =>
`arn:aws:sns:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${topicName}`,
queuePolicy: `
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Effect": "Allow",
"Action": "SQS:*",
"Resource": [
"arn:aws:sqs:${env.AWS_SQS_REGION}:${env.AWS_ACCOUNT_ID}:${queueName}"
]
}
]
}
`,
};
Anyways, I think we should be able to provided aws configuration to the container module instead of adding those to env variables.