

# 将 Lambda 函数部署为 .zip 文件归档
<a name="configuration-function-zip"></a>

创建 Lambda 函数时，您可将函数代码打包到部署程序包中。Lambda 支持两种类型的部署程序包：容器镜像和 .zip 文件归档。创建函数的工作流取决于部署包类型。使用 [使用容器映像创建 Lambda 函数](images-create.md) 控制台创建定义为容器镜像的函数。

您可使用 Lambda 控制台和 Lambda API 创建定义为 .zip 文件归档的 Lambda 函数。此外，您还可上载更新的 .zip 文件更改函数代码。

**注意**  
您无法更改现有函数的[部署包类型](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html#lambda-CreateFunction-request-PackageType)（.zip 或容器映像）。例如，您无法将容器映像函数转换为使用 .zip 文件归档。您必须创建新函数。

**Topics**
+ [创建函数](#configuration-function-create)
+ [使用控制台代码编辑器](#configuration-functions-console-update)
+ [更新函数代码](#configuration-function-update)
+ [更改运行时](#configuration-function-runtime)
+ [更改架构](#configuration-function-arch)
+ [使用 Lambda API](#configuration-function-api)
+ [下载函数代码](#configuration-function-download)
+ [CloudFormation](#configuration-function-cloudformation)
+ [加密 Lambda .zip 部署包](encrypt-zip-package.md)

## 创建函数
<a name="configuration-function-create"></a>

创建定义为 .zip 文件归档的 Lambda 函数时，请选择代码模板、语言版本及函数的执行角色。您可以在 Lambda 创建函数后添加函数代码。

**创建函数**

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

1. 选择 **Create function**（创建函数）。

1. 选择 **Author from scratch**（从头开始创作）或者 **Use a blueprint**（使用蓝图）创建函数。

1. 在 **Basic information**（基本信息）中，执行以下操作：

   1. 对于 **Function name**（函数名称），输入函数名称。函数名称的长度限制为 64 个字符。

   1. 对于**Runtime**（运行时），请选择函数使用的语言版本。

   1. （可选）对于**架构**，选择要用于函数的指令集架构。默认架构为 x86\_64。为您的函数构建部署包时，请确保它与此[指令集架构](foundation-arch.md)兼容。

1. （可选）在 **Permissions**（权限）下，展开 **Change default execution role**（更改默认执行角色）。您可以使用现有角色，也可以创建一个**执行角色**。

1. （可选）展开 **Advanced settings**（高级设置）。您可以为函数选择**代码签名配置**。您还可以为要访问的函数配置 (Amazon VPC)。

1. 选择 **Create function**（创建函数）。

Lambda 将创建新函数。现在，您可以使用控制台添加函数代码并配置其他函数参数和特性。有关代码部署说明，请参阅函数使用的运行时的处理程序页面。

------
#### [ Node.js ]

[使用 .zip 文件归档部署 Node.js Lambda 函数](nodejs-package.md) 

------
#### [ Python ]

 [将 .zip 文件归档用于 Python Lambda 函数](python-package.md) 

------
#### [ Ruby ]

 [使用 .zip 文件归档部署 Ruby Lambda 函数](ruby-package.md) 

------
#### [ Java ]

 [使用 .zip 或 JAR 文件归档部署 Java Lambda 函数](java-package.md) 

------
#### [ Go ]

 [使用 .zip 文件归档部署 Go Lambda 函数](golang-package.md) 

------
#### [ C\# ]

 [使用 .zip 文件归档构建和部署 C\# Lambda 函数](csharp-package.md) 

------
#### [ PowerShell ]

 [使用 .zip 文件归档部署 PowerShell Lambda 函数](powershell-package.md) 

------

## 使用控制台代码编辑器
<a name="configuration-functions-console-update"></a>

控制台将使用单个源文件创建一个 Lambda 函数。对于脚本语言，您可以在内置代码编辑器中编辑此文件并添加更多文件。要保存您的更改，请选择 **Save**（保存）。然后，要运行代码，请选择 **Test**（测试）。

保存函数代码时，Lambda 控制台会创建一个 .zip 文件归档部署包。在控制台外部开发函数代码时（使用 IDE），您需要[创建部署程序包](nodejs-package.md)将代码上载到 Lambda 函数。

## 更新函数代码
<a name="configuration-function-update"></a>

对于脚本语言（Node.js、Python 及 Ruby），您可以在嵌入式编辑器中编辑函数代码。如果代码大于 3MB，或者如果需要添加库，或对于编辑器不支持的语言（Java、Go、C\#），您必须将函数代码以 .zip 归档上载。如果 .zip 文件归档小于 50 MB，则可以从本地计算机上传 .zip 文件归档。如果文件大于 50MB，请将文件从 Simple Storage Service (Amazon S3) 存储桶上载到函数。

**将函数代码以 .zip 归档上载**

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

1. 选择要更新的函数，然后选择 **Code**（代码）选项卡。

1. 在 **Code source**（代码源）下，选择 **Upload from**（上载自）。

1. 选择 **.zip file** (.zip 文件)，然后选择 **Upload file** (上载文件)。

   1. 在文件选择器中，选择新映像版本，然后依次选择 **Open** (打开)、**Save** (保存)。

1. （步骤 4 的替代方案）选择 **Amazon S3 location**（Simple Storage Service (Amazon S3) 位置）。

   1. 在文本框中，输入 .zip 文件归档的 S3 链接 URL，然后选择 **Save**（保存）。

## 更改运行时
<a name="configuration-function-runtime"></a>

如果您更新函数配置以使用新的运行时版本，则可能需要更新函数代码才能与新的运行时版本兼容。如果您将函数配置更新为使用其他运行时，则**必须**提供与运行时和架构兼容的新函数代码。有关如何为函数代码创建部署包的说明，请参阅函数使用的运行时的处理程序页面。

Node.js 20、Python 3.12、Java 21、.NET 8、Ruby 3.3 及更高版本的基础映像都基于 Amazon Linux 2023 最小容器映像。早期的基础映像使用 Amazon Linux 2。与 Amazon Linux 2 相比，AL2023 具有多项优势，包括较小的部署占用空间以及 `glibc` 等更新版本的库。有关更多信息，请参阅 AWS 计算博客上的[AWS Lambda 的 Amazon Linux 2023 运行时系统简介](https://aws.amazon.com/blogs/compute/introducing-the-amazon-linux-2023-runtime-for-aws-lambda/)。

**更改运行时**

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

1. 选择要更新的函数，然后选择 **Code**（代码）选项卡。

1. 向下滚动至位于代码编辑器下方的 **Runtime settings**（运行时设置）部分。

1. 选择**编辑**。

   1. 对于 **Runtime**（运行时），请选择运行时标识符。

   1. 对于 **Handler**（处理程序），请为您的函数指定文件名和处理程序。

   1. 对于**架构**，选择要用于您的函数的指令集架构。

1. 选择**保存**。

## 更改架构
<a name="configuration-function-arch"></a>

在更改指令集架构之前，您需要确保函数的代码与目标架构兼容。

如果您使用 Node.js、Python 或 Ruby 并在嵌入式编辑器中编辑函数代码，则现有代码可以在不修改的情况下运行。

但是，如果您使用 .zip 文件归档部署包提供函数代码，则必须准备一个新的 .zip 文件归档，针对目标运行时和指令集架构正确编译和构建此归档。有关说明，请参阅函数运行时的处理程序页面。

**更改指令集架构**

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

1. 选择要更新的函数，然后选择 **Code**（代码）选项卡。

1. 在 **Runtime settings**（运行时设置）中，选择 **Edit**（编辑）。

1. 对于**架构**，选择要用于您的函数的指令集架构。

1. 选择**保存**。

## 使用 Lambda API
<a name="configuration-function-api"></a>

要创建和配置使用 .zip 文件归档的函数，请使用以下 API 操作：
+ [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)

## 下载函数代码
<a name="configuration-function-download"></a>

您可以通过 Lambda 控制台下载函数代码 .zip 文件的当前未发布（`$LATEST`）版本。要完成此操作，请首先确保您拥有以下 IAM 权限：
+ `iam:GetPolicy`
+ `iam:GetPolicyVersion`
+ `iam:GetRole`
+ `iam:GetRolePolicy`
+ `iam:ListAttachedRolePolicies`
+ `iam:ListRolePolicies`
+ `iam:ListRoles`

**下载函数代码 .zip 文件**

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

1. 选择您要下载其函数代码 .zip 文件的函数。

1. 在**函数概述**中，选择**下载**按钮，然后选择**下载函数代码.zip 文件**。

   1. 或者，选择**下载 AWS SAM 文件**，根据您的函数配置生成并下载 SAM 模板。您也可以选择**两者都下载**，同时下载.zip 文件和 SAM 模板。

## CloudFormation
<a name="configuration-function-cloudformation"></a>

您可以使用 CloudFormation 创建使用 .zip 文件归档的 Lambda 函数。在 CloudFormation 模板中，`AWS::Lambda::Function` 资源将指定 Lambda 函数。有关 `AWS::Lambda::Function` 资源中属性的描述，请参阅 *AWS CloudFormation 用户指南*中的 [AWS::Lambda::Function](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html)。

在 `AWS::Lambda::Function` 资源中，设置以下属性以创建定义为 .zip 文件归档的函数：
+ AWS::Lambda::Function
  + PackageType – 设置为 `Zip`。
  + 代码 – 在 `S3Bucket` 和 `S3Key` 字段中输入 Amazon S3 存储桶名称和 .zip 文件名。对于 Node.js 或 Python，您可以提供 Lambda 函数的内联源代码。
  + 运行时 – 设置运行时值。
  + 架构 - 将架构值设置为 `arm64` 以使用 AWS Graviton2 处理器。默认情况下，架构值为 `x86_64`。