DEV Community

Yan Cui
Yan Cui

Posted on Originally published at theburningmonk.com on

AWS Lambda: how to share code between functions in a monorepo

A while back, a client asked me “how can I share business logic between services in a Node.js monorepo?”. The TL;DR of it is:

  • Encapsulate the shared business logic into modules, and put them in a separate folder.

  • In the Lambda handler functions, reference the shared modules using relative paths.

  • Use webpack to resolve and bundle them into the deployment package. If you use the Serverless framework, then check out the serverless-webpack plugin. For example:

  • Deploy every service on every commit. You can do this with a simple script like the following.

To see how everything fits together, check out this demo repo. It has CI/CD set up already through drone.io and you can see a recent deployment of all the services in the monorepo here.

But wait! How do I choose between having a monorepo vs a repo per service?

Don’t worry, I’ve got you covered for that too ;-) You can read about my thoughts on the two approaches here.

Check out theburningmonk.com for more of my articles.

Top comments (2)

Collapse
 
x0s3 profile image
x0s3 •

(imho) I would have used lerna independent packages, easier to manage dependencies and packages.

Collapse
 
theburningmonk profile image
Yan Cui •

How would you use Lerna to deploy the serverless projects? (I've only use Lerna for managing monorepo for NPM packages)