Conditions - AWS CloudFormation

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 AWS 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 AWS CloudFormation n'attribuer à la propriété une valeur spécifique que si la condition est vraie. Si la condition est fausse, AWS 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 instances Amazon EC2 avec certaines capacités. Cependant, pour l'environnement de test, vous souhaitez en utiliser moins pour faire des économies. 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 de pseudo-paramètres prédéfinis ou de valeurs de paramètres d'entrée 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. AWS 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 AWS CloudFormation.

Conditions Section

Définissez les conditions en utilisant des fonctions intrinsèques. Ces conditions déterminent à quel moment AWS CloudFormation les ressources associées sont créées.

Sections Resources et Outputs

Associez des conditions aux ressources ou aux sorties que vous souhaitez créer de manière conditionnelle. AWS CloudFormation crée les entités qui sont associées à une condition true et ignore celles qui sont associées à une condition false. 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 fonction Fn::If. Pour plus d’informations, consultez Fonctions de 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 :

Pour voir la syntaxe et obtenir des informations sur chaque fonction, consultez Fonctions de condition.

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, AWS CloudFormation crée une instance Amazon EC2 et y attache un volume. Pour un environnement de test, AWS CloudFormation crée uniquement l'instance Amazon EC2.

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, AWS 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: ...