AWS Lambda Configuration Analyzer

Read a function's configuration for the settings that decide its cost and whether it runs at all. Environment variable values are never shown or exported.

Paste below, or drop a file anywhere on this panel

Or drop a file anywhere on this panel. Nothing is uploaded: the analysis runs in this tab.

The answer appears here

Paste on the left and press Analyze. Nothing leaves this tab.

Examples

Real input you can load into the tool above. Each one shows a different thing going wrong, because that is what the tool is for.

Reserved concurrency of zero

Every invocation throttled, which is how you switch a function off

{
  "FunctionName": "api-handler",
  "Runtime": "nodejs22.x",
  "Timeout": 10,
  "MemorySize": 1024,
  "Architectures": ["arm64"],
  "ReservedConcurrentExecutions": 0,
  "TracingConfig": { "Mode": "Active" },
  "DeadLetterConfig": { "TargetArn": "arn:aws:sqs:eu-west-1:111122223333:dlq" }
}

A password in the environment

Returned in full by every read-only role

{
  "FunctionName": "api-handler",
  "Runtime": "nodejs22.x",
  "Timeout": 10,
  "MemorySize": 1024,
  "Architectures": ["arm64"],
  "Environment": { "Variables": { "DB_PASSWORD": "hunter2" } },
  "TracingConfig": { "Mode": "Active" },
  "DeadLetterConfig": { "TargetArn": "arn:aws:sqs:eu-west-1:111122223333:dlq" }
}

Attached to a VPC

No route to S3, Secrets Manager or anything else without help

{
  "FunctionName": "api-handler",
  "Runtime": "nodejs22.x",
  "Timeout": 10,
  "MemorySize": 1024,
  "Architectures": ["arm64"],
  "VpcConfig": { "SubnetIds": ["subnet-a", "subnet-b"], "SecurityGroupIds": ["sg-1"] },
  "TracingConfig": { "Mode": "Active" },
  "DeadLetterConfig": { "TargetArn": "arn:aws:sqs:eu-west-1:111122223333:dlq" }
}

Common mistakes

These are the ones that fail silently. The config is accepted, nothing raises an error, and the consequence arrives later.

  1. Setting memory as low as it will go to save money

    CPU scales with memory, so a CPU-bound function runs proportionally longer and can cost more at 128 MB than at 1024.

    Instead:Measure at several settings. Billing is memory multiplied by duration, so the two often cancel out and the latency does not.

  2. Setting reserved concurrency to zero

    It throttles every invocation. It is how you disable a function, and it looks like a default.

    Instead:Remove the setting entirely to use the shared pool.

  3. Putting a function in a VPC to reach a database, and losing every AWS API call

    A VPC-attached function has no route to the internet or to AWS endpoints without NAT or a VPC endpoint, and the symptom is a timeout rather than a network error.

    Instead:Use private subnets with a NAT gateway, or add VPC endpoints. Gateway endpoints for S3 and DynamoDB are free.

Memory is the only CPU dial Lambda has

CPU is allocated in proportion to memory, with one full vCPU at 1,769 MB. A function at 128 MB gets about a fourteenth of a core, which is why raising memory often makes a CPU-bound function cheaper rather than dearer.

Because billing is memory multiplied by duration

Double the memory and halve the duration and the cost is identical, with half the latency. The answer is frequently not the smallest setting, and it is only findable by measuring: AWS Lambda Power Tuning runs the sweep as a state machine.

A reserved concurrency of zero switches the function off

It is the documented way to disable one, and it is also what a script writes when a variable was empty. Every invocation is throttled. Removing the reservation is not the same as setting it to zero.

Reserved concurrency is taken out of the account pool

It guarantees this function that much and caps it there, and it removes that much from the pool every other function in the region draws on. AWS requires at least 100 to remain unreserved. It is not provisioned concurrency, which is the separate setting that keeps environments warm.

A function in a VPC reaches nothing outside it

That includes the AWS APIs. Calls to S3, Secrets Manager or Lambda itself hang until the timeout, with no error mentioning networking. A public subnet does not help, because a Lambda network interface has no public address. Private subnets with NAT, or VPC endpoints, are the two answers.

An asynchronous failure is retried twice and then discarded

With no dead letter queue and no on-failure destination, the event is gone and the only trace is a metric. A destination carries the response as well as the event, which a dead letter queue does not.

Environment variables are readable by every read-only role

lambda:GetFunctionConfiguration returns them in full, and the console shows them without a reveal step. A secret belongs in Secrets Manager with only its name in the environment, fetched outside the handler so it is cached.