Wrappers to make writing lambda handlers easier
npm i @code-like-a-carpenter/lambda-handlers
This package provides various factories for Lambda events. Each factory, at a minimum, adds telemetry to your handler, but also simplifies the interface. For example, the REST handler takes care of JSON serialization and deserialization while the SQS handler lets you think about individual messages rather than the entire event.
All factories force you to prove async
callbacks rather than nodebacks.
First, use openapi-typescript
to generate typescript types from the api.yml
that you're passing to CloudFormation.
npx openapi-typescript api.yml --output __generated__/api.ts
Then, use handleRestEvent
to define your lambda handler.
import {handleRestEvent} from '@code-like-a-carpenter/lambda-handlers';
import {operations} from './__generated__/api';
export const handler = handleRestEvent<operations['myOperation']>(
async (event, {context, logger}) => ({
statusCode: 204,
})
);
event
is a transformed version of the raw Lambda event. The query string and
header objects have been replaced with URLSearchParams
and Headers
,
respectively. For content-type: application/json
, the body has been parsed
into a type-safe object.
context
is the Lambda context object.
logger
is a Logger
from @code-like-a-carpenter/logger
scoped to this
request.
When you configure your CloudFormation stack, make sure your SQS handler includes
FunctionResponseTypes:
- BatchRequestFailures
handleSqsEvent
will take care of return the correct payload if any message
cannot be processed, but it can only do so if the resource has been configured
to expect such a response.
import {handleSqsEvent} from '@code-like-a-carpenter/lambda-handlers';
export const handler = handleSqsEvent(async (message, {context, logger}) => {
logger.info('Received message', {message});
});
message
is a single record from the original SQS event.
context
is the Lambda context object.
logger
is a Logger
from @code-like-a-carpenter/logger
scoped to this
message.
Please see contributing guidelines at the project homepage.
MIT © Ian Remmel 2023 until at least now