1.0.2 • Published 7 months ago

serverless-sqs-events v1.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Serverless SQS Events

Event Manager to register and send typed events to SQS, with serverless handler function to automatically consume messages and trigger events.

Installation

yarn install serverless-sqs-events

Usage

Set up an event file to create the EventManager and register events.

// src/events/index.ts

import { EventManager } from 'serverless-sqs-events';

const queueUrl = 'https://sqs.us-east-1.amazonaws.com/123456789012/my-queue';
const region = 'us-east-1';

interface Events {
  logUsername: { username: string };
}

async function logUsername({ username }: { username: string }) {
  console.log(username);
}

const sqsEventManager = new EventManager<Events>(queueUrl, { region: region });

sqsEventManager.on('logUsername', (data: { username: string }) => logUsername(data));

export default sqsEventManager;

Whenever you need to emit an event, just import the eventManager & "send" the event.

// src/run.ts

import sqsEventManager from '@/events/index.js';

sqsEventManager.send('logUsername', { username: 'John Doe' });

Set up a handler function that is triggered whenever an event is sent to the queue.

// src/worker.ts

import sqsEventManager from '@/events/index.js';
import { SQSEvent } from 'serverless-sqs-events';

export const handler = (sqsEvent: SQSEvent) => sqsEventManager.consume(sqsEvent);

Optionally run everything on NodeJS EventEmitter.

const sqsEventManager = new EventManager<Events>(queueUrl, { region: region }, true);

OR let lambda decide

const sqsEventManager = new EventManager<Events>(WORKQUEUE_URL, { region: AWS_REGION }, !process.env.AWS_LAMBDA_FUNCTION_NAME);

Serverless example

// serverless.yml

provider:
  name: aws
  runtime: nodejs20.x
  region: eu-north-1
  stage: ${opt:stage, 'staging'}
  timeout: 20
  iamRoleStatements:
    - Effect: Allow
      Action:
        - sqs:SendMessage
        - sqs:DeleteMessageBatch
      Resource:
        - Fn::GetAtt: [MessagesQueue, Arn]

functions:
  worker:
    handler: src/worker.handler
    events:
      - sqs:
          arn:
            Fn::GetAtt:
              - workqueue
              - Arn

resources:
  Resources:
    workqueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: workqueue
        VisibilityTimeout: 120
1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago