

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

# 如何解決 AWS::Lambda::Function 資源中唯寫屬性的問題
<a name="generate-IaC-lambda-function"></a>

本主題說明如何在使用 IaC 產生器時解決 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html) 資源中唯寫屬性的問題。

## 問題
<a name="lambda-function-mutually-exclusive-properties-issue"></a>

`AWS::Lambda::Function` 資源有三個互斥的屬性集，用於指定 Lambda 程式碼：
+ `Code/S3Bucket` 和 `Code/S3Key` 屬性，以及選用的 `Code/S3ObjectVersion` 屬性
+ `Code/ImageUri` 屬性
+ `Code/ZipFile` 屬性

只有其中一個集合可用於指定的 `AWS::Lambda::Function` 資源。

IaC 產生器無法確定用於建立或更新資源的專屬唯寫屬性集。因此，它只會在產生的範本中包含第一組屬性。忽略 `Code/ImageUri` 和 `Code/ZipFile` 屬性。

此外，IaC 產生器會發出下列警告：
+ **`MUTUALLY_EXCLUSIVE_PROPERTIES`** – 警告 `Code/S3Bucket` 和 `Code/S3Key` 被標識為互斥屬性。
+ **`UNSUPPORTED_PROPERTIES`** – 警告 `Code/S3ObjectVersion` 屬性不受支援。

若要在產生的範本中包含 `AWS::Lambda::Function` 資源，必須下載並更新具有正確程式碼屬性的範本。

## Resolution
<a name="lambda-function-mutually-exclusive-properties-resolution"></a>

**如果將 Lambda 程式碼存放在 Amazon S3 儲存貯體中，但不使用 `S3ObjectVersion` 屬性**，可以匯入產生的範本，無需進行任何修改。在匯入操作期間，IaC 產生器會要求您使用 Amazon S3 儲存貯體和金鑰作為範本參數。

****如果將 Lambda 程式碼儲存為 Amazon ECR 儲存庫**，可以使用下列指示來更新範本：**

1. 下載產生的範本。

1. 從產生的範本中移除 `Code/S3Bucket` 和 `Code/S3Key` 屬性的屬性和對應參數。

1. 使用 `Code/ImageUri` 屬性取代所產生範本中已移除的屬性，指定 Amazon ECR 儲存庫的 URL。

1. 在 IaC 產生器主控台中開啟產生的範本，然後選擇**匯入已編輯的範本**按鈕。

****如果將 Lambda 程式碼儲存為 zip 檔案**，可以使用下列指示來更新範本：**

1. 下載產生的範本。

1. 從產生的範本中移除 `Code/S3Bucket` 和 `Code/S3Key` 屬性的屬性和對應參數。

1. 使用 `Code/ZipFile` 屬性來取代所產生範本中已移除的屬性。

1. 在 IaC 產生器主控台中開啟產生的範本，然後選擇**匯入已編輯的範本**按鈕。

****如果沒有 Lambda 程式碼的副本**，可以使用下列指示來更新範本：**

1. 使用 API AWS Lambda [https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html)動作 （例如，使用 [https://docs.aws.amazon.com/cli/latest/reference/lambda/get-function.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/get-function.html) AWS CLI 命令。

1. 在回應中，如果程式碼位於 Amazon S3 儲存貯體中，則 `RepositoryType` 參數為 `S3`，如果程式碼位於 Amazon ECR 儲存庫中，則為 `ECR`。

1. 在回應中，`Location` 參數包含預先簽章的 URL，可用來下載部署套件，時長 10 分鐘。下載程式碼。

1. 將程式碼上傳至 Amazon S3 儲存貯體。

1. 使用產生的範本來執行匯入操作，並提供儲存貯體名稱和金鑰作為參數值。