激活和管理 Lambda SnapStart
若要使用 SnapStart,请对新的或现有 Lambda 函数激活 SnapStart。然后,发布并调用一个函数版本。
主题
激活 SnapStart(控制台)
为函数激活 SnapStart
激活 SnapStart(AWS CLI)
为现有函数激活 SnapStart
-
通过运行带有 --snap-start 选项的 update-function-configuration
命令来更新函数配置。 aws lambda update-function-configuration \ --function-name my-function \ --snap-start ApplyOn=PublishedVersions
-
使用 publish-version
发布函数版本。 aws lambda publish-version \ --function-name my-function
-
通过运行 get-function-configuration
命令并指定版本号,确认已为相应函数版本激活 SnapStart。以下示例指定版本 1。 aws lambda get-function-configuration \ --function-name my-function:
1
如果其响应显示 OptimizationStatus 为
On
且 State(状态)为Active
,则表示 SnapStart 已激活,并且已为指定函数版本生成快照。"SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
通过运行 invoke
命令并指定版本来调用相应的函数版本。以下示例调用版本 1。 aws lambda invoke \ --cli-binary-format raw-in-base64-out \ --function-name my-function:
1
\ --payload '{ "name": "Bob" }' \ response.json如果使用 cli-binary-format 版本 2,则 AWS CLI 选项是必需的。要将其设为默认设置,请运行
aws configure set cli-binary-format raw-in-base64-out
。有关更多信息,请参阅版本 2 的 AWS Command Line Interface 用户指南中的 AWS CLI 支持的全局命令行选项。
创建新的函数时激活 SnapStart
-
通过运行带有 --snap-start 选项的 create-function
命令来创建函数。对于 --role,指定您的执行角色的 Amazon 资源名称(ARN)。 aws lambda create-function \ --function-name my-function \ --runtime "java21" \ --zip-file fileb://my-function.zip \ --handler my-function.handler \ --role
arn:aws:iam::111122223333:role/lambda-ex
\ --snap-start ApplyOn=PublishedVersions -
使用 publish-version
命令创建版本。 aws lambda publish-version \ --function-name my-function
-
通过运行 get-function-configuration
命令并指定版本号,确认已为相应函数版本激活 SnapStart。以下示例指定版本 1。 aws lambda get-function-configuration \ --function-name my-function:
1
如果其响应显示 OptimizationStatus 为
On
且 State(状态)为Active
,则表示 SnapStart 已激活,并且已为指定函数版本生成快照。"SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
通过运行 invoke
命令并指定版本来调用相应的函数版本。以下示例调用版本 1。 aws lambda invoke \ --cli-binary-format raw-in-base64-out \ --function-name my-function:
1
\ --payload '{ "name": "Bob" }' \ response.json如果使用 cli-binary-format 版本 2,则 AWS CLI 选项是必需的。要将其设为默认设置,请运行
aws configure set cli-binary-format raw-in-base64-out
。有关更多信息,请参阅版本 2 的 AWS Command Line Interface 用户指南中的 AWS CLI 支持的全局命令行选项。
激活 SnapStart(API)
激活 SnapStart
-
请执行以下操作之一:
-
通过使用 CreateFunction API 操作并指定 SnapStart 参数,创建已激活 SnapStart 的新函数。
-
通过使用 UpdateFunctionConfiguration 操作并指定 SnapStart 参数,为现有函数激活 SnapStart。
-
-
使用 PublishVersion 操作发布函数版本。Lambda 会初始化您的代码,为已初始化的执行环境创建快照,然后缓存该快照以实现低延迟访问。
-
通过使用 GetFunctionConfiguration 操作确认已为该函数版本激活 SnapStart。指定版本号以确认已为该版本激活 SnapStart。如果其响应显示 OptimizationStatus 为
On
且 State(状态)为Active
,则表示 SnapStart 已激活,并且已为指定函数版本生成快照。"SnapStart": { "ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},"State": "Active"
, -
使用 invoke 操作调用相应函数版本。
Lambda SnapStart 和函数状态
使用 SnapStart 时可能会出现以下函数状态。Lambda 定期回收执行环境并为使用 SnapStart 配置的函数重新运行初始化代码时,也可能出现这些状态。
-
Pending
– Lambda 正在初始化您的代码并为已初始化的执行环境创建快照。在该函数版本上运行的任何调用或其他 API 操作都将失败。 -
Active
– 快照创建已完成,您可以调用此函数。若要使用 SnapStart,您必须调用已发布的函数版本,而不是未发布的版本($LATEST)。 -
Inactive
– 函数版本已 14 天未被调用。当函数版本变为Inactive
时,Lambda 会删除快照。如果您在 14 天后调用函数版本,Lambda 会返回SnapStartNotReadyException
响应并开始初始化新的快照。函数版本达到Active
状态之后再调用该函数。Inactive
状态也可能在 Lambda 对执行环境进行定期回收时出现。在这种情况下,如果您的函数无法初始化,则该函数可能进入Inactive
状态。 -
Failed
– Lambda 在运行初始化代码或创建快照时出现错误。
更新快照
Lambda 为每个已发布的函数版本创建快照。若要更新快照,请发布新的函数版本。Lambda 使用最新的运行时和安全补丁自动更新您的快照。
将 SnapStart 与 AWS SDK for Java 结合使用
为了从您的函数调用 AWS 开发工具包,Lambda 通过代入函数的执行角色来生成一组临时凭证。这些凭证在函数调用期间可用作环境变量。您无需直接在代码中为开发工具包提供凭证。默认情况下,凭证提供程序链会按顺序检查每个可以设置凭证的位置,然后选择第一个可用位置,通常是环境变量(AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和 AWS_SESSION_TOKEN
)。
注意
SnapStart 激活后,Java 运行时会自动使用容器凭证(AWS_CONTAINER_CREDENTIALS_FULL_URI
和 AWS_CONTAINER_AUTHORIZATION_TOKEN
),而非访问密钥环境变量。这样可以防止凭证在函数还原之前过期。
将 SnapStart 与 AWS CloudFormation、AWS SAM 和 AWS CDK 结合使用
-
AWS CloudFormation:在您的模板中声明 SnapStart 实体。
-
AWS Serverless Application Model (AWS SAM):在您的模板中声明 SnapStart 属性。
-
AWS Cloud Development Kit (AWS CDK):使用 SnapStartProperty 类型。
删除快照
在以下情况下 Lambda 会删除快照:
Lambda 根据《一般数据保护条例》(GDPR)删除与已删除的快照相关的所有资源。