如果我们在CloudFormation中有错误条件和Ref会发生什么?

时间:2018-06-28 22:56:00

标签: amazon-web-services amazon-cloudformation

我有此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:是的,缺少资源会破坏更改集!

2 个答案:

答案 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"
      ]
    },