規(guī)則(Rules)用于檢驗(yàn)在創(chuàng)建或更新資源棧時(shí)傳遞給模板的參數(shù)值是否符合預(yù)期。
語(yǔ)法
您可以在ROS模板中使用關(guān)鍵字Rules
來聲明模板規(guī)則。
您可以在ROS中定義多個(gè)規(guī)則,每個(gè)規(guī)則由規(guī)則名稱和規(guī)則描述組成。如果聲明多個(gè)規(guī)則項(xiàng),規(guī)則項(xiàng)之間用半角逗號(hào)(,)分隔。
Rules:
規(guī)則1名稱:
RuleCondition: 規(guī)則條件內(nèi)容
Assertions:
- Assert: 斷言內(nèi)容
AssertDescription: 斷言描述
- Assert: 斷言內(nèi)容
AssertDescription: 斷言描述
規(guī)則2名稱:
Assertions:
- Assert: 斷言內(nèi)容
RuleCondition
(可選):定義RuleCondition
規(guī)則條件。如果未定義規(guī)則條件,則斷言始終生效。Assertions
:定義Assertions
斷言列表。由多個(gè)Assert
和AssertDescription
組成,用于描述斷言內(nèi)容。說明Assertions
斷言列表最多由100個(gè)Assert
和AssertDescription
組成。Assert
:定義Assert
斷言內(nèi)容。AssertDescription
(可選):定義AssertDescription
斷言描述,當(dāng)斷言結(jié)果為false
時(shí)給出用戶提示。
每個(gè)規(guī)則中最多只能定義一個(gè)RuleCondition
,如果未定義RuleCondition
或定義結(jié)果為true
時(shí),Assertions
屬性生效,反之則不生效。
如果Assert
返回結(jié)果為true
時(shí),表示規(guī)則校驗(yàn)通過,您可以繼續(xù)完成資源棧的預(yù)覽、創(chuàng)建和更新操作。
示例
當(dāng)您在生產(chǎn)環(huán)境創(chuàng)建ECS實(shí)例時(shí),ECS實(shí)例的公網(wǎng)帶寬必須為0。在預(yù)發(fā)環(huán)境創(chuàng)建ECS實(shí)例時(shí),ECS實(shí)例的計(jì)費(fèi)方式必須是按量付費(fèi)。
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