Skip to content

Instantly share code, notes, and snippets.

@leegilmorecode
Created August 6, 2024 11:46
Show Gist options
  • Save leegilmorecode/0776b2f2a4809c58ee5b64f7fd053d71 to your computer and use it in GitHub Desktop.
Save leegilmorecode/0776b2f2a4809c58ee5b64f7fd053d71 to your computer and use it in GitHub Desktop.
An example of a typed state machine lambda handler with middy and powertools
import { Logger } from '@aws-lambda-powertools/logger';
import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware';
import { Metrics } from '@aws-lambda-powertools/metrics';
import { logMetrics } from '@aws-lambda-powertools/metrics/middleware';
import { Tracer } from '@aws-lambda-powertools/tracer';
import { captureLambdaHandler } from '@aws-lambda-powertools/tracer/middleware';
import middy from '@middy/core';
import { Handler } from 'aws-lambda';
interface StateMachineEvent {
someProperty: string;
anotherProperty: number;
}
interface CustomContext {
// add properties specific to your context
}
interface CustomResponse {
something: string;
secondThing: number;
}
const tracer = new Tracer();
const metrics = new Metrics();
const logger = new Logger();
const myHandler: Handler<StateMachineEvent, CustomResponse> = async (
event: StateMachineEvent,
context: CustomContext
): Promise<CustomResponse> => {
// TODO - code goes here for the handler
const { someProperty, anotherProperty } = event;
logger.info(
`someProperty: ${someProperty}, anotherProperty: ${anotherProperty}`
);
return {
something: 'something',
secondThing: 1,
};
};
export const handler = middy(myHandler)
.use(injectLambdaContext(logger))
.use(captureLambdaHandler(tracer))
.use(logMetrics(metrics));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment