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

Yan Cui

I help clients go faster for less using serverless technologies.

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:

(if webpack is not your thing then also check out the newer serverless-esbuild plugin which can achieve the same thing)

  • 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.

Whenever you’re ready, here are 3 ways I can help you:

  1. Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop to level up your serverless skills quickly.
  2. Do you want to know how to test serverless architectures with a fast dev & test loop? Check out my latest course, Testing Serverless Architectures and learn the smart way to test serverless.
  3. I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.