https://github.com/inqnuam/serverless-aws-lambda-ddb-streams
DynamoDB Local Streams plugin for serverless-aws-lambda
https://github.com/inqnuam/serverless-aws-lambda-ddb-streams
aws-lambda dynamodb lambda serverless
Last synced: about 2 months ago
JSON representation
DynamoDB Local Streams plugin for serverless-aws-lambda
- Host: GitHub
- URL: https://github.com/inqnuam/serverless-aws-lambda-ddb-streams
- Owner: Inqnuam
- Created: 2023-01-29T15:07:24.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-11-20T14:41:16.000Z (over 1 year ago)
- Last Synced: 2025-09-30T15:51:29.725Z (6 months ago)
- Topics: aws-lambda, dynamodb, lambda, serverless
- Language: TypeScript
- Homepage:
- Size: 289 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Description
> DynamoDB local Streams for serverless-aws-lambda
## Installation
```bash
yarn add -D serverless-aws-lambda-ddb-streams
# or
npm install -D serverless-aws-lambda-ddb-streams
```
## Usage
use [serverless-aws-lambda's](https://github.com/Inqnuam/serverless-aws-lambda) defineConfig to import this plugin
```js
// config.js
import { defineConfig } from "serverless-aws-lambda/defineConfig";
import { dynamoStream } from "serverless-aws-lambda-ddb-streams";
export default defineConfig({
plugins: [dynamoStream(dynamoDbClientConfig, pluginOptions)],
});
```
### DynamoDB Client Config
[Configuration](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-dynamodb/Interface/DynamoDBClientConfig/) used to connect to DynamoDB Tables.
By default the plugin uses following configuration:
```json
{
"endpoint": "http://127.0.0.1:8000",
"region": "ddblocal",
"credentials": { "accessKeyId": "test", "secretAccessKey": "test" }
}
```
If after connecting to the table, StreamEnabled is `false`, the plugin will try to enable it.
See [docker-compose.yml](resources/docker-compose.yml) to bootstrap local instance of DynamoDB using Docker.
### Plugin Options
- waitBeforeInit:
An error will be thrown if after "waitBeforeInit" (in seconds) the plugin was not able to connect to the Table. default 25.
- watchInterval:
interval (in seconds) to check for new streamable records. default 2
### Event Source Mapping
```yaml
# serverless.yml
service: sls-project
frameworkVersion: "3"
plugins:
- serverless-aws-lambda
custom:
serverless-aws-lambda:
configPath: ./config.default
provider:
name: aws
runtime: nodejs20.x
region: eu-west-1
functions:
myAwsomeLambda:
handler: src/handlers/lambda.default
events:
- stream:
arn: arn:aws:dynamodb:region:XXXXXX:table/Banana/stream/1970-01-01T00:00:00.000
batchSize: 3
```
### Supported stream declarations
```yaml
- stream:
arn: arn:aws:dynamodb:region:XXXXXX:table/Banana/stream/1970-01-01T00:00:00.000
```
```yaml
- stream:
type: dynamodb
arn:
Fn::GetAtt: [MyDynamoDbTable, StreamArn]
```
```yaml
- stream:
arn:
Fn::ImportValue: MyExportedDynamoDbStreamArnId
```
```yaml
- stream:
arn:
Ref: MyDynamoDbTableStreamArn
```
```yaml
- stream:
type: dynamodb
arn: !GetAtt dynamoTable.StreamArn
```
```yaml
functions:
myAwsomeLambda:
handler: src/handlers/lambda.default
events:
- stream:
arn: arn:aws:dynamodb:region:XXXXXX:table/Banana/stream/1970-01-01T00:00:00.000
batchSize: 3
filterPatterns:
- eventName: [INSERT]
- dynamodb:
NewImage:
OrderId:
N:
- numeric: [">", 4]
```
### Supported configurations
✅ supported
🌕 planned
❌ not planned
- ✅ batchSize
- ✅ batchWindow
- ✅ bisectBatchOnFunctionError
- ✅ destinations (requires [AWS Local SNS](https://github.com/Inqnuam/serverless-aws-lambda/blob/main/resources/sns.md) and/or [AWS Local SQS](https://github.com/Inqnuam/serverless-aws-lambda/blob/main/resources/sqs.md))
- ✅ enabled
- ✅ filterPatterns
- ✅ functionResponseType
- ✅ maximumRecordAgeInSeconds
- ✅ maximumRetryAttempts
- ❌ startingPosition (uses always `TRIM_HORIZON`)
- DynamoDB Local dont works well with `LATEST` when multiple Tables are created.
- As a workaround recreate a new table before starting the app.
- ❌ startingPositionTimestamp
- ✅ tumblingWindowInSeconds
- ❌ parallelizationFactor