我有此CloudFormation配置:
systemctl start/restart/stop elasticsearch
如果Resources:
DevoSnsTopic:
Type: AWS::SNS::Topic
Condition: UseDevoTopic
...
SnsTopic:
Type: AWS::SNS::Topic
...
QueuePolicy:
Properties:
Condition:
'ForAnyValue:ArnEquals':
'aws:SourceArn':
- Ref: SnsTopic
- Ref: DevoSnsTopic
等于UseDevoTopic
,它会中断吗?还是只是跳过对false
的引用?
UPD:是的,缺少资源会破坏更改集!
答案 0 :(得分:1)
如果在UseDevoTopic
为假且尚未创建DevoSnsTopic
的情况下担心无效引用,则可以使用Fn::If
条件并提供{{3} }如果为假,则为伪参数
Resources:
DevoSnsTopic:
Type: AWS::SNS::Topic
Condition: UseDevoTopic
...
SnsTopic:
Type: AWS::SNS::Topic
...
QueuePolicy:
Properties:
Condition:
'ForAnyValue:ArnEquals':
'aws:SourceArn':
- Ref: SnsTopic
- !If [UseDevoTopic, !Ref DevoSnsTopic, AWS::NoValue]
答案 1 :(得分:0)
仅当Condition
计算为true时,才会创建资源。这不是事实,那么将不会创建资源。
这是在Dev / Test / Prod系统之间部署不同资源(或具有不同属性的资源)或执行一些if / then逻辑以指定值的好方法。
以下是CloudFormation模板的一些摘要,该模板根据部署区域的不同而有所不同:
"Conditions": {
"InUsEast1": {
"Fn::Equals": [
{
"Ref": "AWS::Region"
},
"us-east-1"
]
},