

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

# 解決唯寫屬性
<a name="generate-IaC-write-only-properties"></a>

使用 CloudFormation IaC 產生器，您可以使用已在帳戶中佈建且尚未由 CloudFormation 管理的資源來產生範本。不過，某些資源屬性會指定為*唯寫*，這表示其可以寫入，但 CloudFormation 無法讀取，例如資料庫密碼。

透過現有資源產生 CloudFormation 範本時，唯寫屬性會帶來挑戰。在大多數情況下，CloudFormation 會將這些屬性轉換為所產生範本中的參數。這可讓您在匯入操作期間將屬性輸入為參數值。不過，在某些情況下無法進行此轉換，CloudFormation 會以不同的方式處理這些案例。

## 互斥屬性
<a name="write-only-mutually-exclusive-properties"></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) 的程式碼。
+ `Code/S3Bucket`、`Code/S3Key` 和可選的 `Code/S3ObjectVersion`
+ `Code/ImageUri`
+ `Code/ZipFile`

所有這些屬性都是唯寫屬性。IaC 產生器會選取其中一個專用屬性集，並將其新增至產生的範本。系統會為每個唯寫屬性新增參數。參數名稱包含 `OneOf`，參數說明指出對應的屬性可以取代為其他專用屬性。IaC 產生器會為包含的屬性設定 `MUTUALLY_EXCLUSIVE_PROPERTIES` 的警告類型。

## 互斥類型
<a name="write-only-mutually-exclusive-types"></a>

在某些情況下，唯寫屬性可以是多種資料類型。例如，[https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-apigateway-restapi.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-apigateway-restapi.html) 的 `Body` 屬性可以是 `object` 或 `string`。在這種情況下，IaC 產生器會使用 `string` 的類型在產生的範本中包含屬性，並設定 `MUTUALLY_EXCLUSIVE_TYPES` 的警告類型。

## Array 屬性
<a name="write-only-array-properties"></a>

如果唯寫屬性具有 `array` 類型，則 IaC 產生器無法將其包含在產生的範本中，因為參數只能是純量值。在此情況下，會從範本中省略該屬性，並設定 `UNSUPPORTED_PROPERTIES` 的警告類型。

## 可選屬性
<a name="write-only-optional-properties"></a>

對於選用的唯寫屬性，IaC 產生器無法偵測在設定資源時是否使用屬性。在此情況下，會從產生的範本中省略該屬性，並設定 `UNSUPPORTED_PROPERTIES` 的警告類型。

## 警告和後續步驟
<a name="write-only-properties-warnings-and-next-steps"></a>

若要確定哪些屬性為唯讀屬性，必須查看 IaC 產生器主控台傳回的警告。[AWS 資源和屬性類型參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)不會指出屬性是否為唯讀屬性，或者它是否支援多種類型。

或者，可以從資源提供者結構描述中查看哪些屬性是唯讀屬性。若要下載資源提供者結構描述，請參閱 [CloudFormation 資源提供者結構描述](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/resource-type-schemas.html)。

**若要解決唯寫屬性的問題**

1. 開啟 CloudFormation 主控台的 [IaC 產生器頁面](https://console.aws.amazon.com/cloudformation/home?#iac-generator)。

1. 在畫面頂端的導覽列上， AWS 區域 為您的範本選擇 。

1. 選擇**範本**索引標籤，然後選擇建立的範本名稱。

1. 在**範本定義**索引標籤中，當產生的範本包含具有唯寫屬性的資源時，IaC 產生器主控台會顯示警告，其中包含問題類型的摘要。例如：  
![\[有關所產生範本中唯寫屬性的 IaC 產生器主控台警告\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/IaC-generator-write-only-property-warning.png)

1. 選擇**檢視警告詳細資訊**以取得更多詳細資訊。由所產生的範本和資源類型中使用的邏輯 ID 來識別具有唯寫屬性的資源。

   使用警告清單來識別具有唯寫屬性的資源，並查看每個資源，以確定需要對產生的範本進行哪些變更 (如果有的話)。  
![\[有關所產生範本中唯寫屬性的 IaC 產生器主控台詳細警告\]](http://docs.aws.amazon.com/zh_tw/AWSCloudFormation/latest/UserGuide/images/IaC-generator-write-only-property-resource-warning.png)

1. 如果必須更新範本以解決唯寫屬性的問題，請執行下列動作：

   1. 選擇**下載**以下載範本副本。

   1. 編輯範本。

   1. 變更完成後，可以選擇**匯入已編輯的範本**按鈕以繼續匯入程序。