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

IaC 生成器和只写属性

只写属性是可以写入 Amazon CloudFormation 但其无法读取的资源属性。(例如,数据库密码。) 这会导致从现有资源生成模板时出现问题。通常,只写属性会转换为生成的模板中的参数。这允许您在导入操作期间输入属性作为参数值。但是,在以下情况下,只写属性不能转换为参数:

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

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

    • Code/ImageUri

    • Code/ZipFile

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

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

  3. 只写属性的类型为 array。参数只能是标量值,因此无法将参数添加到数组模板中。遇到这种情况时,IaC 生成器不会在生成的模板中包含该属性,并将警告 Type 设置为 UNSUPPORTED_PROPERTIES

  4. 只写属性是可选的。IaC 生成器无法检测在设置资源时是否使用过只写属性。在这种情况下,IaC 生成器不会在生成的模板中包含该属性,并将警告 Type 设置为 UNSUPPORTED_PROPERTIES

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


   IaC 生成器控制台关于生成的模板中包含只写属性的警告

您可以选择查看警告详细信息以了解更多详细信息。具有只写属性的资源由生成的模板中使用的逻辑 ID 和资源类型标识。


   IaC 生成器控制台关于生成的模板中包含只写属性的详细警告

使用警告列表来识别具有只写属性的资源,并查看每个资源以确定需要对生成的模板进行哪些更改(如果有)。您可以通过选择下载按钮来下载生成的模板。更改完成后,您可以选择导入编辑的模板按钮继续。

重要

目前,Amazon 资源和属性类型参考 文档并未说明属性是否为只写属性,或者其是否支持多种类型。您需要查看 IaC 生成器控制台或资源提供程序架构返回的警告,才能确定哪些属性是只写属性。

有关资源提供程序架构的更多信息,请参阅《CloudFormation 命令行界面用户指南》中的资源提供程序架构。要下载资源提供程序架构,请参阅 CloudFormation 资源提供程序架构