如何检查 CloudFormation 模板中未定义的资源属性?

问题描述

有没有办法检查 CloudFormation 模板中未定义的资源属性(由 Fn::GetAtt 返回)?

仅当定义了这些属性时,我才想使用 Fn::GetAtt 在堆栈的输出中包含指定资源的属性

例如,使用以下模板创建堆栈会给我一个错误

"属性:找不到资源的 StreamArn:MyTestStack-DDBTable-1C0T2MJZA1J0I。用户请求回滚。"

因为流规范未包含在此特定表的资源属性中。

当然,解决这个问题的简单方法就是从堆栈输出列表中删除 StreamArn。但是,我还是想知道如何检查是否为指定资源定义了该属性

任何建议将不胜感激。

  • 帕特

{
   "Resources":{
      "DDBTable":{
         "Type":"AWS::DynamoDB::Table","Properties":{
            "AttributeDeFinitions":[
               {
                  "AttributeName":"ArtistId","AttributeType":"S"
               },{
                  "AttributeName":"Concert",{
                  "AttributeName":"TicketSales","AttributeType":"S"
               }
            ],"GlobalSecondaryIndexes":[
               {
                  "IndexName":"GSI","KeySchema":[
                     {
                        "AttributeName":"TicketSales","KeyType":"HASH"
                     }
                  ],"Projection":{
                     "ProjectionType":"KEYS_ONLY"
                  },"ProvisionedThroughput":{
                     "ReadCapacityUnits":5,"WriteCapacityUnits":5
                  }
               }
            ],"KeySchema":[
               {
                  "AttributeName":"ArtistId","KeyType":"HASH"
               },"KeyType":"RANGE"
               }
            ],"ProvisionedThroughput":{
               "ReadCapacityUnits":5,"WriteCapacityUnits":5
            }
         }
      }
   },"Outputs":{
      "DDBTablePhysicalID":{
         "Value":{
            "Ref":"DDBTable"
         }
      },"DDBTableArn":{
         "Value":{
            "Fn::GetAtt":[
               "DDBTable","Arn"
            ]
         }
      },"DDBTableStreamArn":{
         "Value":{
            "Fn::GetAtt":[
               "DDBTable","StreamArn"
            ]
         }
      }
   }
}

解决方法

仅当定义了这些属性时。

它在普通 CFN 中不支持。您必须以 lambda 函数的形式定义自己的 macrocustom resource