IaC 生成器和只写属性
只写属性是可以写入 AWS CloudFormation 但其无法读取的资源属性。(例如,数据库密码。) 这会导致从现有资源生成模板时出现问题。通常,只写属性会转换为生成的模板中的参数。这允许您在导入操作期间输入属性作为参数值。但是,在以下情况下,只写属性不能转换为参数:
-
有多组互斥属性,其中至少有一些是只写属性。IaC 生成器无法确定在创建期间对资源应用了哪组独占属性。例如,您可以使用其中一组属性提供
AWS::Lambda::Function
代码。-
Code/S3Bucket
、Code/S3Key
以及可选的Code/S3ObjectVersion
-
Code/ImageUri
-
Code/ZipFile
所有这些属性均为只写属性。IaC 生成器会选择其中一组独占属性并将其添加到生成的模板中。为每个只写属性添加参数。参数名称包括
OneOf
,参数说明表示相应的属性可以替换为其他独占属性。IaC 生成器为包含的属性设置的警告Type
为MUTUALLY_EXCLUSIVE_PROPERTIES
。 -
-
只写属性可以是多种数据类型中的任意一种。例如,
AWS::ApiGateway::RestApi
的Body
属性可以是object
或string
。遇到这种情况时,IaC 生成器会将警告Type
设置为MUTUALLY_EXCLUSIVE_TYPES
,并使用string
类型在生成的模板中包含该属性。 -
只写属性的类型为
array
。参数只能是标量值,因此无法将参数添加到数组模板中。遇到这种情况时,IaC 生成器不会在生成的模板中包含该属性,并将警告Type
设置为UNSUPPORTED_PROPERTIES
。 -
只写属性是可选的。IaC 生成器无法检测在设置资源时是否使用过只写属性。在这种情况下,IaC 生成器不会在生成的模板中包含该属性,并将警告
Type
设置为UNSUPPORTED_PROPERTIES
。
当生成的模板包含具有只写属性的资源时,IaC 生成器控制台会显示一条警告,其中包含问题类型的摘要。例如:
![IaC 生成器控制台关于生成的模板中包含只写属性的警告](images/IaC-generator-write-only-property-warning.png)
您可以选择查看警告详细信息以了解更多详细信息。具有只写属性的资源由生成的模板中使用的逻辑 ID 和资源类型标识。
![IaC 生成器控制台关于生成的模板中包含只写属性的详细警告](images/IaC-generator-write-only-property-resource-warning.png)
使用警告列表来识别具有只写属性的资源,并查看每个资源以确定需要对生成的模板进行哪些更改(如果有)。您可以通过选择下载按钮来下载生成的模板。更改完成后,您可以选择导入编辑的模板按钮继续。
重要
目前,AWS 资源和属性类型参考 文档并未说明属性是否为只写属性,或者其是否支持多种类型。您需要查看 IaC 生成器控制台或资源提供程序架构返回的警告,才能确定哪些属性是只写属性。
有关资源提供程序架构的更多信息,请参阅《CloudFormation 命令行界面用户指南》中的资源提供程序架构。要下载资源提供程序架构,请参阅 CloudFormation 资源提供程序架构。