This repo contains opinionated boilerplate code for building and bundling multiple lambdas from
a single src
directory, without needing to nest multiple build files. Esbuild is used to
minify and optimize the lambda bundle to reduce cold starts and optimize runtimes. There are also examples deploying
these lambdas via cdk
and serverless
src
├── common
│ └── logger.ts
├── products
| └── handler.ts
└── users
└── handler.ts
Each directory inside the src directory gets bundled as its own lambda, except the common directory. There are 2 lambda assets, a users.zip and a products.zip. The common directory is an exception which does not get bundled as its own asset. It has code that gets reused across the lambdas.
To build the lambdas inside this repository, you can just run
npm run build
This will create a dist
directory with the following structure
dist
├── products
│ ├── handler.js
│ ├── handler.js.map
│ └── products.zip
└── users
├── handler.js
├── handler.js.map
└── users.zip
This *.zip
files can be uploaded as lambda assets through cdk, serverless, cloud formation... to a
lambda with entrypoints handler.handler
To add a new lambda, a new folder under the src
directory needs to be created, with a file handler.ts
. This handler.ts
file needs to export a export const handler = () => {}
function which will be used as the lambda entry point. This file will
then get bundled by esbuild as a lambda asset.
Any code that needs to be shared across multiple lambdas can go into the common
folder. This folder is
unique in the sense that it is the older folder directly under src
that does not get builded
into its own lambda.
First run npm i
to install all required dependencies.
To deploy the example lambdas via cdk
run AWS_PROFILE=<profile> npm run cdk-deploy
.
To deploy via the serverless
framework run AWS_PROFILE=<profile> npm run serverless-deploy
.