解决只写属性问题
使用 CloudFormation IaC 生成器,您可以使用账户中已预置但尚未由 CloudFormation 管理的资源生成模板。但是,某些资源属性被指定为只写,这意味着 CloudFormation 可以写入但不能读取这些属性,例如数据库密码。
利用现有资源生成 CloudFormation 模板时,只写属性会带来挑战。通常,CloudFormation 会在生成的模板中将这些属性转换为参数。这允许您在导入操作期间输入属性作为参数值。但在某些情况下无法实现这种转换,而且 CloudFormation 对这些情况的处理方式有所不同。
互斥属性
一些资源有多组互斥属性,其中至少有一些是只写属性。对于这些情况,IaC 生成器无法确定在创建期间对资源应用了哪组互斥属性。例如,您可以使用其中一组属性提供 AWS::Lambda::Function 代码。
-
Code/S3Bucket
、Code/S3Key
以及可选的Code/S3ObjectVersion
-
Code/ImageUri
-
Code/ZipFile
所有这些属性均为只写属性。IaC 生成器会选择其中一组独占属性并将其添加到生成的模板中。为每个只写属性添加参数。参数名称包括 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 命令行界面用户指南》中的 Resource provider schema。
解决只写属性问题
-
打开 CloudFormation 控制台的 IaC 生成器页面
。 -
在屏幕顶部的导航栏中,选择模板所在的 AWS 区域。
-
选择模板选项卡,然后选择您创建的模板的名称。
-
在模板定义选项卡中,当生成的模板包含具有只写属性的资源时,IaC 生成器控制台会显示一条警告,其中包含问题类型的摘要。例如:
-
选择查看警告详细信息以了解更多详情。具有只写属性的资源由生成的模板中使用的逻辑 ID 和资源类型标识。
使用警告列表来识别具有只写属性的资源,并查看每个资源以确定需要对生成的模板进行哪些更改(如果有)。
-
如果必须更新模板才能解决只写属性问题,请执行以下操作:
-
选择下载以下载模板的副本。
-
编辑模板。
-
完成更改后,您可以选择导入已编辑的模板按钮以继续完成导入过程。
-