

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 以 .zip 封存檔形式部署 Lambda 函數
<a name="configuration-function-zip"></a>

當您建立 Lambda 函數時，可以將函數程式碼封裝到部署套件中。Lambda 支援兩種類型的部署套件：容器映像和 .zip 封存檔。建立函數的工作流程取決於部署套件類型。若要設定一個定義為容器映像的函數，請參閱[使用容器映像建立 Lambda 函數](images-create.md)。

可使用 Lambda 主控台和 Lambda API 來建立以 .zip 封存檔定義的函數。也可以上傳更新的 .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 建立函數後，您可以新增函數程式碼。

**建立函數**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇**建立函數**。

1. 選擇 **Author from scratch** (從頭開始編寫) 或 **Use a blueprint** (使用藍圖) 來建立函數。

1. 在 **基本資訊** 下，請執行下列動作：

   1. 針對 **函數名稱**，輸入函數名稱。函數名稱的長度限制為 64 個字元。

   1. 對於**執行時間**，選擇函數要使用的語言版本。

   1. (選用) 對於 **Architecture** (架構)，選擇要用於函數的指令集架構。預設架構值為 x86\_64。為您的函數建置部署套件時，確定它與此[指令集架構](foundation-arch.md)相容。

1. (選用) 在**許可**下，展開**變更預設執行角色**。您可建立新的**執行角色**，或使用現有的角色。

1. (選用) 展開 **Advanced settings (進階設定)**。您可對函數選擇**程式碼簽署組態**。您也可以為函數設定 (Amazon VPC) 進行存取。

1. 選擇**建立函數**。

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 封存檔。如果此檔案大於 50 MB，請將該檔案從 Amazon S3 儲存貯體上傳至函數。

**若要將函數程式碼上傳為 .zip 封存**

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇要更新的函數並選擇 **Code** (程式碼) 索引標籤。

1. 在**程式碼來源**下，選擇**上傳自**。

1. 選擇 **.zip file** (.zip 檔案)，然後選擇 **Upload** (上傳)。

   1. 在檔案選擇器中，選取新的映像版本、選擇 **Open** (開啟)，然後選擇 **Save** (儲存)。

1. (替代步驟 4) 選擇 **Amazon S3 location** (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. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇要更新的函數並選擇 **Code** (程式碼) 索引標籤。

1. 向下捲動到 **Runtime settings** (執行時間設定) 區段 (在程式碼編輯器下)。

1. 選擇**編輯**。

   1. 請在 **Runtime** (執行階段) 選取執行階段識別符。

   1. 對於 **Handler** (處理常式)，指定函數的處理常式。

   1. 對於 **Architecture** (架構)，選擇要用於函數的指令集架構。

1. 選擇**儲存**。

## 變更架構
<a name="configuration-function-arch"></a>

在可以變更指令集架構之前，您需要確保函數的程式碼與目標架構相容。

如果您使用 Node.js、Python 或 Ruby，並在內嵌的編輯器中編輯您的函數程式碼，則現有的程式碼可能無需修改即可執行。

不過，如果您使用 .zip 封存檔部署套件來提供函數程式碼，則必須準備新的 .zip 封存檔，該封存檔會針對目標執行時間和指令集架構正確地進行編譯和建置。如需指示，請參閱函數執行時間的處理常式頁面。

**變更指令集架構**

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇要更新的函數並選擇 **Code** (程式碼) 索引標籤。

1. 在 **Runtime settings** (執行時間設定) 中，選擇 **Edit** (編輯)。

1. 對於 **Architecture** (架構)，選擇要用於函數的指令集架構。

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. 開啟 Lambda 主控台中的[函數頁面](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`。