npm package: @matheusm-luz/serverless-offline-sqs
Description: This Serverless-offline plugin emulates AWS λ and SQS queue on your local machine. To do so, it listens SQS queue and invokes your handlers.
Latest version: 1.0.0

# serverless-offline-sqs (Forked Version)

This Serverless-offline plugin emulates AWS λ and SQS queues on your local machine. It listens to SQS queues and invokes your handlers accordingly.

## Features

- [Serverless Webpack](https://github.com/serverless-heaven/serverless-webpack/) support.
- SQS configurations: batchsize.
- **New in this fork:** Automatically starts all SQS queues, even those not associated with a handler.

## Installation

First, add `serverless-offline-sqs` to your project:

```sh
npm install serverless-offline-sqs
```

Then, inside your project's `serverless.yml` file, add the following entry to the plugins section before `serverless-offline` (and after `serverless-webpack` if present):

```yml
plugins:
  - serverless-webpack
  - serverless-offline-sqs
  - serverless-offline
```

[See example](../../tests/serverless-plugins-integration/README.md#sqs)

## How It Works

To emulate AWS SQS queues locally, an actual queue system must be running. One such implementation is [ElasticMQ](https://github.com/adamw/elasticmq), a standalone in-memory queue system that provides an AWS SQS-compatible interface. It can run independently or inside a Docker container.

[ElasticMQ](https://github.com/adamw/elasticmq) should be initialized using the [AWS CLI](https://aws.amazon.com/cli/), either inside another container or on your local machine. Once initialized, the plugin can be configured.


## Configuration

### Functions

Function configuration follows the [Serverless documentation](https://serverless.com/framework/docs/providers/aws/events/sqs/).

```yml
functions:
  mySQSHandler:
    handler: handler.compute
    events:
      - sqs: arn:aws:sqs:region:XXXXXX:MyFirstQueue
      - sqs:
          arn: arn:aws:sqs:region:XXXXXX:MySecondQueue
      - sqs:
          queueName: MyThirdQueue
          arn:
            Fn::GetAtt:
              - MyThirdQueue
              - Arn
      - sqs:
          arn:
            Fn::GetAtt:
              - MyFourthQueue
              - Arn
      - sqs:
          arn:
            Fn::GetAtt:
              - MyFifthQueue
              - Arn
resources:
  Resources:
    MyFourthQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: MyFourthQueue

    MyFifthQueue:
      Type: AWS::SQS::Queue
      Properties:
        QueueName: MyFifthQueue.fifo
        FifoQueue: true
        ContentBasedDeduplication: true
```

### SQS Configuration

[`AWS.SQS` client configuration](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SQS.html#constructor-property) is handled using a `custom: serverless-offline-sqs` section in `serverless.yml`.

To use [ElasticMQ](https://github.com/adamw/elasticmq), configure it as follows:

```yml
custom:
  serverless-offline-sqs:
    autoCreate: true
    apiVersion: '2012-11-05'
    endpoint: http://0.0.0.0:9324
    region: eu-west-1
    accessKeyId: root
    secretAccessKey: root
    skipCacheInvalidation: false
```

### Usage

To enable this feature, simply set:

```yml
custom:
  serverless-offline-sqs:
    autoStartAllQueues: true
```

This ensures all defined queues in the `resources` section are available locally when running `serverless offline`.

---

For more details, refer to the original [serverless-offline-sqs repository](https://github.com/CoorpAcademy/serverless-offline-sqs) and [ElasticMQ documentation](https://github.com/adamw/elasticmq).