如何解決資源中唯寫屬性的問題 AWS::Lambda::Function - AWS CloudFormation

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

如何解決資源中唯寫屬性的問題 AWS::Lambda::Function

本主題說明如何解決使用 IAC 產生器時AWS::Lambda::Function資源中唯寫內容的問題。

問題

AWS::Lambda::Function源有三組互斥的屬性,可用來指定 Lambda 程式碼:

  • Code/S3BucketCode/S3Key屬性,以及可選的屬Code/S3ObjectVersion

  • Code/ImageUri 屬性

  • Code/ZipFile 屬性

這些集合中只有一個可用於給定的AWS::Lambda::Function資源。

IAC 產生器無法判斷使用哪一組獨佔唯寫屬性來建立或更新資源。因此,它只會在產生的範本中包含第一組屬性。Code/ImageUriCode/ZipFile屬性會被省略。

此外,IAC 產生器會發出下列警告:

  • MUTUALLY_EXCLUSIVE_PROPERTIES— 警告Code/S3BucketCode/S3Key被識別為互斥屬性。

  • UNSUPPORTED_PROPERTIES— 警告Code/S3ObjectVersion屬性不受支援。

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

解析度

如果您將 Lambda 程式碼存放在 Amazon S3 儲存貯體中,但不使用該S3ObjectVersion屬性,則可以匯入產生的範本,而不需要進行任何修改。IaC 生成器將在導入操作期間要求您提供 Amazon S3 存儲桶和密鑰作為模板參數。

如果您將 Lambda 程式碼存放為 Amazon ECR 儲存庫,則可以使用下列指示更新範本:
  1. 下載產生的範本。

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

  3. 將產生的範本中移除的屬性取代URL為Code/ImageUri屬性,並指定 Amazon ECR 儲存庫的屬性。

  4. 在 IaC 生成器控制台中打開生成的模板,然後選擇導入編輯的模板按鈕。

如果您將 Lambda 程式碼儲存為 zip 檔案,您可以使用下列指示更新範本:
  1. 下載產生的範本。

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

  3. 將產生的範本中移除的屬性取代為Code/ZipFile屬性。

  4. 在 IaC 生成器控制台中打開生成的模板,然後選擇導入編輯的模板按鈕。

如果您沒有 Lambda 程式碼的複本,可以使用下列指示更新範本:
  1. 使用 AWS Lambda GetFunctionAPI動作 (例如,使用指aws lambda get-function AWS CLI 令。

  2. 在回應中,RepositoryType參數是S3指程式碼位於 Amazon S3 儲存貯體中,或者ECR如果程式碼位於 Amazon ECR 儲存庫中。

  3. 在回應中,Location參數包含預先簽署URL,您可以用來下載 10 分鐘的部署套件。下載代碼。

  4. 將程式碼上傳到 Amazon S3 儲存貯體。

  5. 使用產生的範本執行匯入作業,並提供值區名稱和索引鍵作為參數值。