Process batch of records in AWS Lambda using Effect. Inspired by @aws-lambda-powertools/batch package.
npm install --save @effect-aws/powertools-batchWith 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,
});