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