AWS Lambda Performance Tuning

Rate this content
Bookmark

Have you ever wonder how to get the best out of your Lambda functions?

If so, this talk will reveal the behind the scene one of the most popular serverless service and you will be exposed to a step by step guidance for optimizing your functions.

During this session, I will walk you through the mindset to reduce your Lambda functions execution time. In the example presented I was able to reduce the execution time by 95% for warm start and over 50% with cold starts improving also the transactions per seconds served with this API.

Luca Mezzalira
Luca Mezzalira
25 min
04 Apr, 2024

Comments

Sign in or register to post your comment.

Video Summary and Transcription

This Talk covers various optimization techniques for Lambda functions, including parameter fetching, code minification and bundling, observability with Power Tools and X-Ray, baseline testing with load testing tools, caching with Elastic Cache and Redis, and optimizing code size and memory usage. The importance of library choices, power tuning for cost and performance, leveraging subprocesses and sandboxes, and adjusting concurrency limits are also discussed. Overall, these techniques can significantly improve Lambda function performance.

1. Introduction to Lambda Optimization

Short description:

Hi, if you are here, probably you are a Node.js developer that is looking to optimize their Lambda functions. So today, I'm going to cover quite a few ideas on how you can optimize your workloads using Lambda functions. Let's start where you can optimize your Lambda function. There are two areas that you can heavily optimize your Lambda function. OK, so let's start with a solution. This is a classic thing that you can build when you are building an API with AWS and serverless.

Hi, if you are here, probably you are a Node.js developer that is looking to optimize their Lambda functions for the current workload that is running in AWS. Or maybe you're just curious and you want to understand how Lambda works and how you can squeeze all the best practices into the performance of your Lambda. Either case, I got you covered.

So today, I'm going to cover quite a few ideas on how you can optimize your workloads using Lambda functions. But moreover, I didn't want to provide just abstract ideas. I just want to show you how much you can really squeeze in. My name is Luca. I'm a serverless specialist. I work for AWS and I'm based in London. So without further ado, let's dive in, because we have a lot of ground to cover.

So first of all, we are going to cover where is the area that you can really optimize your Lambda functions. Later on, we start to see, let's say, a common API that you can build using Lambda. Moreover, we are going to look into what we can improve. And then finally, we are going to find the optimized solution where we really have the information that they're needed in order to really deeply optimize what you are building.

OK, so let's start where you can optimize your Lambda function. There are two areas that you can heavily optimize your Lambda function. This is like a sequence diagram that you can find in the AWS documentation, where as you can see, you can see that the lifecycle of a Lambda function when we create a sandbox. The two areas that are really heavy to and key to optimization are the initialization phase, where your Lambda function is basically creating a sandbox. And then we download the code at that stage. We have an initialization phase where you can load, for instance, specific things like, I don't know, the keys for a database or some parameters from parameter store service or something like that. Otherwise, you can optimize when it comes into the execution part in both areas. We will see some optimization during this talk.

OK, so let's start with a solution. This is a classic thing that you can build when you are building an API with AWS and serverless. So as you can see here, we have an API gateway exposing our API. We have a Lambda function that relies on a bunch of things like CloudWatch, system manager parameter store for retrieving the parameters needed to load. We are using Aurora serverless in this case, and therefore we are using an RDS proxy that takes care about handling the connection pool for us and also the secrets. So you don't have to handle this, your Lambda code, so it's just a utility or a service that you can use in conjunction with your Postgres database in this case. So moreover, one thing I want to specify is very often I've seen customers using Lambda functions with one of the two architectures that are available, x86 in this case. We will see later how we can optimize that.

2. Optimizing Lambda Initialization and Code Bundling

Short description:

One optimization suggestion is to fetch your parameters at the initialization phase to reduce the chattiness of your Lambda function. We recommend minifying your code using ESBuild and bundling it with CDK. Additionally, bundle the AWS SDK with your code for faster execution. Power tools is an open source library that handles observability in Lambda functions. We recommend using MIDI for initialization and leveraging power tools with X-Ray for performance analysis.

So one suggestion that we usually recommend is using or fetching your parameters at the initialization phase. So then you have store for inside the sandbox and therefore you don't have to fetch for every single request. That is a good optimization because basically you reduce the chattiness of your Lambda function towards our service, other services, and it couldn't be that it could be parameter, it could be secrets, it could be some configurations you need to find at the beginning that will leave alongside the sandbox. Remember, the sandbox is not there living forever. We reclaim the sandbox after a while and therefore you are going to have a new sandbox when it's needed. So that amount of time that you are storing in memory, these things, is not going to be ours and therefore you are safe to assume that your secrets or your parameter will be refetched after a while.

The other thing is we usually recommend to minify your code by default when you're using CDK or using AWS SAM. We provide the bundler ESBuild and you can bundle your code without any problem. We even extract for you a bunch of parameters that you can tweak in order to use ESBuild with CDK. Obviously you can even bundle by yourself using, I don't know, Terraform or whatever. So first you bundle and then you use Terraform for deploying. So that's another option. But in this case, you have ESBuild that is available for you.

The other thing is in this case, I'm using ESM because I want to use top level await that is basically the capability that you have seen before for loading a parameter before you can leveraging or basically calling the handler of your function where basically your business logic lies. Last but not least, we have a bunch of modules that we have to, let's say, externalize and not bundle like all the power tools that we are going to see in a second what they are. Last but not least, quick trick, if you're using AWS SDK like we are doing in this example, always bundle it together with your code because in that case, when you are bundling, it's way faster reading from a memory than reading from disk. We offer also for the Node.js runtime the possibility to use the one that is available in the sandbox when we are building. But we usually recommend to bundle the libraries of the SDK together alongside with your business logic so it's faster to execute. So the other thing that is pretty cool is power tools. Power tools is an open source library we use for, let's say, taking care about the observability of your Lambda functions. In this case, we handle like metrics, logs, tracer and tracings. And the one thing that we usually recommend is using MIDI. There's another open source library for initializing all this. As you can see, the snippet code is there. MIDI is a really great library. If you're not familiar with that, I highly recommend that when you use Lambda functions. The other thing is power tools is pretty cool. As I said, you can use it for, for instance, in conjunction with X-Ray to create segments. If you want to understand how fast a query is or how fast an algorithm that you have written inside your Lambda function, you can do that easily with this snippet code. Or otherwise, you can use them.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

A Guide to React Rendering Behavior
React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
Speeding Up Your React App With Less JavaScript
React Summit 2023React Summit 2023
32 min
Speeding Up Your React App With Less JavaScript
Top Content
Too much JavaScript is getting you down? New frameworks promising no JavaScript look interesting, but you have an existing React application to maintain. What if Qwik React is your answer for faster applications startup and better user experience? Qwik React allows you to easily turn your React application into a collection of islands, which can be SSRed and delayed hydrated, and in some instances, hydration skipped altogether. And all of this in an incremental way without a rewrite.
React Concurrency, Explained
React Summit 2023React Summit 2023
23 min
React Concurrency, Explained
Top Content
React 18! Concurrent features! You might’ve already tried the new APIs like useTransition, or you might’ve just heard of them. But do you know how React 18 achieves the performance wins it brings with itself? In this talk, let’s peek under the hood of React 18’s performance features: - How React 18 lowers the time your page stays frozen (aka TBT) - What exactly happens in the main thread when you run useTransition() - What’s the catch with the improvements (there’s no free cake!), and why Vue.js and Preact straight refused to ship anything similar
The Future of Performance Tooling
JSNation 2022JSNation 2022
21 min
The Future of Performance Tooling
Top Content
Our understanding of performance & user-experience has heavily evolved over the years. Web Developer Tooling needs to similarly evolve to make sure it is user-centric, actionable and contextual where modern experiences are concerned. In this talk, Addy will walk you through Chrome and others have been thinking about this problem and what updates they've been making to performance tools to lower the friction for building great experiences on the web.
Optimizing HTML5 Games: 10 Years of Learnings
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Optimizing HTML5 Games: 10 Years of Learnings
Top Content
The open source PlayCanvas game engine is built specifically for the browser, incorporating 10 years of learnings about optimization. In this talk, you will discover the secret sauce that enables PlayCanvas to generate games with lightning fast load times and rock solid frame rates.
Power Fixing React Performance Woes
React Advanced Conference 2023React Advanced Conference 2023
22 min
Power Fixing React Performance Woes
Top Content
Next.js and other wrapping React frameworks provide great power in building larger applications. But with great power comes great performance responsibility - and if you don’t pay attention, it’s easy to add multiple seconds of loading penalty on all of your pages. Eek! Let’s walk through a case study of how a few hours of performance debugging improved both load and parse times for the Centered app by several hundred percent each. We’ll learn not just why those performance problems happen, but how to diagnose and fix them. Hooray, performance! ⚡️

Workshops on related topic

React Performance Debugging Masterclass
React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan Akulov
Ivan Akulov
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
Building WebApps That Light Up the Internet with QwikCity
JSNation 2023JSNation 2023
170 min
Building WebApps That Light Up the Internet with QwikCity
Featured WorkshopFree
Miško Hevery
Miško Hevery
Building instant-on web applications at scale have been elusive. Real-world sites need tracking, analytics, and complex user interfaces and interactions. We always start with the best intentions but end up with a less-than-ideal site.
QwikCity is a new meta-framework that allows you to build large-scale applications with constant startup-up performance. We will look at how to build a QwikCity application and what makes it unique. The workshop will show you how to set up a QwikCitp project. How routing works with layout. The demo application will fetch data and present it to the user in an editable form. And finally, how one can use authentication. All of the basic parts for any large-scale applications.
Along the way, we will also look at what makes Qwik unique, and how resumability enables constant startup performance no matter the application complexity.
Next.js 13: Data Fetching Strategies
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Data Fetching Strategies
Top Content
WorkshopFree
Alice De Mauro
Alice De Mauro
- Introduction- Prerequisites for the workshop- Fetching strategies: fundamentals- Fetching strategies – hands-on: fetch API, cache (static VS dynamic), revalidate, suspense (parallel data fetching)- Test your build and serve it on Vercel- Future: Server components VS Client components- Workshop easter egg (unrelated to the topic, calling out accessibility)- Wrapping up
React Performance Debugging
React Advanced Conference 2023React Advanced Conference 2023
148 min
React Performance Debugging
Workshop
Ivan Akulov
Ivan Akulov
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
Master JavaScript Patterns
JSNation 2024JSNation 2024
145 min
Master JavaScript Patterns
Workshop
Adrian Hajdin
Adrian Hajdin
During this workshop, participants will review the essential JavaScript patterns that every developer should know. Through hands-on exercises, real-world examples, and interactive discussions, attendees will deepen their understanding of best practices for organizing code, solving common challenges, and designing scalable architectures. By the end of the workshop, participants will gain newfound confidence in their ability to write high-quality JavaScript code that stands the test of time.
Points Covered:
1. Introduction to JavaScript Patterns2. Foundational Patterns3. Object Creation Patterns4. Behavioral Patterns5. Architectural Patterns6. Hands-On Exercises and Case Studies
How It Will Help Developers:
- Gain a deep understanding of JavaScript patterns and their applications in real-world scenarios- Learn best practices for organizing code, solving common challenges, and designing scalable architectures- Enhance problem-solving skills and code readability- Improve collaboration and communication within development teams- Accelerate career growth and opportunities for advancement in the software industry
High-performance Next.js
React Summit 2022React Summit 2022
50 min
High-performance Next.js
Workshop
Michele Riva
Michele Riva
Next.js is a compelling framework that makes many tasks effortless by providing many out-of-the-box solutions. But as soon as our app needs to scale, it is essential to maintain high performance without compromising maintenance and server costs. In this workshop, we will see how to analyze Next.js performances, resources usage, how to scale it, and how to make the right decisions while writing the application architecture.