问题描述
有没有办法检查 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 函数的形式定义自己的 macro 或 custom resource。