null

Serverless Function Cold Start Timeout Fix

Server & Cloud Intermediate 👁 7 views 📅 Jun 30, 2026

Your serverless function times out on first call after being idle. Here's why and how to fix it.

When This Happens

You deploy a serverless function — say, an AWS Lambda or Azure Function — and it works fine when you test it right away. But come back three hours later, trigger it again, and it times out. The first request after a period of no activity takes too long, and your client gets a 504 or a generic timeout error. I've seen this bite people with Node.js functions doing database connections or loading large models.

What's Going On

The cloud provider keeps your function's container running for a few minutes after each request, then kills it to save resources. A cold start happens when the container has to spin up again — loading the runtime, initializing your code, and running any global setup. If that setup takes more than the function's timeout setting, you get a timeout. The default timeout is often 3 seconds (AWS) or 5 seconds (Azure), which is way too short for a cold start that needs 10 seconds.

The Fix: Numbered Steps

  1. Increase the timeout setting — Go to your function's configuration and set timeout to 30 seconds minimum. For AWS Lambda, that's under Configuration > General configuration. For Azure Functions, it's in the Function App settings. Do this first. It buys you breathing room.
  2. Move heavy initialization outside the handler — Put database connections, model loading, or SSL context creation at the module level, not inside the handler function. The cloud provider only runs that code once per container cold start, not on every call. Example for Node.js:
    const db = require('db');
    const client = new db.Client();
    exports.handler = async (event) => {
    return await client.query('SELECT * FROM users');
    };
  3. Use a keep-warm mechanism — Set up a CloudWatch Events rule (AWS) or a timer-triggered function (Azure) that pings your function every 5 minutes. This keeps the container alive and avoids cold starts. Skip this if you're okay with occasional cold starts — it adds a tiny cost.
  4. Minimize dependencies and bundle size — Strip unused packages from your deployment package. A smaller zip loads faster. Use a bundler like Webpack or esbuild to tree-shake.
  5. Consider a provisioned concurrency — For AWS Lambda, you can set a minimum number of pre-warmed instances. It costs money but kills cold starts completely. Only do this if latency is critical — like an API endpoint serving users.

If It Still Fails

Check your function's logs in CloudWatch (AWS) or Application Insights (Azure). Look for the actual error — is it still a timeout, or something else? Maybe your database server is unreachable or your API key expired. Also verify that your handler is async and returns a promise. A common mistake is not returning the async call properly, which causes the function to hang.

Was this solution helpful?