Deploying Web Function code from Amazon S3
You provide Lambda Web Function code as a .zip deployment package in an Amazon S3 bucket. This
is the only way to supply code for a Web Function. When you create a Web Function or revision, specify the object in the
s3Object field, which is nested under codeConfig inside the
request's buildConfig. In s3Object, include the bucket, key,
and an optional versionId. Lambda references
your code directly from your bucket. Because Lambda pins each revision to a specific
object version, your deployments are reproducible. You can reuse a single deployment
package across accounts and AWS Regions.
Topics
Prerequisites
Before you deploy Web Function code from Amazon S3, make sure that your bucket and deployment package meet the following requirements:
- S3 versioning
-
The bucket must have S3 versioning enabled. Lambda uses object versions to track which version of your code a revision uses.
- Version ID
-
The
versionIdparameter is optional in the request. If you omit it, Lambda uses the latest version of the object at creation time. Either way, Lambda pins the revision to a specific object version. - Maximum deployment package size
-
512 MB (unzipped).
- Entry file
-
The deployment package must contain your application's entry file. By default, the runtime loads
index.jsat the root of the package. To use a different entry file, set theAWS_LAMBDA_NODEJS_ENTRYPOINTenvironment variable on the revision to the file's path relative to the package root. After loading the entry file, the runtime waits for your HTTP server to start listening at the host and port from theAWS_LAMBDA_HTTP_ENDPOINTenvironment variable. If the runtime cannot resolve the entry file, or the server never starts listening, initialization fails and requests to the endpoint fail.Lambda does not verify that your server starts listening when it creates or updates an endpoint to use the revision. The revision and endpoint can still show
Activein these cases. After each deployment, send a test request and check your application logs. - Bucket location
-
The bucket can be in a different AWS account and in a different AWS Region from the Web Function. The bucket must be in the same AWS partition as the Web Function. The bucket can't be in an opt-in Region (a Region that is not enabled by default). If either condition isn't met, Lambda rejects the request. Cross-Region object retrieval incurs additional Amazon S3 data transfer costs. For more information about pricing, see Amazon S3 pricing
.
Required permissions
To deploy Web Function code from Amazon S3, you must configure permissions for both the calling identity and the Lambda service principal.
Caller permissions
To create the Web Function or revision, your IAM identity needs the following permissions on the S3 object:
-
s3:GetObject -
s3:GetObjectVersion
For cross-account buckets, the bucket policy must also grant the calling identity access to the object.
Bucket policy for Lambda
The bucket policy must grant the Lambda service principal
(lambda.amazonaws.com) s3:GetObject and
s3:GetObjectVersion permissions. Scope the policy with an
aws:SourceArn condition that matches the revision ARN pattern.
Use ArnLike with a wildcard for the revision ID, because Lambda
generates the revision ID when you create the revision.
If the object is encrypted with an AWS KMS key (SSE-KMS), the key policy must
also allow lambda.amazonaws.com to call kms:Decrypt on that key.
Lambda checks the service principal's access when you create the revision and
rejects the request if access is missing.
The following example bucket policy grants Lambda access to read your deployment packages for any revision of the specified Web Function.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLambdaWebFunctionCodeAccess", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::my-bucket/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/revision/*" } } } ] }
To limit access to the key prefix that holds your deployment packages, change
the Resource value to
arn:aws:s3:::,
where my-bucket/my-prefix/*my-bucket is your bucket name and
my-prefix is the key prefix.
Keep the /* at the end of the prefix. Don't change the
revision/* wildcard in aws:SourceArn.
Creating a Web Function with code from Amazon S3
You specify your S3 deployment package in the codeConfig section
of buildConfig. The following procedures show how to create a Web
Function and how to create a new revision using the AWS CLI.
To create a Web Function with code from Amazon S3 (AWS CLI)
-
Run the following command to create a Web Function that references your .zip deployment package in Amazon S3.
aws lambda-web create-web-function \ --function-namemy-web-app\ --revision-config '{ "buildConfig": { "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }, "serviceConfig": { "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" } }' \ --endpoint-config '{ "endpointName": "my-endpoint", "endpointType": "HomeRegion", "authType": "ApplicationManaged" }'When you omit
versionId, Lambda uses the latest version of the object at creation time.
To create a new revision with a specific object version (AWS CLI)
-
Run the following command to create a new revision that uses a specific version of your deployment package.
aws lambda-web create-web-function-revision \ --function-namemy-web-app\ --build-config '{ "codeConfig": { "s3Object": { "bucket": "my-bucket", "key": "my-app.zip", "versionId": "abc123def456" } }, "runtimeConfig": { "runtime": "nodejs24.x" } }' \ --service-config '{ "executionRoleArn": "arn:aws:iam::111122223333:role/my-web-function-role" }'By specifying
versionId, you pin the revision to an exact version of the object rather than the latest version.
Object lifecycle
Do not delete S3 objects or remove Lambda access for active revisions
Lambda references your code from your Amazon S3 bucket. If you delete the S3
object that a revision uses, or the specific object version that the revision
uses, the revision moves to the Failed state when Lambda next
verifies access to the object, and then can no longer serve traffic. Keep the object versions for all revisions that you are still
using.
Removing the Lambda service principal's access to the bucket has the same
effect. If you modify the bucket policy to deny or remove
s3:GetObject and s3:GetObjectVersion permissions for
lambda.amazonaws.com, existing revisions that reference objects in
that bucket move to the Failed state. Maintain both the objects and
the Lambda service principal's read access for as long as any revision references
those objects.
The Failed state is permanent. Restoring the deleted object or
the bucket permissions does not return a revision to the Active
state. To recover, create a new revision that references an available object
version, and then update your endpoints' revision weights to route traffic to
it. For deployment patterns, see Deployment patterns.
Lambda does not automatically shift traffic away from a Failed
revision. Requests that an endpoint routes to a Failed revision are
rejected with HTTP status code 409 and a lambda-web-error-type response
header of Platform.RevisionNotActive.
If the endpoint weights traffic across multiple revisions, only the share of
requests routed to the Failed revision is affected; requests routed
to healthy revisions are served normally. To stop the failures, update the
endpoint's revision weights to remove the Failed revision.
Overwriting the object with a new upload creates a new S3 version. This does not
affect existing revisions: when you create a revision, Lambda resolves and pins the
exact object version, even when you omit versionId. However, if you
delete an old object version that a revision references, that revision moves to the
Failed state. Uploading a replacement object does not help, because the
replacement is a new version with a different version ID.
Multi-Region deployments
For Web Functions with MultiRegion or PerRegion endpoints, Lambda reads your
source object from the bucket that you specify, in whichever Region the bucket is in. Lambda then replicates the prepared code
artifact that it derives from that object to
the other Regions. You do not need to copy your deployment package to buckets in
other Regions. For more information about what Lambda replicates,
see
What Lambda replicates.