Skip to content

Latest commit

 

History

History
77 lines (57 loc) · 2.65 KB

File metadata and controls

77 lines (57 loc) · 2.65 KB

@effect-aws/powertools-batch

Process batch of records in AWS Lambda using Effect. Inspired by @aws-lambda-powertools/batch package.

npm version npm downloads

Installation

npm install --save @effect-aws/powertools-batch

Usage

With Kinesis Data Streams:

import { LambdaHandler } from "@effect-aws/lambda";
import { BatchProcessor, EventType, processPartialResponse } from "@effect-aws/powertools-batch";
import type { KinesisStreamEvent, KinesisStreamRecord } from "aws-lambda";
import { Effect } from "effect";

const recordHandler = (record: KinesisStreamRecord) =>
  Effect.gen(function*() {
    return yield* Effect.logInfo(`Processing record: ${record.kinesis.data}`);
  });

const HandlerLive = BatchProcessor({ eventType: EventType.KinesisDataStreams });

export const handler = LambdaHandler.make({
  handler: (event: KinesisStreamEvent) => processPartialResponse(event, recordHandler),
  layer: HandlerLive,
});

With DynamoDB Streams:

import { LambdaHandler } from "@effect-aws/lambda";
import { BatchProcessor, EventType, processPartialResponse } from "@effect-aws/powertools-batch";
import type { DynamoDBStreamEvent, DynamoDBStreamRecord } from "aws-lambda";
import { Effect } from "effect";

const recordHandler = (record: DynamoDBStreamRecord) =>
  Effect.gen(function*() {
    return yield* Effect.logInfo(`Processing record: ${record.dynamodb.NewImage}`);
  });

const HandlerLive = BatchProcessor({ eventType: EventType.DynamoDBStreams });

export const handler = LambdaHandler.make({
  handler: (event: DynamoDBStreamEvent) => processPartialResponse(event, recordHandler),
  layer: HandlerLive,
});

With SQS:

import { LambdaHandler } from "@effect-aws/lambda";
import { BatchProcessor, EventType, processPartialResponse } from "@effect-aws/powertools-batch";
import type { SQSEvent, SQSRecord } from "aws-lambda";
import { Effect } from "effect";

const recordHandler = (record: SQSRecord) =>
  Effect.gen(function*() {
    return yield* Effect.logInfo(`Processing record: ${record.body}`);
  });

const HandlerLive = BatchProcessor({ eventType: EventType.SQS });

export const handler = LambdaHandler.make({
  handler: (event: SQSEvent) => processPartialResponse(event, recordHandler),
  layer: HandlerLive,
});