Use a seção Conditions para definir a lógica condicional que determina a criação de recursos, propriedades e outputs. Defina instruções de condição com Fn::And, Fn::Or, Fn::Not ou Fn::Equals — referenciando parâmetros, mapeamentos ou outras condições — e associe cada condição a recursos ou outputs por meio da chave Condition ou de Fn::If.
Sintaxe
Funcionamento das condições
Para usar condições em um modelo, siga estas etapas:
Defina os parâmetros de entrada — Declare na seção Parameters os valores que as condições avaliarão.
Defina as condições — Escreva instruções de condição na seção Conditions usando as funções compatíveis listadas abaixo. Cada nome de condição deve ser único e do tipo String. Condições podem referenciar outras condições.
Associe condições a recursos ou outputs — Referencie as condições na seção Resources (por meio da chave
Conditionou deFn::If) e na seção Outputs (por meio da chaveCondition) para controlar o que será criado.
Funções de condição
Use as seguintes funções para definir instruções de condição:
As funções a seguir são compatíveis dentro de instruções de condição, mas não podem ser a função mais externa em uma condição:
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 (apenas referências de parâmetros) e Fn::FindInMap.
Exemplos
-
Definição de condições
O exemplo a seguir define quatro condições com base no parâmetro
EnvType.DevEnveUTEnvverificam, cada uma, um valor específico de ambiente.PREEnvé verdadeira quando nemDevEnvnemUTEnvforem verdadeiras.ProdEnvcombina uma verificação de igualdade comPREEnvusandoFn::And, demonstrando como compor condições a partir de outras.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 -
Associação de condições a recursos e outputs
O exemplo abaixo usa
EnvTypepara controlar a criação de recursos. QuandoEnvTypeforprod, o modelo cria discos de dados para a instância do Elastic Compute Service (ECS) e provisiona um bucket do Object Storage Service (OSS). SeEnvTypetiver qualquer outro valor, nem os discos de dados nem o bucket OSS serão criados, e o output correspondente será suprimido. Este exemplo demonstra três formas de usar uma condição: - **Fn::Ifem um valor de propriedade** — Define condicionalmenteDiskMappingsna instância ECS (WebServer). - **ChaveConditionem um recurso** — Controla a criação de todo o recursoOssBucket. - **ChaveConditionem um output** — SuprimeOssDomainquando o bucket não existir.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