解决只写属性问题 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

解决只写属性问题

使用 CloudFormation IaC 生成器,您可以使用账户中已预置但尚未由 CloudFormation 管理的资源生成模板。但是,某些资源属性被指定为只写,这意味着 CloudFormation 可以写入但不能读取这些属性,例如数据库密码。

利用现有资源生成 CloudFormation 模板时,只写属性会带来挑战。通常,CloudFormation 会在生成的模板中将这些属性转换为参数。这允许您在导入操作期间输入属性作为参数值。但在某些情况下无法实现这种转换,而且 CloudFormation 对这些情况的处理方式有所不同。

互斥属性

一些资源有多组互斥属性,其中至少有一些是只写属性。对于这些情况,IaC 生成器无法确定在创建期间对资源应用了哪组互斥属性。例如,您可以使用其中一组属性提供 AWS::Lambda::Function 代码。

  • Code/S3BucketCode/S3Key 以及可选的 Code/S3ObjectVersion

  • Code/ImageUri

  • Code/ZipFile

所有这些属性均为只写属性。IaC 生成器会选择其中一组独占属性并将其添加到生成的模板中。为每个只写属性添加参数。参数名称包括 OneOf,参数说明表示相应的属性可以替换为其他独占属性。IaC 生成器为包含的属性设置的警告类型为 MUTUALLY_EXCLUSIVE_PROPERTIES

互斥类型

在某些情况下,只写属性可以为多种数据类型。例如,AWS::ApiGateway::RestApiBody 属性可以是 objectstring。遇到这种情况时,IaC 生成器会使用 string 类型在生成的模板中包含该属性,并将警告类型设置为 MUTUALLY_EXCLUSIVE_TYPES

Array 属性

如果只写属性的类型为 array,则 IaC 生成器无法将其包含在生成的模板中,因为参数只能是标量值。在这种情况下,模板中会忽略该属性,并设置 UNSUPPORTED_PROPERTIES 警告类型。

可选属性

对于可选的只写属性,IaC 生成器无法检测在设置资源时是否使用过该属性。在这种情况下,生成的模板中会忽略该属性,并设置 UNSUPPORTED_PROPERTIES 警告类型。

警告和后续步骤

要确定哪些属性为只写属性,您必须查看 IaC 生成器控制台返回的警告。Amazon 资源和属性类型参考并未指示某个属性是否为只写属性,也未指示其是否支持多种类型。

您也可从资源提供程序架构中查看哪些属性为只写属性。要下载资源提供程序架构,请参阅 CloudFormation 资源提供程序架构

解决只写属性问题
  1. 打开 CloudFormation 控制台的 IaC 生成器页面

  2. 在屏幕顶部的导航栏中,选择模板所在的 Amazon Web Services 区域。

  3. 选择模板选项卡,然后选择您创建的模板的名称。

  4. 模板定义选项卡中,当生成的模板包含具有只写属性的资源时,IaC 生成器控制台会显示一条警告,其中包含问题类型的摘要。例如:

    IaC 生成器控制台关于生成的模板中包含只写属性的警告
  5. 选择查看警告详细信息以了解更多详情。具有只写属性的资源由生成的模板中使用的逻辑 ID 和资源类型标识。

    使用警告列表来识别具有只写属性的资源,并查看每个资源以确定需要对生成的模板进行哪些更改(如果有)。

    IaC 生成器控制台关于生成的模板中包含只写属性的详细警告
  6. 如果必须更新模板才能解决只写属性问题,请执行以下操作:

    1. 选择下载以下载模板的副本。

    2. 编辑模板。

    3. 完成更改后,您可以选择导入已编辑的模板按钮以继续完成导入过程。