全部產品
Search
文件中心

Resource Orchestration Service:條件(Conditions)

更新時間:Jun 19, 2024

每個條件項都由Fn::And、Fn::Or、Fn::Not或Fn::Equals定義,在每個條件中都可以引用其他條件、參數值或者映射。您可以在模板的Resources和Outputs部分,將條件與資源關聯起來,條件和資源的關聯可以通過Fn::If 函數或者資源的Condition欄位實現。

文法

每個條件由條件名和條件組成,其中條件名為字串類型,條件是由下列函數定義。在條件中可以引用其他條件,每個條件名不能重複。

您可以在定義條件時使用如下函數,但是下列函數不能為最外層的函數。

"Fn::Select"、 "Fn::Join"、 "Fn::Split"、"Fn::Replace"、"Fn::Base64Encode"、"Fn::Base64Decode"、"Fn::MemberListToMap"、"Fn::If"、 "Fn::ListMerge"、 "Fn::GetJsonValue"、"Fn::MergeMapToList"、"Fn::SelectMapList"、"Fn::Add"、"Fn::Avg"、"Fn::Str"、"Fn::Calculate"、"Ref"(僅參數引用)、"Fn:: FindInMap"。

樣本

  • 設定Conditions。

    Conditions:
      DevEnv:
        Fn::Equals:
          - Dev
          - Ref: EnvType
      UTEnv:
        Fn::Equals:
          - UT
          - Ref: EnvType
      PREEnv:
        Fn::Not:
          Fn::Or:
            - DevEnv
            - UTEnv
      ProdEnv:
        Fn::And:
          - Fn::Equals:
              - Prod
              - Ref: EnvType
          - PREEnv         
  • 關聯Conditions和Resources。

    本樣本中,根據EnvType參數值決定是否為ECS instance建立資料盤和OSS儲存空間。

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
      EnvType:
        Default: pre
        Type: String
    Conditions:
      CreateProdRes:
        Fn::Equals:
          - prod
          - Ref: EnvType
    Resources:
      WebServer:
        Type: ALIYUN::ECS::Instance
        Properties:
          DiskMappings:
            Fn::If:
              - CreateProdRes
              - - Category: cloud_efficiency
                  DiskName: FirstDataDiskName
                  Size: 40
                - Category: cloud_ssd
                  DiskName: SecondDataDiskName
                  Size: 40
              - Ref: ALIYUN::NoValue
          VpcId: vpc-2zew9pxh2yirtzqxd****
          SystemDiskCategory: cloud_efficiency
          SecurityGroupId: sg-2zece6wcqriejf1v****
          SystemDiskSize: 40
          ImageId: centos_6_8_64_40G_base_2017****.vhd
          IoOptimized: optimized
          VSwitchId: vsw-2zed9txvy7h2srqo6****
          InstanceType: ecs.n1.medium
      OssBucket:
        Type: ALIYUN::OSS::Bucket
        Condition: CreateProdRes
        Properties:
          AccessControl: private
          BucketName: myprodbucket
    Outputs:
      InstanceId:
        Value:
          Fn::GetAtt:
            - WebServer
            - InstanceId
      OssDomain:
        Condition: CreateProdRes
        Value:
          Fn::GetAtt:
            - OssBucket
            - DomainName