Archive

The Dulin Report

Browsable archive from the WordPress export.

Results (25)

Strategic activity mapping for software architects May 25, 2025 Book review: Clojure for the Brave and True Oct 2, 2022 All developers should know UNIX Jun 30, 2022 Automation and coding tools for pet projects on the Apple hardware May 28, 2022 Tools of the craft Dec 18, 2021 Node.js and Lambda deployment size restrictions Mar 1, 2021 What programming language to use for a brand new project? Feb 18, 2020 Returning security back to the user Feb 2, 2019 A conservative version of Facebook? Aug 30, 2018 Facebook is the new Microsoft Apr 14, 2018 Quick guide to Internet privacy for families Apr 7, 2018 Copyright in the 21st century or how "IT Gurus of Atlanta" plagiarized my and other's articles Mar 21, 2017 Windows 10: a confession from an iOS traitor Jan 4, 2017 Don't trust your cloud service until you've read the terms Sep 27, 2016 Why I switched to Android and Google Project Fi and why should you Aug 28, 2016 In search for the mythical neutrality among top-tier public cloud providers Jun 18, 2016 Files and folders: apps vs documents May 26, 2016 IT departments must transform in the face of the cloud revolution Nov 9, 2015 Top Ten Differences Between ActiveMQ and Amazon SQS Sep 5, 2015 What Every College Computer Science Freshman Should Know Aug 14, 2015 The longer the chain of responsibility the less likely there is anyone in the hierarchy who can actually accept it Jun 7, 2015 My Brief Affair With Android Apr 25, 2015 Why I am Tempted to Replace Cassandra With DynamoDB Nov 13, 2014 Software Engineering and Domain Area Expertise Nov 7, 2014 Eminence Grise: A trusted advisor May 13, 2009

Node.js and Lambda deployment size restrictions

March 1, 2021

AWS Lambda has a 250 Megabyte limit on the size of the deployable asset. It is a generous limit that is easy to exceed with Node-based Lambda functions.

The underlying issue with Node is that JavaScript is an interpreted language. Third-party modules included as part of the code are all plain-text and verbose.

JavaScript is dynamically linked. You might use one function from, say, AWS SDK, but you need to include the entire AWS SDK module in your package.json. AWS SDK alone can be around 50 Megabytes in size.

By its nature, Node is a suboptimal platform for Lambda. It is slow, bloated, takes a long time to load, and a disproportionally long time to execute. Yet, JavaScript has a religious following and is, sadly, a reality we have to endure.

Here are the top few reasons for a Node-based Lambda to exceed the 250 Megabyte limit and remedy it.

Development dependencies


The first step should be to check whether some dependencies that are included in the final package are needed for development but not needed at runtime.

For example:

  • Typescript compiler,

  • Unit-testing frameworks (i.e. mocha),

  • Linter


Separate production dependencies from development dependencies in your package.json file using dependencies vs. devDependencies and make sure to use npm install —prod-only when building your deployable zip file.

Unnecessary modules


If excluding development dependencies from the production package didn’t help, check whether you are actually using all of the modules you listed in package.json.

Copy/pasting dependencies from other projects without thinking happens to the best of us, though we potentially end up with unnecessary modules included.

Multiple versions of the same module


I ran into this issue at work where a Lambda function used a few modules that we maintain within the team.

The Lambda function was using version X of AWS SDK for its internal workings.

But each dependency was also using a slightly different minor version of AWS SDK.

As a result, the Lambda function shipped with multiple different versions of AWS SDK. The final package size well exceeded the 250 Megabyte limit five-fold.

Using npm ls, I found all of the duplicated nested dependencies on AWS SDK. Since we control all of the modules at issue, I moved AWS SDK to dev dependencies and listed it under peer dependencies section, such that in the end only one version of AWS SDK was installed in Lambda.

Some last thoughts


I doubt that I covered all possible scenarios here. I would not use Node.js at all for a new application. It’s a horrible language and an awful platform. Given Node.js' popularity, though, we have to work with what we have — and that includes finding ways to keep the deployable size small, so it fits within the AWS Lambda limits.