La section Conditions permet de définir une logique conditionnelle qui contrôle la création des ressources, des propriétés et des sorties. Définissez des instructions de condition à l'aide des fonctions Fn::And, Fn::Or, Fn::Not ou Fn::Equals — en faisant référence à des paramètres, des mappages ou d'autres conditions — puis associez chaque condition aux ressources ou aux sorties à l'aide de la clé Condition ou de la fonction Fn::If.
Syntaxe
Fonctionnement des conditions
Pour utiliser des conditions dans un modèle, procédez comme suit :
Définissez les paramètres d'entrée — Déclarez dans la section Parameters les valeurs que vos conditions évalueront.
Définissez les conditions — Rédigez les instructions de condition dans la section Conditions en utilisant les fonctions prises en charge listées ci-dessous. Chaque nom de condition doit être unique et de type String. Les conditions peuvent faire référence à d'autres conditions.
Associez les conditions aux ressources ou aux sorties — Référencez les conditions dans la section Resources (via la clé
Conditionou la fonctionFn::If) et dans la section Outputs (via la cléCondition) afin de contrôler les éléments créés.
Fonctions de condition
Utilisez les fonctions suivantes pour définir des instructions de condition :
Les fonctions suivantes sont prises en charge au sein des instructions de condition, mais ne peuvent pas constituer la fonction racine d'une condition :
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 (références de paramètres uniquement) et Fn::FindInMap.
Exemples
-
Définir des conditions
L'exemple suivant définit quatre conditions basées sur un paramètre
EnvType.DevEnvetUTEnvvérifient chacune une valeur d'environnement spécifique.PREEnvest vraie lorsque niDevEnvniUTEnvn'est vraie.ProdEnvcombine une vérification d'égalité avecPREEnvà l'aide deFn::And, illustrant comment composer des conditions à partir d'autres conditions.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 -
Associer des conditions aux ressources et aux sorties
L'exemple suivant utilise
EnvTypepour contrôler la création de ressources. LorsqueEnvTypeest défini surprod, le modèle crée des disques de données pour l'instance Elastic Compute Service (ECS) et provisionne un bucket Object Storage Service (OSS). LorsqueEnvTypeprend toute autre valeur, ni les disques de données ni le bucket OSS ne sont créés, et la sortie correspondante est supprimée. Cet exemple illustre trois façons d'utiliser une condition : - **Fn::Ifsur une valeur de propriété** — Définit conditionnellementDiskMappingssur l'instance ECS (WebServer). - **CléConditionsur une ressource** — Contrôle la création de la ressourceOssBucketdans son intégralité. - **CléConditionsur une sortie** — SupprimeOssDomainlorsque le bucket n'existe pas.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