Use a seção Rules em um modelo do Resource Orchestration Service (ROS) para validar valores de parâmetro antes que um stack seja criado ou atualizado. As Rules identificam configurações inválidas antecipadamente — por exemplo, quando dois parâmetros precisam ser consistentes entre si, como a exigência de pagamento conforme o uso em um ambiente de staging.
Sintaxe
Declare uma ou mais regras nomeadas na seção Rules de um modelo. Separe várias regras com vírgulas (,).
Rules:
Rule Name 1:
RuleCondition: the condition of the rule.
Assertions:
- Assert: the assertion of the rule.
AssertDescription: the description of the assertion.
- Assert: the assertion of the rule.
AssertDescription: the description of the assertion.
Rule Name 2:
Assertions:
- Assert: the assertion of the rule.
(Opcional)
RuleCondition: A condição que determina quando a regra entra em vigor.Se omitido, as asserções sempre se aplicam.-
Assertions: Uma ou mais declarações que definem os valores aceitáveis para um parâmetro.NotaCada bloco
Assertionspode conter até 100 pares deAsserteAssertDescription. Assert: A expressão de asserção. O resultado deve sertrueoufalse.(Opcional)
AssertDescription: A mensagem exibida quando uma asserção falha. Use uma mensagem orientada à ação que indique aos usuários qual valor fornecer — por exemplo, "A instância ECS deve usar pagamento conforme o uso no ambiente de staging."
Você pode definir apenas um RuleCondition para cada regra. Assertions entra em vigor somente quando RuleCondition é omitido ou retorna true. Quando Assert retorna true, os valores de parâmetro passam na validação e o stack pode prosseguir para pré-visualização, criação ou atualização.
Não é possível referenciar recursos DataSource em condições de regra ou asserções.
Exemplo
Restrições de parâmetro baseadas em ambiente
O exemplo a seguir aplica restrições específicas de ambiente usando duas regras:
No ambiente de produção (
prod), a instância ECS deve usar acesso somente via intranet (largura de banda da Internet definida como0).-
No ambiente de staging (
pre), a instância ECS deve usar pagamento conforme o uso.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 #Other properties (omitted here): null.
Cada regra usa Fn::Equals para verificar o parâmetro Environment e ativa suas asserções somente quando a condição é satisfeita. Se um usuário definir Environment como prod, mas especificar uma largura de banda diferente de zero, a criação do stack falhará com a mensagem AssertDescription.