AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS Lambda 版本控制简介

接下来,您可以了解如何创建 Lambda 函数并从该函数中发布版本。您还可以了解如何在具有一个或多个发布的版本时更新函数代码和配置信息。此外,您还可以找到有关如何删除函数版本 (特定版本或整个 Lambda 函数及其所有版本和关联别名) 的信息。

创建 Lambda 函数 ($LATEST 版本)

在创建 Lambda 函数时,只有一个版本 — 即 $LATEST 版本。

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

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

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

    您可以在所有相关的操作中使用该非限定 ARN。不过,您无法使用该 ARN 创建别名。有关更多信息,请参阅 AWS Lambda 别名简介

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

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

注意

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

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

{ "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 是您上传的部署程序包的校验和。

发布 AWS Lambda 函数版本

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

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

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

  • 在创建或更新 Lambda 函数时发布版本 – 也可以使用 CreateFunctionUpdateFunctionCode 请求并在请求中添加可选的 publish 参数以发布版本:

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

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

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

    { "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:

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

您可以为 Lambda 函数发布多个版本。当您发布版本时,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 请求中指定任何版本。这样做将删除整个函数,包括它的所有版本和别名。