A tool to run web applications on AWS Lambda
AWS Lambda Web Adapter allows developers to build web apps (http api) with familiar frameworks (e.g. Express.js, Next.js, Flask, SpringBoot, ASP.NET and Laravel, anything speaks HTTP 1.1/1.0) and run it on AWS Lambda. The same docker image can run on AWS Lambda, Amazon EC2, AWS Fargate, and local computers.

Add one line to your Dockerfile:
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:1.0.0 /lambda-adapter /opt/extensions/lambda-adapter
Pre-compiled multi-arch images (x86_64 and arm64) are available at public.ecr.aws/awsguru/aws-lambda-adapter. Non-AWS base images may be used since the Runtime Interface Client ships with the Lambda Web Adapter.
arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:27arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerArm64:27AWS_LAMBDA_EXEC_WRAPPER to /opt/bootstraprun.sh👉 Zip Packages guide (includes AWS China region ARNs and Windows caveats)
The readiness check port/path and traffic port can be configured using environment variables. These environment variables can be defined either within docker file or as Lambda function configuration.
| Environment Variable | Description | Default |
|---|---|---|
| AWS_LWA_PORT | traffic port (falls back to PORT) |
"8080" |
| AWS_LWA_READINESS_CHECK_PORT | readiness check port | AWS_LWA_PORT |
| AWS_LWA_READINESS_CHECK_PATH | readiness check path | "/" |
| AWS_LWA_READINESS_CHECK_PROTOCOL | readiness check protocol: "http" or "tcp" | "http" |
| AWS_LWA_READINESS_CHECK_HEALTHY_STATUS | HTTP status codes considered healthy (e.g., "200-399") | "100-499" |
| AWS_LWA_ASYNC_INIT | enable asynchronous initialization for long initialization functions | "false" |
| AWS_LWA_REMOVE_BASE_PATH | the base path to be removed from request path | None |
| AWS_LWA_ENABLE_COMPRESSION | enable gzip/br compression for response body (buffered mode only) | "false" |
| AWS_LWA_INVOKE_MODE | Lambda function invoke mode: "buffered" or "response_stream" | "buffered" |
| AWS_LWA_PASS_THROUGH_PATH | the path for receiving event payloads from non-http triggers | "/events" |
| AWS_LWA_AUTHORIZATION_SOURCE | a header name to be replaced to Authorization |
None |
| AWS_LWA_ERROR_STATUS_CODES | HTTP status codes that will cause Lambda invocations to fail (e.g. "500,502-504") | None |
| AWS_LWA_LAMBDA_RUNTIME_API_PROXY | overwrites AWS_LAMBDA_RUNTIME_API to allow proxying request |
None |
Deprecation Notice: The following non-namespaced environment variables are deprecated and will be removed in version 2.0:
HOST,READINESS_CHECK_PORT,READINESS_CHECK_PATH,READINESS_CHECK_PROTOCOL,REMOVE_BASE_PATH,ASYNC_INIT. Please migrate to theAWS_LWA_prefixed versions. Note:PORTis not deprecated and remains a supported fallback forAWS_LWA_PORT.Additionally,
AWS_LWA_READINESS_CHECK_MIN_UNHEALTHY_STATUShas been removed in 1.0. UseAWS_LWA_READINESS_CHECK_HEALTHY_STATUSinstead.
👉 Examples organized by language
This project was inspired by several community projects.
All environment variables now use the AWS_LWA_ prefix. The old non-prefixed names still work but are deprecated and will be removed in version 2.0.
| Old (Deprecated) | New |
|---|---|
READINESS_CHECK_PORT |
AWS_LWA_READINESS_CHECK_PORT |
READINESS_CHECK_PATH |
AWS_LWA_READINESS_CHECK_PATH |
READINESS_CHECK_PROTOCOL |
AWS_LWA_READINESS_CHECK_PROTOCOL |
REMOVE_BASE_PATH |
AWS_LWA_REMOVE_BASE_PATH |
ASYNC_INIT |
AWS_LWA_ASYNC_INIT |
Note:
PORTis not deprecated and remains a supported fallback forAWS_LWA_PORT.
AWS_LWA_READINESS_CHECK_MIN_UNHEALTHY_STATUS has been removed. Use AWS_LWA_READINESS_CHECK_HEALTHY_STATUS instead, which accepts comma-separated codes and ranges:
# Old
AWS_LWA_READINESS_CHECK_MIN_UNHEALTHY_STATUS=400
# New (equivalent)
AWS_LWA_READINESS_CHECK_HEALTHY_STATUS=100-399
Several projects also provide similar capabilities as language specific packages/frameworks.
See SECURITY for vulnerability reporting and CONTRIBUTING for more information.
This project is licensed under the Apache-2.0 License.
$ claude mcp add aws-lambda-web-adapter \
-- python -m otcore.mcp_server <graph>