Activating and managing Lambda SnapStart
To use SnapStart, activate SnapStart on a new or existing Lambda function. Then, publish and invoke a function version.
Topics
Activating SnapStart (console)
To activate SnapStart for a function
Open the Functions page
of the Lambda console. -
Choose the name of a function.
-
Choose Configuration, and then choose General configuration.
-
On the General configuration pane, choose Edit.
-
On the Edit basic settings page, for SnapStart, choose Published versions.
-
Choose Save.
-
Publish a function version. Lambda initializes your code, creates a snapshot of the initialized execution environment, and then caches the snapshot for low-latency access.
Activating SnapStart (AWS CLI)
To activate SnapStart for an existing function
-
Update the function configuration by running the update-function-configuration
command with the --snap-start option. aws lambda update-function-configuration \ --function-name my-function \ --snap-start ApplyOn=PublishedVersions
-
Publish a function version with the publish-version
command. aws lambda publish-version \ --function-name my-function
-
Confirm that SnapStart is activated for the function version by running the get-function-configuration
command and specifying the version number. The following example specifies version 1. aws lambda get-function-configuration \ --function-name my-function:
1
If the response shows that OptimizationStatus is
On
and State isActive
, then SnapStart is activated and a snapshot is available for the specified function version."SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
Invoke the function version by running the invoke
command and specifying the version. The following example invokes version 1. aws lambda invoke \ --cli-binary-format raw-in-base64-out \ --function-name my-function:
1
\ --payload '{ "name": "Bob" }' \ response.jsonThe cli-binary-format option is required if you're using AWS CLI version 2. To make this the default setting, run
aws configure set cli-binary-format raw-in-base64-out
. For more information, see AWS CLI supported global command line options in the AWS Command Line Interface User Guide for Version 2.
To activate SnapStart when you create a new function
-
Create a function by running the create-function
command with the --snap-start option. For --role, specify the Amazon Resource Name (ARN) of your execution role. aws lambda create-function \ --function-name
my-function
\ --runtime "java21
" \ --zip-file fileb://my-function.zip \ --handler my-function.handler \ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --snap-start ApplyOn=PublishedVersions -
Create a version with the publish-version
command. aws lambda publish-version \ --function-name
my-function
-
Confirm that SnapStart is activated for the function version by running the get-function-configuration
command and specifying the version number. The following example specifies version 1. aws lambda get-function-configuration \ --function-name my-function:
1
If the response shows that OptimizationStatus is
On
and State isActive
, then SnapStart is activated and a snapshot is available for the specified function version."SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
Invoke the function version by running the invoke
command and specifying the version. The following example invokes version 1. aws lambda invoke \ --cli-binary-format raw-in-base64-out \ --function-name my-function:
1
\ --payload '{ "name": "Bob" }' \ response.jsonThe cli-binary-format option is required if you're using AWS CLI version 2. To make this the default setting, run
aws configure set cli-binary-format raw-in-base64-out
. For more information, see AWS CLI supported global command line options in the AWS Command Line Interface User Guide for Version 2.
Activating SnapStart (API)
To activate SnapStart
-
Do one of the following:
-
Create a new function with SnapStart activated by using the CreateFunction API action with the SnapStart parameter.
-
Activate SnapStart for an existing function by using the UpdateFunctionConfiguration action with the SnapStart parameter.
-
-
Publish a function version with the PublishVersion action. Lambda initializes your code, creates a snapshot of the initialized execution environment, and then caches the snapshot for low-latency access.
-
Confirm that SnapStart is activated for the function version by using the GetFunctionConfiguration action. Specify a version number to confirm that SnapStart is activated for that version. If the response shows that OptimizationStatus is
On
and State isActive
, then SnapStart is activated and a snapshot is available for the specified function version."SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
Invoke the function version with the Invoke action.
Lambda SnapStart and function states
The following function states can occur when you use SnapStart. They can also occur when Lambda periodically recycles the execution environment and re-runs the initialization code for a function that's configured with SnapStart.
- Pending
-
Lambda is initializing your code and taking a snapshot of the initialized execution environment. Any invocations or other API actions that operate on the function version will fail.
- Active
-
Snapshot creation is complete and you can invoke the function. To use SnapStart, you must invoke the published function version, not the unpublished version ($LATEST).
- Inactive
-
The function version hasn't been invoked for 14 days. Lambda handles
Inactive
snapshots differently depending on which runtime you're using:-
Java – Lambda deletes snapshots after 14 days without an invocation. If you invoke the function version after 14 days, Lambda returns a
SnapStartNotReadyException
response and begins initializing a new snapshot. Wait until the function version reaches theActive
state, and then invoke it again. -
Python and .NET – Lambda does not delete snapshots after 14 days. Snapshots remain active as long as your function is
Active
.
The
Inactive
state can also occur as Lambda runs a periodic recycle of the execution environment. In this instance, if your function fails to initialize, the function can enter anInactive
state. -
- Failed
-
Lambda encountered an error when running the initialization code or creating the snapshot.
Updating a snapshot
Lambda creates a snapshot for each published function version. To update a snapshot, publish a new function version. Lambda automatically updates your snapshots with the latest runtime and security patches.
Using SnapStart with AWS SDKs
To make AWS SDK calls from your function, Lambda generates an ephemeral set of credentials by assuming your
function's execution role. These credentials are available as environment variables during your function's
invocation. You don't need to provide credentials for the SDK directly in code. By default, the credential
provider chain sequentially checks each place where you can set credentials and chooses the first
available—usually the environment variables (AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
,
and AWS_SESSION_TOKEN
).
Note
When SnapStart is activated, the Lambda runtime automatically uses the container credentials (AWS_CONTAINER_CREDENTIALS_FULL_URI
and AWS_CONTAINER_AUTHORIZATION_TOKEN
) instead of the access key environment variables. This prevents credentials from expiring before the function is restored.
Using SnapStart with AWS CloudFormation, AWS SAM, and AWS CDK
-
AWS CloudFormation: Declare the SnapStart entity in your template.
-
AWS Serverless Application Model (AWS SAM): Declare the SnapStart property in your template.
-
AWS Cloud Development Kit (AWS CDK): Use the SnapStartProperty type.
Deleting snapshots
Lambda deletes snapshots when:
-
You delete the function or function version.
-
Java runtimes only — You don't invoke the function version for 14 days. After 14 days without an invocation, the function version transitions to the Inactive state. If you invoke the function version after 14 days, Lambda returns a
SnapStartNotReadyException
response and begins initializing a new snapshot. Wait until the function version reaches the Active state, and then invoke it again.
Lambda removes all resources associated with deleted snapshots in compliance with the General Data Protection Regulation (GDPR).