本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
如何解決 AWS::Lambda::Function 資源中唯寫屬性的問題
本主題說明如何在使用 IaC 產生器時解決 AWS::Lambda::Function 資源中唯寫屬性的問題。
問題
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
如果您將 Lambda 程式碼存放在 Amazon S3 儲存貯體中,但不使用 S3ObjectVersion
屬性,則可以匯入產生的範本,無需進行任何修改。在匯入操作期間,IaC 產生器會要求您使用 Amazon S3 儲存貯體和金鑰做為範本參數。
如果您將 Lambda 程式碼儲存為 Amazon ECR 儲存庫,您可以使用下列指示來更新範本:
-
下載產生的範本。
-
從產生的範本中移除 和
Code/S3Key
屬性的屬性Code/S3Bucket
和對應的參數。 -
將產生的範本中移除的屬性取代為
Code/ImageUri
屬性,指定 Amazon ECR 儲存庫的 URL。 -
在 IaC 產生器主控台中開啟產生的範本,然後選擇匯入編輯的範本按鈕。
如果您將 Lambda 程式碼以 形式存放在 zip 檔案中,您可以使用下列指示來更新範本:
-
下載產生的範本。
-
從產生的範本中移除 和
Code/S3Key
屬性的屬性Code/S3Bucket
和對應的參數。 -
使用 屬性取代所產生範本中已移除的
Code/ZipFile
屬性。 -
在 IaC 產生器主控台中開啟產生的範本,然後選擇匯入編輯的範本按鈕。
如果您沒有 Lambda 程式碼的副本,您可以使用下列指示來更新範本:
-
使用 API AWS Lambda
GetFunction
動作 (例如,使用aws lambda get-function
AWS CLI 命令。 -
在回應中,
S3
如果程式碼位於 Amazon S3 儲存貯體中,或者ECR
程式碼位於 Amazon ECR 儲存庫中,則RepositoryType
參數為 。 -
在回應中,
Location
參數包含預先簽章的 URL,可用來下載部署套件 10 分鐘。下載程式碼。 -
將程式碼上傳至 Amazon S3 儲存貯體。
-
使用他產生的範本執行匯入操作,並提供儲存貯體名稱和索引鍵做為參數值。