Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bus-sqs is throwing an error when asserting queues #45

Closed
valdestron opened this issue Dec 2, 2019 · 1 comment
Closed

bus-sqs is throwing an error when asserting queues #45

valdestron opened this issue Dec 2, 2019 · 1 comment

Comments

@valdestron
Copy link

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
Copy link
Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant