激活和管理 Lambda SnapStart - AWS Lambda

激活和管理 Lambda SnapStart

若要使用 SnapStart,请对新的或现有 Lambda 函数激活 SnapStart。然后,发布并调用一个函数版本。

激活 SnapStart(控制台)

为函数激活 SnapStart
  1. 打开 Lamba 控制台的函数页面

  2. 选择一个函数的名称。

  3. 选择 Configuration(配置),然后选择 General configuration(常规配置)。

  4. General configuration(常规配置)窗格上,选择 Edit(编辑)。

  5. Edit basic settings(编辑基本设置)页面上,为 SnapStart 选择 Published versions(已发布版本)。

  6. 选择保存

  7. 发布函数版本。Lambda 会初始化您的代码,创建初始化执行环境的快照,然后缓存快照以实现低延迟访问。

  8. 调用函数版本

激活 SnapStart(AWS CLI)

为现有函数激活 SnapStart
  1. 通过运行带有 --snap-start 选项的 update-function-configuration 命令来更新函数配置。

    aws lambda update-function-configuration \ --function-name my-function \ --snap-start ApplyOn=PublishedVersions
  2. 使用 publish-version 发布函数版本。

    aws lambda publish-version \ --function-name my-function
  3. 通过运行 get-function-configuration 命令并指定版本号,确认已为相应函数版本激活 SnapStart。以下示例指定版本 1。

    aws lambda get-function-configuration \ --function-name my-function:1

    如果其响应显示 OptimizationStatusOnState(状态)为 Active,则表示 SnapStart 已激活,并且已为指定函数版本生成快照。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. 通过运行 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
  1. 通过运行带有 --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
  2. 使用 publish-version 命令创建版本。

    aws lambda publish-version \ --function-name my-function
  3. 通过运行 get-function-configuration 命令并指定版本号,确认已为相应函数版本激活 SnapStart。以下示例指定版本 1。

    aws lambda get-function-configuration \ --function-name my-function:1

    如果其响应显示 OptimizationStatusOnState(状态)为 Active,则表示 SnapStart 已激活,并且已为指定函数版本生成快照。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. 通过运行 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
  1. 请执行以下操作之一:

  2. 使用 PublishVersion 操作发布函数版本。Lambda 会初始化您的代码,为已初始化的执行环境创建快照,然后缓存该快照以实现低延迟访问。

  3. 通过使用 GetFunctionConfiguration 操作确认已为该函数版本激活 SnapStart。指定版本号以确认已为该版本激活 SnapStart。如果其响应显示 OptimizationStatusOnState(状态)为 Active,则表示 SnapStart 已激活,并且已为指定函数版本生成快照。

    "SnapStart": { "ApplyOn": "PublishedVersions", "OptimizationStatus": "On" }, "State": "Active",
  4. 使用 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_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)。

注意

SnapStart 激活后,Java 运行时会自动使用容器凭证(AWS_CONTAINER_CREDENTIALS_FULL_URIAWS_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 会删除快照:

  • 您删除函数或函数版本。

  • 您在 14 天内未调用该函数版本。14 天未被调用后,函数版本将转换为非活动状态。如果您在 14 天后调用函数版本,Lambda 会返回 SnapStartNotReadyException 响应并开始初始化新的快照。函数版本达到活动状态之后再调用该函数。

Lambda 根据《一般数据保护条例》(GDPR)删除与已删除的快照相关的所有资源。