解析唯寫屬性 - AWS CloudFormation

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

解析唯寫屬性

使用 CloudFormation IaC 產生器,您可以使用尚未由 CloudFormation管理的帳戶中佈建的資源產生範本。但是,某些資源屬性被指定為唯寫,這表示它們可以寫入,但無法讀取 CloudFormation,例如,資料庫密碼。

從現有資源產生 CloudFormation 範本時,唯寫屬性會構成挑戰。在大多數情況下,會 CloudFormation 將這些屬性轉換為產生的範本中的參數。這可讓您在匯入作業期間將性質作為參數值輸入。但是,在某些情況下,這種轉換是不可能的,並以不同的方式 CloudFormation 處理這些情況。

互斥屬性

有些資源具有多組互斥的屬性,其中至少有些是唯寫的。在這些情況下,IaC 產生器無法判斷在建立期間將哪一組獨佔屬性套用至資源。例如,您可以提供AWS::Lambda::Function使用這些屬性集之一的程式碼。

  • Code/S3BucketCode/S3Key,以及選擇性地 Code/S3ObjectVersion

  • Code/ImageUri

  • Code/ZipFile

所有這些屬性都是唯寫的。IaC 產生器會選取其中一個專用性質集,並將其加入至產生的範本。會為每個唯寫屬性加入參數。參數名稱包括在內OneOf,參數描述指示對應的屬性可以用其他獨佔屬性取代。IAC 產生器為包括的性質設定MUTUALLY_EXCLUSIVE_PROPERTIES的警告類型。

互斥類型

在某些情況下,唯寫屬性可以是多種資料類型。例如,的Body屬性AWS::ApiGateway::RestApi可以是objectstring。在這種情況下,IaC 產生器會使用的類型在產生的範本中包含屬性,string並設定的警告類型。MUTUALLY_EXCLUSIVE_TYPES

Array 屬性

如果只寫屬性具有的類型array,IaC 生成器不能將其包含在生成的模板中,因為參數只能是純量值。在此情況下,會省略範本中的屬性,並設定警告類UNSUPPORTED_PROPERTIES型。

可選屬性

對於可選的唯寫屬性,IAC 生成器無法檢測設置資源時是否使用了該屬性。在此情況下,會從產生的範本省略屬性,並設定的UNSUPPORTED_PROPERTIES警告類型。

警告和後續步驟

若要判斷哪些屬性是唯寫的,您必須查看 IAC 產生器主控台傳回的警告。該AWS 資源和屬性類型參考文檔不會指出屬性是否為只寫,或者它是否支持多種類型。

或者,您可以從資源提供者結構描述查看哪些屬性是唯寫的。若要下載資源提供者結構描述,請參閱CloudFormation 資源提供者結構描述。若要取得更多資訊,請參閱《指CloudFormation 令行介面使用指南》中的〈資源提供者結構

若要解決唯寫屬性的問題
  1. 打開控 CloudFormation 制台的 IAC 生成器頁面

  2. 在畫面頂端的導覽列上,選擇 AWS 區域 適合您範本的。

  3. 選擇「範本」頁標,然後選擇您建立的範本名稱。

  4. 在 [範本定義] 索引標籤上,當產生的範本包含具有唯寫屬性的資源時,IAC 產生器主控台會顯示警告,其中包含問題類型摘要。例如:

    關於生成模板中的唯寫屬性的 IaC 生成器控制台警告
  5. 選擇檢視警告詳細資料以取得詳細資訊 具有唯寫屬性的資源由產生的範本和資源類型中使用的邏輯 ID 識別。

    使用警告清單來識別具有唯寫屬性的資源,並查看每個資源以決定需要對產生的範本進行哪些變更 (如果有的話)。

    IaC 生成器控制台有關生成模板中的唯寫屬性的詳細警告
  6. 如果必須更新範本以解決唯寫屬性的問題,請執行下列動作:

    1. 選擇 [載] 以下載範本副本。

    2. 編輯範本。

    3. 變更完成後,您可以選擇「匯入已編輯的範本」按鈕以繼續匯入程序。