Utilice la sección Conditions para definir la lógica condicional que determina si se crean recursos, propiedades y salidas. Defina las instrucciones de condición con Fn::And, Fn::Or, Fn::Not o Fn::Equals mediante referencias a parámetros, asignaciones u otras condiciones; después, asocie cada condición con los recursos o salidas correspondientes mediante la clave Condition o Fn::If.
Sintaxis
Funcionamiento de las condiciones
Para usar condiciones en una plantilla, siga estos pasos:
Definir parámetros de entrada: Declare en la sección Parameters los valores que evaluarán sus condiciones.
Definir condiciones: Escriba las instrucciones de condición en la sección Conditions mediante las funciones compatibles que se enumeran a continuación. Cada nombre de condición debe ser único y de tipo String. Las condiciones pueden hacer referencia a otras condiciones.
Asociar condiciones con recursos o salidas: Haga referencia a las condiciones en la sección Resources (mediante la clave
ConditionoFn::If) y en la sección Outputs (mediante la claveCondition) para controlar qué elementos se crean.
Funciones de condición
Use las siguientes funciones para definir instrucciones de condición:
Las siguientes funciones son compatibles dentro de las instrucciones de condición, pero no pueden usarse como función externa en una condición:
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 (solo referencias a parámetros) y Fn::FindInMap.
Ejemplos
-
Definición de condiciones
El siguiente ejemplo define cuatro condiciones basadas en un parámetro
EnvType.DevEnvyUTEnvcomprueban un valor de entorno específico.PREEnves verdadera cuando niDevEnvniUTEnvson verdaderas.ProdEnvcombina una comprobación de igualdad conPREEnvmedianteFn::Andpara mostrar cómo componer condiciones a partir de otras.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 -
Asociación de condiciones con recursos y salidas
Este ejemplo usa
EnvTypepara controlar la creación de recursos. CuandoEnvTypeesprod, la plantilla crea discos de datos para la instancia de Elastic Compute Service (ECS) y aprovisiona un bucket de Object Storage Service (OSS). SiEnvTypetiene cualquier otro valor, no se crean ni los discos de datos ni el bucket de OSS, y se suprime la salida correspondiente. El ejemplo muestra tres formas de usar una condición: - **Fn::Ifen un valor de propiedad**: Establece condicionalmenteDiskMappingsen la instancia ECS (WebServer). - **ClaveConditionen un recurso**: Controla la creación de todo el recursoOssBucket. - **ClaveConditionen una salida**: SuprimeOssDomaincuando el bucket no existe.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