

# 書き込み専用プロパティを解決する
<a name="generate-IaC-write-only-properties"></a>

CloudFormation IaC ジェネレーターを使用すると、まだ CloudFormation で管理されていないアカウントにプロビジョニングされたリソースを使ってテンプレートを生成することができます。ただし、特定のリソースプロパティは書き込み専用として指定されます。つまり、データベースパスワードなどは、CloudFormation では書き込みはできますが、読み取りはできません。

既存のリソースから CloudFormation テンプレートを生成する場合、書き込み専用プロパティには課題があります。ほとんどの場合、CloudFormation はこれらのプロパティを生成されたテンプレートのパラメータに変換します。これにより、インポートオペレーション中にこのプロパティをパラメータ値として入力することが可能になります。ただし、この変換が不可能なシナリオがあり、CloudFormation はこれらのケースを別の方法で処理します。

## 相互に排他的なプロパティ
<a name="write-only-mutually-exclusive-properties"></a>

相互に排他的なプロパティのセットが複数あり、そのうちの一部が書き込み専用である場合。これらの場合、IaC ジェネレーターは、作成時にリソースに適用されたのはどのプロパティのセットであるかを特定することはできません。例えば、以下のプロパティセットのいずれか 1 つを使うと、[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 ジェネレーターは、排他的なプロパティセットのうち 1 つを選択し、それを生成されたテンプレートに追加します。それぞれの書き込み専用プロパティにパラメータが追加されます。パラメータ名には `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/ja_jp/AWSCloudFormation/latest/UserGuide/images/IaC-generator-write-only-property-warning.png)

1. 警告の詳細については、**[警告の詳細を表示]** を選択します。書き込み専用プロパティを持つリソースは、生成されたテンプレートとリソースタイプで使用される論理 ID によって特定されます。

   警告のリストを使用して、書き込み専用プロパティを持つリソースを特定し、各リソースを調べて、生成されたテンプレートに加えるべき変更 (もしある場合) を判断します。  
![\[IaC ジェネレーターのコンソールに表示された、生成されたテンプレートの書き込み専用プロパティに関する警告の詳細\]](http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/images/IaC-generator-write-only-property-resource-warning.png)

1. 書き込み専用プロパティの問題を解決するためにテンプレートを更新する必要がある場合は、次の手順を実行します。

   1. **[ダウンロード]** を選択して、テンプレートのコピーをダウンロードします。

   1. テンプレートを編集します。

   1. 変更し終わったら、**[編集したテンプレートをインポート]** ボタンを選択してインポートプロセスを続行できます。