AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

AWS Lambda 版本控制简介

本节介绍如何创建 Lambda 函数并从该函数发布版本。它还介绍了如何在您拥有一个或多个已发布版本时更新函数代码和配置信息。此外,本节还包括有关如何删除函数版本(特定版本或整个 Lambda 函数(包含其所有版本和关联别名))的信息。

创建 Lambda 函数($LATEST 版本)

当您创建 Lambda 函数时,仅有一个版本。它是 $LATEST 版本。

您可使用此函数的 Amazon 资源名称 (ARN) 来引用它。有两个与该初始版本关联的 ARN:

  • 限定的 ARN - 具有版本后缀的函数 ARN。

    Copy
    arn:aws:lambda:aws-region:acct-id:function:helloworld:$LATEST
  • 非限定的 ARN - 不具有版本后缀的函数 ARN。

    您可以在所有相关的操作中使用此 ARN,但无法使用它来创建别名。有关更多信息,请参阅 AWS Lambda 别名简介

    非限定的 ARN 具有其自己的资源策略。

    Copy
    arn:aws:lambda:aws-region:acct-id:function:helloworld

注意

除非您选择发布版本,否则 $LATEST 版本是您拥有的唯一 Lambda 函数版本。您可以在事件源映射中使用限定的或非限定的 ARN 来调用此 $LATEST 版本。

以下是 CreateFunction API 调用的示例响应:

Copy
{ "CodeSize": 287, "Description": "test function." "FunctionArn": "arn:aws:lambda:aws-region:acct-id:function:helloworld", "FunctionName": "helloworld", "Handler": "helloworld.handler", "LastModified": "2015-07-16T00:34:31.322+0000", "MemorySize": 128, "Role": "arn:aws:iam::acct-id:role/lambda_basic_execution", "Runtime": "nodejs6.10", "Timeout": 3, "CodeSHA256": "OjRFuuHKizEE8tHFIMsI+iHR6BPAfJ5S0rW31Mh6jKg=", "Version": "$LATEST" }

有关更多信息,请参阅 CreateFunction

在此响应中,AWS Lambda 返回了新建函数的非限定的 ARN 及其版本 $LATEST。此响应还显示 Version 为 $LATESTCodeSha256 是您上传的部署程序包的校验和。

发布 Lambda 函数版本

当您发布版本时,AWS Lambda 在 $LATEST 版本中创建了 Lambda 函数代码的快照副本(和配置)。已发布的版本是不可变的。也就是说,您无法更改代码或配置信息。新版本具有一个唯一 ARN,它包含如下所示的版本号后缀:

您可以使用以下任一方法发布版本:

  • 显式发布版本 - 使用 PublishVersion API 显式发布版本。有关更多信息,请参阅 PublishVersion。此操作使用 $LATEST 版本中的代码和配置创建新版本。

  • 创建或更新 Lambda 函数时发布版本 - 使用 CreateFunctionUpdateFunctionCode 请求也可通过在请求中添加可选 publish 参数来发布版本:

    • CreateFunction 请求中指定 publish 参数来创建新的 Lambda 函数($LATEST 版本),然后通过创建快照并将其指定为版本 1 来立即发布此函数。有关 CreateFunction 的更多信息,请参阅 CreateFunction

    • UpdateFunctionCode 请求中指定 publish 参数以更新 $LATEST 版本中的代码,然后从 $LATEST 发布版本。有关 UpdateFunctionCode 的更多信息,请参阅 UpdateFunctionCode

    如果您在创建 Lambda 函数时指定 publish 参数,则 AWS Lambda 在响应中返回的函数配置信息将显示新发布版本的版本号,如下所示(在本示例中,版本为 1):

    Copy
    { "CodeSize": 287, "Description": "test function." "FunctionArn": "arn:aws:lambda:aws-region:acct-id:function:helloworld", "FunctionName": "helloworld", "Handler": "helloworld.handler", "LastModified": "2015-07-16T00:34:31.322+0000", "MemorySize": 128, "Role": "arn:aws:iam::acct-id:role/lambda_basic_execution", "Runtime": "nodejs6.10", "Timeout": 3, "CodeSHA256": "OjRFuuHKizEE8tHFIMsI+iHR6BPAfJ5S0rW31Mh6jKg=", "Version": "1" }

注意

仅当代码尚未发布或者代码与 $LATEST 版本对比发生了更改时,Lambda 才会发布新版本。如果没有任何更改,将返回 $LATEST 发布的版本。

建议您在创建 Lambda 函数或更新 Lambda 函数代码时发布版本,尤其是在多个开发人员参与同一个 Lambda 函数的开发时。可以在请求中使用 publish 参数来执行此操作。当有多个开发人员处理一个项目时,开发人员 A 可以创建 Lambda 函数($LATEST 版本),并且在开发人员 A 发布版本之前,开发人员 B 可更新与 $LATEST 版本关联的代码(部署程序包)。在此情况下,您会丢失开发人员 A 上传的原始代码。当两个开发人员都添加 publish 参数时,这将防止出现所述的竞用情况。

注意

发布的版本是不可变的。也就是说,您无法更改与版本关联的代码或配置信息。

Lambda 函数的每个版本均为具有 Amazon 资源名称 (ARN) 的唯一资源。以下示例显示了 helloworld Lambda 函数的版本号 1 的 ARN:

Copy
arn:aws:lambda:aws-region:acct-id:function:helloworld:1

注意

这是限定的 ARN,其中版本号为后缀。发布的版本只能有一个限定的 ARN。

您可以发布多个版本。当您发布版本时,AWS Lambda 会复制 $LATEST 版本(代码和配置信息)以创建新版本。在发布其他版本时,AWS Lambda 将分配单调递增的序列号以进行版本控制,即使该函数已删除并重新创建也是如此。版本号绝不会重复使用(即使对于已删除并重新创建的函数也是如此),这是为了让版本的使用者确信版本的可执行文件绝不会更改(除非版本已删除)。如果您要重复使用某个限定词,请对您的版本使用别名。别名可以删除并且可使用同一名称重新创建。

更新 Lambda 函数代码和配置

AWS Lambda 在 $LATEST 版本中保留最新的函数代码。在更新函数代码时,AWS Lambda 会替换 Lambda 函数的 $LATEST 版本中的代码。有关更多信息,请参阅UpdateFunctionCode

发布的版本是不可变的。您无法更新与发布的版本关联的代码或配置信息。

对于在更新 Lambda 函数代码时发布新版本,您有以下选择:

  • 在相同的更新代码请求中发布版本 - 使用 UpdateFunctionCode API(推荐)。

  • 先更新代码,然后显式发布版本 - 使用 PublishVersion API。

您可以更新 Lambda 函数的 $LATEST 版本的代码和配置信息(例如,描述、内存大小和执行超时)。但是,发布的版本是不可变的。也就是说,您无法更改代码或配置信息。

删除 Lambda 函数和特定版本

利用版本控制,您有以下选择:

  • 删除特定版本 - 您可通过在 DeleteFunction 请求中指定要删除的版本来删除 Lambda 函数版本。如果存在依赖此版本的别名,则请求将失败。AWS Lambda 仅在没有依赖此版本的别名时删除此版本。有关别名的更多信息,请参阅AWS Lambda 别名简介

  • 删除整个 Lambda 函数(此函数的所有版本和别名) - 要删除 Lambda 函数及其所有版本,请勿在 DeleteFunction 请求中指定任何版本。这将删除整个函数(包括其所有版本和别名)。

重要

可以删除特定函数版本,但无法删除 $LATEST

AWS Lambda 别名简介

使用 AWS 管理控制台、AWS CLI 或 Lambda API 管理版本控制