规则(Rules)用于检验在创建或更新资源栈时传递给模板的参数值是否符合预期。
语法
您可以在ROS模板中使用关键字Rules
来声明模板规则。
您可以在ROS中定义多个规则,每个规则由规则名称和规则描述组成。如果声明多个规则项,规则项之间用半角逗号(,)分隔。
Rules:
规则1名称:
RuleCondition: 规则条件内容
Assertions:
- Assert: 断言内容
AssertDescription: 断言描述
- Assert: 断言内容
AssertDescription: 断言描述
规则2名称:
Assertions:
- Assert: 断言内容
RuleCondition
(可选):定义RuleCondition
规则条件。如果未定义规则条件,则断言始终生效。Assertions
:定义Assertions
断言列表。由多个Assert
和AssertDescription
组成,用于描述断言内容。说明Assertions
断言列表最多由100个Assert
和AssertDescription
组成。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