Merge pull request #17561 from philips-forks/sqs_events_endpoint

Allow endpoint to be configured for sqs event publisher
This commit is contained in:
Fredrik Adelöw
2023-05-08 15:39:16 +02:00
committed by GitHub
4 changed files with 15 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-events-backend-module-aws-sqs': minor
---
Allow endpoint configuration for sqs, enabling use of localstack for testing.
@@ -68,7 +68,11 @@ export class AwsSqsConsumingEventPublisher implements EventPublisher {
VisibilityTimeout: config.visibilityTimeout?.as('seconds'),
WaitTimeSeconds: config.pollingWaitTime.as('seconds'),
};
this.sqs = new SQSClient({ region: config.region });
this.sqs = new SQSClient({
region: config.region,
endpoint: config.endpoint,
});
this.queueUrl = config.queueUrl;
this.taskTimeoutSeconds = config.timeout.as('seconds');
@@ -79,6 +79,7 @@ describe('readConfig', () => {
url: 'https://fake1.queue.url',
visibilityTimeout: { minutes: 5 },
waitTime: { seconds: 10 },
endpoint: 'https://fake.endpoint.url',
},
timeout: { minutes: 5 },
waitTimeAfterEmptyReceive: { seconds: 30 },
@@ -97,6 +98,7 @@ describe('readConfig', () => {
expect(publisherConfigs[0].topic).toEqual('fake1');
expect(publisherConfigs[0].region).toEqual('eu-west-1');
expect(publisherConfigs[0].queueUrl).toEqual('https://fake1.queue.url');
expect(publisherConfigs[0].endpoint).toEqual('https://fake.endpoint.url');
expect(publisherConfigs[0].pollingWaitTime.as('seconds')).toBe(10);
expect(publisherConfigs[0].timeout.as('seconds')).toBe(300);
expect(publisherConfigs[0].waitTimeAfterEmptyReceive.as('seconds')).toBe(
@@ -31,6 +31,7 @@ export interface AwsSqsEventSourceConfig {
topic: string;
visibilityTimeout?: Duration;
waitTimeAfterEmptyReceive: Duration;
endpoint?: string;
}
// TODO(pjungermann): validation could be improved similar to `convertToHumanDuration` at @backstage/backend-tasks
@@ -74,6 +75,7 @@ export function readConfig(config: Config): AwsSqsEventSourceConfig[] {
}
const queueUrl = topicConfig.getString('queue.url');
const region = topicConfig.getString('queue.region');
const endpoint = topicConfig.getOptionalString('queue.endpoint');
const visibilityTimeout = readOptionalDuration(
topicConfig,
'queue.visibilityTimeout',
@@ -106,6 +108,7 @@ export function readConfig(config: Config): AwsSqsEventSourceConfig[] {
return {
pollingWaitTime,
queueUrl,
endpoint,
region,
timeout,
topic,