CloudFormation IaC ジェネレーターを使用すると、まだ CloudFormation で管理されていないアカウントにプロビジョニングされたリソースを使ってテンプレートを生成することができます。ただし、特定のリソースプロパティは書き込み専用として指定されます。つまり、データベースパスワードなどは、CloudFormation では書き込みはできますが、読み取りはできません。
既存のリソースから CloudFormation テンプレートを生成する場合、書き込み専用プロパティには課題があります。ほとんどの場合、CloudFormation はこれらのプロパティを生成されたテンプレートのパラメータに変換します。これにより、インポートオペレーション中にこのプロパティをパラメータ値として入力することが可能になります。ただし、この変換が不可能なシナリオがあり、CloudFormation はこれらのケースを別の方法で処理します。
相互に排他的なプロパティ
相互に排他的なプロパティのセットが複数あり、そのうちの一部が書き込み専用である場合。これらの場合、IaC ジェネレーターは、作成時にリソースに適用されたのはどのプロパティのセットであるかを特定することはできません。例えば、以下のプロパティセットのいずれか 1 つを使うと、AWS::Lambda::Function のコードを指定できます。
-
Code/S3Bucket
、Code/S3Key
、オプションでCode/S3ObjectVersion
-
Code/ImageUri
-
Code/ZipFile
これらのプロパティはすべて書き込み専用です。IaC ジェネレーターは、排他的なプロパティセットのうち 1 つを選択し、それを生成されたテンプレートに追加します。それぞれの書き込み専用プロパティにパラメータが追加されます。パラメータ名には OneOf
が含まれ、パラメータの説明には、対応するプロパティは他の排他的なプロパティに置き換えることが可能であることが示されています。IaC ジェネレーターは、含まれているプロパティに MUTUALLY_EXCLUSIVE_PROPERTIES
の警告タイプを設定します。
相互に排他的なタイプ
いくつかの場合、書き込み専用プロパティは、複数あるデータタイプに設定できます。例えば、AWS::ApiGateway::RestApi の Body
プロパティは、object
か string
にすることができます。この場合、IaC ジェネレーターは string
のタイプを使用して生成されたテンプレートにプロパティを含め、MUTUALLY_EXCLUSIVE_TYPES
の警告タイプを設定します。
Array のプロパティ
書き込み専用プロパティのタイプが array
の場合、パラメータはスカラー値にしかならないため、IaC ジェネレーターは生成されたテンプレートに含めることができません。この場合、プロパティはテンプレートから省略され、警告タイプ UNSUPPORTED_PROPERTIES
が設定されます。
オプションのプロパティ
オプションの書き込み専用プロパティの場合、IaC ジェネレーターは、リソースの設定時にプロパティが使用されたかどうかを検出することはできません。この場合、プロパティは生成されたテンプレートから省略され、警告タイプ UNSUPPORTED_PROPERTIES
が設定されます。
警告と次のステップ
どのプロパティが書き込み専用であるかを判断するには、IaC ジェネレーターコンソールが返した警告を確認する必要があります。AWS リソースおよびプロパティタイプのリファレンス ドキュメントには、プロパティが書き込み専用であるか、またはプロパティが複数のタイプをサポートするかどうかに関する記載がありません。
代替手段として、リソースプロバイダースキーマからどのプロパティが書き込み専用かを確認することもできます。リソースプロバイダースキーマのダウンロード方法については、「CloudFormation リソースプロバイダースキーマ」を参照してください。詳細については、「CloudFormation コマンドラインインターフェイスユーザーガイド」の「リソースプロバイダースキーマ」を参照してください。
書き込み専用プロパティの問題を解決する
-
CloudFormation コンソールの IaC ジェネレーターページ
を開きます。 -
画面上部にあるナビゲーションバーで、テンプレートの AWS リージョンを選択します。
-
[テンプレート] タブを選択してから、作成したテンプレートの名前を選択します。
-
生成されたテンプレートに書き込み専用プロパティを持つリソースが含まれる場合は、IaC ジェネレーターのコンソールの [テンプレートの定義] タブに、問題のタイプの概要を伴う警告が表示されます。例:
-
警告の詳細については、[警告の詳細を表示] を選択します。書き込み専用プロパティを持つリソースは、生成されたテンプレートとリソースタイプで使用される論理 ID によって特定されます。
警告のリストを使用して、書き込み専用プロパティを持つリソースを特定し、各リソースを調べて、生成されたテンプレートに加えるべき変更 (もしある場合) を判断します。
-
書き込み専用プロパティの問題を解決するためにテンプレートを更新する必要がある場合は、次の手順を実行します。
-
[ダウンロード] を選択して、テンプレートのコピーをダウンロードします。
-
テンプレートを編集します。
-
変更し終わったら、[編集したテンプレートをインポート] ボタンを選択してインポートプロセスを続行できます。
-