CloudFormation Conditionssyntaxe du modèle - 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.

CloudFormation Conditionssyntaxe du modèle

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 et l'associer à une ressource ou à une sortie afin de CloudFormation créer la ressource ou la sortie uniquement si la condition est vraie. De même, vous pouvez associer une condition à une propriété afin de CloudFormation définir une valeur spécifique à la propriété uniquement si la condition est vraie. Si la condition est fausse, CloudFormation définit la propriété sur une valeur alternative que vous spécifiez.

Vous pouvez utiliser des conditions lorsque vous souhaitez réutiliser un modèle pour créer des ressources dans différents contextes, tels que des environnements de test ou de production. Par exemple, dans votre modèle, vous pouvez ajouter un paramètre EnvironmentType d'entrée qui accepte l'une ou l'autre des entrées prod ou test en tant que telles. Pour l'prodenvironnement, vous pouvez inclure des EC2 instances dotées de certaines fonctionnalités, tandis que pour l'testenvironnement, vous pouvez utiliser des fonctionnalités réduites pour économiser de l'argent. Cette définition de condition vous permet de définir quelles ressources sont créées et comment elles sont configurées pour chaque type d'environnement.

Syntaxe

La section Conditions se compose du nom de clé Conditions. Chaque déclaration de condition inclut un identifiant logique et une ou plusieurs fonctions intrinsèques.

JSON

"Conditions": { "LogicalConditionName1": { "Intrinsic function": ...[ }, "LogicalConditionName2": { "Intrinsic function": ... } }

YAML

Conditions: LogicalConditionName1: Intrinsic function: ... LogicalConditionName2: Intrinsic function: ...

Comment fonctionnent les conditions

Pour utiliser les conditions, procédez comme suit :

  1. Ajouter une définition de paramètre : définissez les entrées que vos conditions évalueront dans la Parameters section de votre modèle. Les conditions sont évaluées comme vraies ou fausses en fonction de ces valeurs de paramètres d'entrée. Notez que les pseudo-paramètres sont automatiquement disponibles et ne nécessitent pas de définition explicite dans la Parameters section. Pour plus d'informations sur les pseudo-paramètres, consultez Obtenir des AWS valeurs à l'aide de pseudo-paramètres.

  2. Ajouter une définition de condition : définissez les conditions dans la Conditions section à l'aide de fonctions intrinsèques telles que Fn::If ouFn::Equals. Ces conditions déterminent à quel moment CloudFormation les ressources associées sont créées. Les conditions peuvent être basées sur :

    • Valeurs d'entrée ou de pseudo-paramètres

    • Autres conditions

    • Valeurs de mappage

    Cependant, vous ne pouvez pas référencer la logique des ressources IDs ou leurs attributs dans certaines conditions.

  3. Associer des conditions à des ressources ou à des sorties : référencez les conditions dans les ressources ou les sorties à l'aide de la Condition clé et de l'identifiant logique d'une condition. Utilisez-le éventuellement Fn::If dans d'autres parties du modèle (telles que les valeurs des propriétés) pour définir des valeurs en fonction d'une condition. Pour de plus amples informations, veuillez consulter À l'aide de la Condition clé.

CloudFormation évalue les conditions lors de la création ou de la mise à jour d'une pile. CloudFormation crée des entités associées à une condition vraie et ignore les entités associées à une fausse condition. CloudFormation réévalue également ces conditions lors de chaque mise à jour de la pile avant de modifier les ressources. Les entités qui restent associées à une condition vraie sont mises à jour, tandis que celles associées à une fausse condition 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.

Fonctions intrinsèques de condition

Vous pouvez utiliser les fonctions intrinsèques suivantes pour définir des conditions :

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.

À l'aide de la Condition clé

Une fois qu'une condition est définie, vous pouvez l'appliquer à plusieurs endroits du modèle, par exemple Resources et Outputs à l'aide de la Condition clé. La Condition clé fait référence au nom logique d'une condition et renvoie le résultat évalué de la condition spécifiée.

Associer les conditions aux ressources

Pour créer des ressources de manière conditionnelle, ajoutez la Condition clé et l'ID logique de la condition en tant qu'attribut à la ressource. CloudFormation crée la ressource uniquement lorsque la condition est considérée comme vraie.

JSON

"NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "IsProduction", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} } }

YAML

NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone

Associer des conditions aux sorties

Vous pouvez également associer des conditions aux sorties. CloudFormation crée la sortie uniquement lorsque la condition associée est considérée comme vraie.

JSON

"Outputs" : { "VolumeId" : { "Condition" : "IsProduction", "Value" : { "Ref" : "NewVolume" } } }

YAML

Outputs: VolumeId: Condition: IsProduction Value: !Ref NewVolume

Conditions de référence dans d'autres conditions

Lorsque vous définissez des conditions dans la Conditions section, vous pouvez référencer d'autres conditions à l'aide de la Condition clé. Cela vous permet de créer une logique conditionnelle plus complexe en combinant plusieurs conditions.

Dans l'exemple suivant, la IsProdAndFeatureEnabled condition est évaluée comme vraie uniquement si les IsFeatureEnabled conditions IsProduction et sont considérées comme vraies.

JSON

"Conditions": { "IsProduction" : {"Fn::Equals" : [{"Ref" : "Environment"}, "prod"]}, "IsFeatureEnabled" : { "Fn::Equals" : [{"Ref" : "FeatureFlag"}, "enabled"]}, "IsProdAndFeatureEnabled" : { "Fn::And" : [ {"Condition" : "IsProduction"}, {"Condition" : "IsFeatureEnabled"} ] } }

YAML

Conditions: IsProduction: !Equals [!Ref Environment, "prod"] IsFeatureEnabled: !Equals [!Ref FeatureFlag, "enabled"] IsProdAndFeatureEnabled: !And - !Condition IsProduction - !Condition IsFeatureEnabled

Renvoie les valeurs des propriétés de manière conditionnelle en utilisant Fn::If

Pour un contrôle plus précis, vous pouvez utiliser la fonction Fn::If intrinsèque pour renvoyer de manière conditionnelle l'une des deux valeurs de propriété dans les ressources ou les sorties. Cette fonction évalue une condition et renvoie une valeur si la condition est vraie et une autre valeur si la condition est fausse.

Valeurs de propriété conditionnelles

L'exemple suivant montre comment définir un type d' EC2 instance en fonction d'une condition environnementale. Si la IsProduction condition est vraie, le type d'instance est défini sur. c5.xlarge Dans le cas contraire, il est réglé surt3.small.

JSON
"Properties" : { "InstanceType" : { "Fn::If" : [ "IsProduction", "c5.xlarge", "t3.small" ] } }
YAML
Properties: InstanceType: !If - IsProduction - c5.xlarge - t3.small

Enlèvement de propriété conditionnel

Vous pouvez également utiliser le AWS::NoValue pseudo-paramètre comme valeur de retour pour supprimer la propriété correspondante lorsqu'une condition est fausse.

JSON
"DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] }
YAML
DBSnapshotIdentifier: !If - UseDBSnapshot - !Ref DBSnapshotName - !Ref "AWS::NoValue"

Exemples

Création de ressources basée sur l'environnement

Les exemples suivants fournissent une EC2 instance et créent et attachent de manière conditionnelle un nouveau volume EBS uniquement si le type d'environnement est. prod Si c'est le castest, ils créent simplement l' EC2 instance sans le volume supplémentaire.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-1234567890abcdef0", "InstanceType": "c5.xlarge" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "IsProduction", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "IsProduction", "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: IsProduction: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: ami-1234567890abcdef0 InstanceType: c5.xlarge MountPoint: Type: AWS::EC2::VolumeAttachment Condition: IsProduction Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: AWS::EC2::Volume Condition: IsProduction Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone

Approvisionnement de ressources multiconditions

Les exemples suivants créent un compartiment S3 de manière conditionnelle si un nom de compartiment est fourni et associent une politique de compartiment uniquement lorsque l'environnement est défini sur. prod Si aucun nom de compartiment n'est donné ou si l'environnement l'esttest, aucune ressource n'est créée.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "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", "Properties": { "BucketName": { "Ref": "BucketName" } } }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": { ... } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 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 Properties: BucketName: !Ref BucketName Policy: Type: AWS::S3::BucketPolicy Condition: CreateBucketPolicy Properties: Bucket: !Ref Bucket PolicyDocument: ...

Dans cet exemple, la CreateBucketPolicy condition montre comment référencer d'autres conditions à l'aide de la Condition clé. La politique est créée uniquement lorsque les CreateBucket conditions IsProduction et sont toutes deux vérifiées.

Note

Pour des exemples plus complexes d'utilisation de conditions, consultez la rubrique relative aux Conditionattributs dans le Guide de référence des AWS CloudFormation modèles.