规则(Rules)用于检验在创建或更新资源栈时传递给模板的参数值是否符合预期。

语法

您可以在ROS模板中使用关键字Rules来声明模板规则。

您可以在ROS中定义多个规则,每个规则由规则名称和规则描述组成。如果声明多个规则项,规则项之间用半角逗号(,)分隔。

Rules:
  规则1名称:
    RuleCondition: 规则条件内容
    Assertions:
      - Assert: 断言内容
        AssertDescription: 断言描述
      - Assert: 断言内容
        AssertDescription: 断言描述
  规则2名称:
    Assertions:
      - Assert: 断言内容      
  • RuleCondition(可选):定义RuleCondition规则条件。如果未定义规则条件,则断言始终生效。
  • Assertions:定义Assertions断言列表。由多个AssertAssertDescription组成,用于描述断言内容。
    说明 Assertions断言列表最多由100个AssertAssertDescription组成。
  • Assert:定义Assert断言内容。
  • AssertDescription(可选):定义AssertDescription断言描述,当断言结果为false时给出用户提示。

每个规则中最多只能定义一个RuleCondition,如果未定义RuleCondition或定义结果为true时,Assertions属性生效,反之则不生效。

如果Assert返回结果为true时,表示规则校验通过,您可以继续完成资源栈的预览、创建和更新操作。

示例

当您在生产环境创建ECS实例时,ECS实例的公网带宽必须为0。在预发环境创建ECS实例时,ECS实例的计费方式必须是按量付费。
ROSTemplateFormatVersion: '2015-09-01'
Rules:
  PublicNet:
    RuleCondition:
      Fn::Equals:
        - Ref: Environment
        - prod
    Assertions:
      - Assert:
          Fn::Equals:
            - Ref: InternetMaxBandwidthOut
            - 0
        AssertDescription: ECS instance should be intranet when the environment is prod.
  ChargeType:
    RuleCondition:
      Fn::Equals:
        - Ref: Environment
        - pre
    Assertions:
      - Assert:
          Fn::Equals:
            - Ref: InstanceChargeType
            - PayAsYouGo
        AssertDescription: ECS instance should be postpaid when the environment is pre.
Parameters:
  Environment:
    Type: String
    AllowedValues:
      - prod
      - pre
  InternetMaxBandwidthOut:
    Type: Number
    MaxValue: 10
    MinValue: 0
  InstanceChargeType:
    Type: String
    AllowedValues:
      - PayAsYouGo
      - Subscription
Resources:
  ECS:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      InternetMaxBandwidthOut:
        Ref: InternetMaxBandwidthOut
      InstanceChargeType:
        Ref: InstanceChargeType
      #省略其他属性: null