Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Conditions
La section Conditions
facultative contient des instructions qui définissent les circonstances dans lesquelles les entités sont créées et configurées. Par exemple, vous pouvez créer une condition, puis l'associer à une ressource ou à une sortie afin de CloudFormation ne créer la ressource ou la sortie que si la condition est vraie. De même, vous pouvez associer la condition à une propriété afin de CloudFormation n'attribuer à la propriété une valeur spécifique que si la condition est vraie. Si la condition est fausse, CloudFormation attribue à la propriété une valeur différente de celle que vous spécifiez.
Vous pouvez utiliser les conditions lorsque vous souhaitez réutiliser un modèle qui permet de créer des ressources dans différents contextes, comme dans un environnement de test et un environnement de production. Dans votre modèle, vous pouvez ajouter un paramètre d'entrée EnvironmentType
, qui accepte prod
ou test
comme entrées. Pour l'environnement de production, vous pouvez inclure des EC2 instances Amazon dotées de certaines fonctionnalités ; toutefois, pour l'environnement de test, vous souhaitez utiliser des fonctionnalités réduites pour économiser de l'argent. Les conditions vous permettent de définir quelles ressources sont créées et comment elles sont configurées pour chaque type d'environnement.
Les conditions sont évaluées en fonction des valeurs des paramètres d'entrée ou des pseudo-paramètres prédéfinis que vous spécifiez lorsque vous créez ou mettez à jour une pile. Dans chaque condition, vous pouvez faire référence à une autre condition, une valeur de paramètre ou un mappage. Une fois que vous avez défini toutes les conditions, vous pouvez les associer aux ressources et à leurs propriétés dans les sections Resources
et Outputs
d'un modèle.
Lors de la création ou de la mise à jour de la pile, AWS CloudFormation évalue toutes les conditions de votre modèle avant de créer des ressources. Les ressources qui sont associées à une condition true sont créées. Les ressources associées à une fausse condition sont ignorées. CloudFormation réévalue également ces conditions à chaque mise à jour de la pile avant de mettre à jour les ressources. Les ressources qui sont toujours associées à une condition true sont mises à jour. Les ressources qui sont désormais associés à une condition false sont supprimées.
Important
Pendant une mise à jour de la pile, vous ne pouvez pas mettre à jour les conditions. Vous pouvez uniquement les mettre à jour lorsque vous intégrez des changements qui ajoutent, modifient ou suppriment des ressources.
Utilisation des conditions
En fonction de l'entité que vous voulez créer ou configurer de façon conditionnelle, vous devez inclure des déclarations dans les sections suivantes du modèle :
Parameters
Section-
Définissez les entrées que vous voulez que vos conditions évaluent. Les conditions équivalent à true ou à false en fonction des valeurs de ces paramètres d'entrée. Si vous souhaitez que vos conditions évaluent des pseudo-paramètres, vous n'avez pas besoin de définir les pseudo-paramètres dans cette section ; les pseudo-paramètres sont prédéfinis par CloudFormation. Pour plus d'informations sur les pseudo-paramètres, consultez Référence des pseudo-paramètres.
Conditions
Section-
Définissez les conditions en utilisant des fonctions intrinsèques. Ces conditions déterminent à quel moment CloudFormation les ressources associées sont créées. Pour des exemples, consultez la section Exemples de modèles.
- Sections
Resources
etOutputs
-
Associez des conditions aux ressources ou aux sorties que vous souhaitez créer de manière conditionnelle. CloudFormation crée des entités associées à une condition vraie et ignore les entités associées à une fausse condition. Utilisez la clé
Condition
et l'ID logique d'une condition pour l'associer à une ressource ou à une sortie. Pour spécifier une propriété de manière conditionnelle, utilisez la fonctionFn::If
. Pour un exemple, consultez la section Associer une condition.
Syntaxe
La section Conditions
se compose du nom de clé Conditions
. Chaque déclaration de condition inclut un ID de logique et des fonctions intrinsèques qui sont évaluées lorsque vous créez ou mettez à jour une pile. Le pseudo-modèle suivant illustre la section Conditions
:
JSON
"Conditions" : { "
MyLogicalID
" : {Intrinsic function
} }
YAML
Conditions:
MyLogicalID
:Intrinsic function
Fonctions intrinsèques de condition
Vous pouvez utiliser les fonctions intrinsèques suivantes pour définir des conditions :
-
Fn::And
-
Fn::Equals
-
Fn::ForEach
-
Fn::If
-
Fn::Not
-
Fn::Or
Pour la syntaxe et les informations relatives à chaque fonction de condition, consultez la section Fonctions de condition. Pour en savoir plus sur la syntaxe et les informations relatives àFn::ForEach
, voir Fn::ForEach.
Note
Fn::If
n'est pris en charge que dans l'attribut de métadonnées, l'attribut de politique de mise à jour et les valeurs de propriété dans les sections Resources
et Outputs
d'un modèle.
Exemples
Condition simple
L'exemple de modèle suivante inclut un paramètre d'entrée EnvType
, où vous pouvez spécifier prod
afin de créer une pile pour la production ou test
afin de créer une pile pour les tests. Pour un environnement de production, CloudFormation crée une EC2 instance Amazon et y attache un volume. Pour un environnement de test, CloudFormation crée uniquement l'EC2instance Amazon.
La condition CreateProdResources
a la valeur true
si le paramètre EnvType
est égal à prod
. Dans l'exemple de modèle, les ressources NewVolume
et MountPoint
sont associées à la condition CreateProdResources
. Par conséquent, les ressources sont créées uniquement si le paramètre EnvType
est égal à prod
.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type.", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test." } }, "Conditions": { "CreateProdResources": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "CreateProdResources", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "CreateProdResources", "Properties": { "Size": 100, "AvailabilityZone": { "Fn::GetAtt": [ "EC2Instance", "AvailabilityZone" ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Description: Environment type. Default: test Type: String AllowedValues: - prod - test ConstraintDescription: must specify prod or test. Conditions: CreateProdResources: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 MountPoint: Type: 'AWS::EC2::VolumeAttachment' Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: 'AWS::EC2::Volume' Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone
Condition imbriquée
L'exemple de modèle suivant fait référence à une condition dans une autre condition. Vous pouvez créer une pile qui crée un compartiment S3. Pour une pile déployée dans un environnement de production, CloudFormation crée une politique pour le compartiment S3.
JSON
{ "Parameters": { "EnvType": { "Type": "String", "AllowedValues": [ "prod", "test" ] }, "BucketName": { "Default": "", "Type": "String" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] }, "CreateBucket": { "Fn::Not": [ { "Fn::Equals": [ { "Ref": "BucketName" }, "" ] } ] }, "CreateBucketPolicy": { "Fn::And": [ { "Condition": "IsProduction" }, { "Condition": "CreateBucket" } ] } }, "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Condition": "CreateBucket" }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": "..." } } } }
YAML
Parameters: EnvType: Type: String AllowedValues: - prod - test BucketName: Default: '' Type: String Conditions: IsProduction: !Equals - !Ref EnvType - prod CreateBucket: !Not - !Equals - !Ref BucketName - '' CreateBucketPolicy: !And - !Condition IsProduction - !Condition CreateBucket Resources: Bucket: Type: 'AWS::S3::Bucket' Condition: CreateBucket Policy: Type: 'AWS::S3::BucketPolicy' Condition: CreateBucketPolicy Properties: Bucket: !Ref BucketName PolicyDocument: ...