代码之家  ›  专栏  ›  技术社区  ›  Orest

如果在cloudformation中有错误的条件和ref,会发生什么?

  •  0
  • Orest  · 技术社区  · 8 年前

    我有这个cloudformation配置:

    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 是吗?或者只是跳过参考 DevoSnsTopic 是吗?

    是的,丢失的资源会破坏变更集!

    2 回复  |  直到 8 年前
        1
  •  1
  •   maafk    8 年前

    如果你担心一个无效的参考,如果 UseDevoTopic 是假的 DevoSnsTopic 尚未创建,您可以使用 Fn::If 条件和提供 AWS::NoValue 伪参数如果为假

    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]
    
        2
  •  0
  •   John Rotenstein    8 年前

    只有在 Condition 计算结果为true。如果不是这样,则不会创建资源。

    这是在dev/test/prod系统之间部署不同资源(或具有不同属性的资源)或执行一些if/then逻辑来指定值的一种好方法。

    以下是CloudInformation模板中的一些片段,它们根据部署的区域进行不同的部署:

    "Conditions": {
        "InUsEast1": {
          "Fn::Equals": [
            {
              "Ref": "AWS::Region"
            },
            "us-east-1"
          ]
        },