

# 管理 Lambda 函数版本
<a name="configuration-versions"></a>

您可以使用版本来管理函数的部署。例如，您可以发布函数的新版本用于测试版测试，而不会影响稳定的生产版本的用户。您每次发布函数时，Lambda 都会为函数创建一个新版本。新版本是函数的未发布版本的副本。未发布版本的名为 `$LATEST`。

重要的是，每当您部署函数代码时，都会覆盖 `$LATEST` 中的当前代码。要保存 `$LATEST` 的当前迭代，请创建一个新的函数版本。如果 `$LATEST` 与之前发布的版本相同，则在将更改部署到 `$LATEST` 之前，您无法创建新版本。这些更改可能会包括更新代码或修改函数配置设置。

发布函数版本后，其代码、运行时、架构、内存、层和大多数其他配置设置都不可变。这意味着，如果不从 `$LATEST` 发布新版本，则无法更改这些设置。您可以为已发布函数版本配置以下项目：
+ [触发器](lambda-services.md#lambda-invocation-trigger)
+ [目标](invocation-async-retain-records.md#create-destination)
+ [预配置并发](provisioned-concurrency.md)
+ [异步调用](invocation-async.md)
+ [数据库连接和代理](services-rds.md#rds-configuration)

**注意**  
在**自动**模式下使用[运行时管理控件](runtimes-update.md#runtime-management-controls)时，此函数版本使用的运行时版本会自动更新。使用 **Function update**（函数更新）或 **Manual**（手动）模式时，不会更新运行时版本。有关更多信息，请参阅 [了解 Lambda 如何管理运行时版本更新](runtimes-update.md)。

**Topics**
+ [创建函数版本](#configuration-versions-config)
+ [使用版本](#versioning-versions-using)
+ [授予权限](#versioning-permissions)

## 创建函数版本
<a name="configuration-versions-config"></a>

只能在函数的未发布版本上更改函数代码和设置。在您发布版本时，Lambda 会锁定代码和大多数设置，以便为该版本的用户维持一致的体验。

您可以使用 Lambda 控制台创建函数版本。

**创建新函数版本**

1. 打开 Lamba 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面。

1. 选择一个函数，然后选择**版本**选项卡。

1. 在版本配置页面上，选择 **Publish new version（发布新版本）**。

1. （可选）输入版本说明。

1. 选择 **Publish**。

或者，您可以使用 [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html) API 操作发布函数版本。

以下 AWS CLI 命令发布函数的新版本。响应返回有关新版本的配置信息，包括版本号和具有版本后缀的函数 ARN。

```
aws lambda publish-version --function-name my-function
```

您应看到以下输出：

```
{
  "FunctionName": "my-function",
  "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function:1",
  "Version": "1",
  "Role": "arn:aws:iam::123456789012:role/lambda-role",
  "Handler": "function.handler",
  "Runtime": "nodejs24.x",
  ...
}
```

**注意**  
Lambda 会分配单调递增的序列号，以便进行版本控制。Lambda 不会重复使用版本号，即使是删除并重新创建函数之后也是如此。

## 使用版本
<a name="versioning-versions-using"></a>

您可以使用限定的 ARN 或非限定的 ARN 来引用您的 Lambda 函数。
+ **限定的 ARN** – 具有版本后缀的函数 ARN。以下示例引用 `helloworld` 函数的版本 42。

  ```
  arn:aws:lambda:aws-region:acct-id:function:helloworld:42
  ```
+ **非限定的 ARN** – 不具有版本后缀的函数 ARN。

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

您可以在所有相关 API 操作中使用限定或非非限定的 ARN。但是，不能使用非限定 ARN 来创建别名。

如果您决定不发布函数版本，可以使用[事件源映射](invocation-eventsourcemapping.md)中的限定或非限定 ARN 来调用函数。当您使用非限定 ARN 调用函数时，Lambda 会隐式调用 `$LATEST`。

每个 Lambda 函数版本的限定 ARN 都是唯一的。发布版本后，您无法更改 ARN 或函数代码。

Lambda 仅在代码从未发布过或自上次发布版本后已发生更改时，才会发布新函数版本。如果没有任何更改，函数版本将保持为上次发布的版本。

当您发布版本时，Lambda 会创建函数代码和配置的不可变快照。并非所有配置更改都会触发新版本的发布。以下配置更改使函数有资格发布版本：
+ 函数代码
+ 环境变量
+ 运行时
+ 处理程序
+ 层
+ 内存大小
+ 超时
+ VPC 配置
+ 死信队列 (DLQ) 配置
+ IAM 角色
+ 说明
+ 架构（x86\$164 或 arm64）
+ 临时存储大小
+ 包类型
+ 日志记录配置
+ 文件系统配置
+ SnapStart
+ 跟踪配置

[预留并发](configuration-concurrency.md)等操作设置在更改时不会触发新版本的发布。

## 授予权限
<a name="versioning-permissions"></a>

您可以使用基于[资源的策略](access-control-resource-based.md)或[基于身份的策略](access-control-identity-based.md)授予对函数的访问权限。权限的范围取决于您要将策略应用于整个函数还是函数的某个版本。有关策略中的函数资源名称的更多信息，请参阅[微调策略的“资源和条件”部分](lambda-api-permissions-ref.md)。

您可以使用函数别名，简化事件源和 AWS Identity and Access Management (IAM) 策略的管理。有关更多信息，请参阅[为 Lambda 函数创建别名](configuration-aliases.md)。