A detailed investigation flagged on Hacker News on April 7, 2025, reveals that AWS Lambda Web Functions continue to bill for provisioned memory for roughly seven minutes after the last HTTP request is processed. This idle billing behavior, undocumented in AWS's pricing pages, can silently inflate costs for applications with sporadic traffic.
Service: AWS Lambda Web Functions | Idle Billing Window: ~7 minutes | Pricing Model: Memory-provisioned + request duration
How Lambda Web Functions Manage State
Lambda Web Functions are a specific configuration of AWS Lambda designed for HTTP workloads. Unlike traditional Lambda functions invoked per event, a Web Function container stays warm to handle multiple sequential requests. AWS manages the lifecycle of these containers, spinning them down after a period of inactivity to save resources.
The core finding is that billing does not stop when the container becomes idle. The Easel.sh analysis shows AWS continues to charge for the full provisioned memory of the function for an average of 410 seconds after the last request, even though no user code is executing. This is a function of the service's internal scaling-in mechanism.
The Numbers: Measuring the Idle Tax
The investigation involved deploying a test function and measuring the delta between the last request timestamp and the last billing timestamp in AWS CloudWatch. Over multiple tests, the idle billing period was consistent.
| Test Cycle | Idle Billing Duration | Provisioned Memory |
|---|---|---|
| 1 | 408 seconds | 1024 MB |
| 2 | 412 seconds | 1024 MB |
| 3 | 409 seconds | 1024 MB |
For a function with 1 GB of memory, this adds approximately $0.0000002789 per second of idle time. Over 7 minutes, the idle tax per scaling cycle is about $0.0001169. This cost compounds with the frequency of scaling events.
Bottom line: You pay for 100% of your provisioned memory for nearly 7 minutes after your app stops receiving traffic, every time a container scales in.
How to Test and Monitor Your Own Functions
You can verify this behavior for your own workloads using a combination of AWS's native tools and open-source scripts.
- Enable Detailed Logging: Ensure your Lambda function's execution logs are sent to AWS CloudWatch.
- Analyze Billing Logs: Scrape the
REPORTlines in CloudWatch, which contain theBilled Duration. The test code from the original article automates this. - Cross-Reference with Traffic: Use AWS Application Load Balancer logs or API Gateway logs to find the timestamp of your last request.
- Calculate the Delta: The difference between the last request time and the last billing timestamp reveals your idle window.
For ongoing monitoring, consider setting up a CloudWatch Dashboard to track function duration metrics against request counts.
Pros, Cons, and Practical Trade-Offs
The Advantages:
- Simplified Scaling: No need to manage autoscaling groups or container orchestration.
- Sub-100ms Cold Starts: Web Functions maintain warmer containers, leading to more consistent performance than traditional Lambda for HTTP.
- AWS Ecosystem Integration: Seamless integration with other AWS services like IAM, VPC, and X-Ray.
The Cost Drawbacks:
- The 7-Minute Idle Tax: The primary con, making it inefficient for workloads with highly unpredictable, bursty traffic patterns.
- Opague Scaling Logic: Developers cannot configure or even view the scale-in cooldown period, unlike services like EC2 Auto Scaling.
- Potential for Cost Surprises: Without active monitoring, this behavior can lead to unexpectedly high bills for low-traffic prototypes or internal tools.
Alternatives and Direct Comparisons
For HTTP container workloads, Lambda Web Functions compete directly with other serverless container platforms. The key differentiator is the handling of idle resources.
| Feature | AWS Lambda Web Functions | Google Cloud Run | Azure Container Apps |
|---|---|---|---|
| Billing Granularity | 1ms after request | 100ms after request | 1ms after request |
| Idle Resource Billing | ~7 min (memory) | ~15 min (CPU+Memory) | Configurable (0-30 min) |
| Min Scale to Zero | Yes | Yes | Yes |
| Scale-In Control | No (managed by AWS) | No (managed by GCP) | Yes (user-configurable) |
Google Cloud Run has a longer idle period but bills for both CPU and memory. Azure Container Apps offers the most control, allowing developers to set a scaleInDelay between 0 and 30 minutes, providing direct cost/performance trade-off management.
Who Should (and Shouldn't) Use Lambda Web Functions
Use Lambda Web Functions if:
- You have consistent, steady traffic that keeps containers active.
- Your application requires deep integration with the AWS ecosystem and sub-100ms latency.
- Development speed and operational simplicity outweigh marginal cost optimizations.
Avoid Lambda Web Functions if:
- Your traffic is highly spiky or unpredictable (e.g., internal tools, demo environments, low-traffic APIs).
- You are cost-optimizing a prototype or low-volume production service. The idle tax will dominate your bill.
- You require transparent and configurable scaling behavior. Consider Azure Container Apps or even provisioned concurrency on standard Lambda for more predictable billing.
"How to Mitigate the Cost Impact"
If you're committed to Lambda Web Functions, two strategies can reduce the idle tax:
The Bottom Line on Serverless Transparency
AWS Lambda Web Functions offer a compelling developer experience but embed a significant, non-configurable cost for idle capacity. This analysis forces a reevaluation of "scale-to-zero" as a pure cost-saving feature; the reality is a trade-off between latency and a multi-minute billing tail. For teams building on AWS, the decision now requires factoring in traffic patterns and explicitly monitoring for this behavior, as cloud cost opacity remains a persistent engineering challenge.
Top comments (0)