Serverless Blog
all
guides & tutorials
user stories
operations & observability
engineering culture
news

Keeping Functions Warm - How To Fix AWS Lambda Cold Start Issues

written by  
  Gonçalo Neves

Cold starts in AWS Lambda got you down? You've come to the right place.

In this post, I'll briefly cover what cold starts are, and then show you some ways to reduce your cold start times. Read on!

First: what is a cold start? ❄️

When running a serverless function, it will stay active (a.k.a., hot) as long as you're running it. Your container stays alive, ready and waiting for execution.

After a period of inactivity, your cloud provider will drop the container, and your function will become inactive, (a.k.a., cold).

A cold start happens when you execute an inactive function. The delay comes from your cloud provider provisioning your selected runtime container and then running your function.

In a nutshell, this process will considerably increase your execution time.

Understanding AWS cold starts

When using AWS Lambda, provisioning of your function's container can take >5 seconds. That makes it impossible to guarantee <1 second responses to events such as API Gateway, DynamoDB, CloudWatch, S3, etc.

This analysis of AWS Lambda + private VPC container initialization times concluded:

  • Run-times and memory size don't affect container initialization time
  • Lambda within a private VPC increases container initialization time
  • Containers are not reused after ~15 minutes of inactivity

How to make them warm ♨

Ready to combat those cold starts? Here's how you do it.

Find out: where are the bottlenecks, and when?

To fix cold start problems, knowing your service performance bottleneck is essential. From small to big services, it's common to find one function that slows down your service logic because it doesn't run often enough to keep its container alive.

For example, one of my own cold functions was a reset email service during off-peak hours. From UTC+1 23:00 to UTC+1 06:00 (London), it took more than double the amount of time to get a reset password email.

Then: use the cold starts plug-in for the Serverless Framework

I got sick of cold starts on my Lambdas at @Fidel, so I wrote a plugin called serverless-plugin-warmup that allows you to keep all your Lambdas hot. (YES.)

WarmUP does this by creating a scheduled event Lambda that invokes all the Lambdas you select in a configured time interval (default: 5 minutes) or a specific time, forcing your containers to stay alive.

Installing the WarmUP plugin

Install via npm in the root of your Serverless service:

npm install serverless-plugin-warmup --save-dev

Add the plugin to the plugins array in your Serverless serverless.yml:

plugins:
  - serverless-plugin-warmup

Add warmup: true property to all functions you want to be warm:

functions:
  hello:
    warmup: true

In order for WarmUP to be able to invoke lambdas, you'll also need to set the following Policy Statement in iamRoleStatements:

iamRoleStatements:
  - Effect: 'Allow'
    Action:
      - 'lambda:InvokeFunction'
    Resource: "*"

Add an early callback call when the event source is serverless-plugin-warmup. You should do this early exit before running your code logic, it will save your execution duration and cost.

module.exports.lambdaToWarm = function(event, context, callback) {
  /** Immediate response for WarmUP plugin */
  if (event.source === 'serverless-plugin-warmup') {
    console.log('WarmUP - Lambda is warm!')
    return callback(null, 'Lambda is warm!')
  }

  ... add lambda logic after
}

Perfect! Now all of your Lambdas are hot, and you have less to worry about.

You can find more info here about options, event source and estimated cost.

Additional provider support?

I only work with AWS, so adding support for other providers is a welcome contribution!

For more on how to contribute to the Serverless Framework open source project, check this post:

About Gonçalo Neves

Gonçalo Neves is the lead developer at Fidel Limited.

 - 21.04.17

Enhanced Analytics & Monitoring for your Serverless Apps with the IOpipe Serverless Plugin - Now in Beta

Activate analytics and alerts quickly by automatically wrapping your Serverless functions with IOpipe.

written by Corey Light

engineering-culture - 17.09.18

Keeping the culture in remote culture

When your team team is distibuted or remote, building a company culture takes a different kind of effort. Here's how we keep culture strong at Serverless.

written by Thom Crowe

Join 12,000+ other serverless devs & keep up to speed on the latest serverless trends.

Join 12,000+ other serverless devs & keep up to speed on the latest serverless trends.

Made with love in San Francisco + Atlanta, Austria, Germany, Pakistan, Poland, Nebraska & Thailand

Serverless, Inc. © 2018

Join our newsletter and get the latest news about Serverless products and happenings. #noSpamWePromise