Fonctions de condition - 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.

Fonctions de condition

Vous pouvez utiliser des fonctions intrinsèques, telles que Fn::If, Fn::Equals et Fn::Not, pour créer les ressources d'une pile de manière conditionnelle. Ces conditions sont évaluées en fonction des paramètres d'entrée que vous déclarez lorsque vous créez ou mettez à jour une pile. Une fois que vous avez défini toutes les conditions, vous pouvez les associer à des ressources ou à des propriétés de ressource dans les sections Resources et Outputs d'un modèle.

Vous définissez toutes les conditions dans la section Conditions d'un modèle, à l'exception des conditions Fn::If. Vous pouvez utiliser la condition Fn::If 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.

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 moins de fonctionnalités afin de réduire les coûts. Les conditions vous permettent de définir quelles ressources sont créées et comment elles sont configurées pour chaque type d'environnement.

Pour plus d'informations sur la section Conditions, consultez Conditions référence de syntaxe de section pour les CloudFormation modèles.

Note

Vous pouvez uniquement faire référence à d'autres conditions et à d'autres valeurs dans les sections Parameters et Mappings d'un modèle. Par exemple, vous pouvez faire référence à une valeur de paramètre d'entrée, mais vous ne pouvez pas faire référence à l'ID logique d'une ressource dans une condition.

Association d'une condition

Pour créer des ressources, des propriétés de ressource ou des sorties de manière conditionnelle, vous devez y associer une condition. Ajoutez la Condition: clé et l'ID logique de la condition en tant qu'attribut pour associer une condition, comme indiqué dans l'extrait suivant. AWS CloudFormation crée la NewVolume ressource uniquement lorsque la CreateProdResources condition est considérée comme vraie.

JSON

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

YAML

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

Fn::If

Pour la fonction Fn::If, vous devez uniquement spécifier le nom de la condition. L'extrait suivant montre comment utiliser Fn::If pour spécifier une propriété de ressource de façon conditionnelle. Si la CreateLargeSize condition est vraie, CloudFormation définit la taille du volume sur100. Si la condition est fausse, CloudFormation définit la taille du volume sur10.

JSON

{ "NewVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": { "Fn::If": [ "CreateLargeSize", "100", "10" ] }, "AvailabilityZone": { "Fn::GetAtt": [ "Ec2Instance", "AvailabilityZone" ] } }, "DeletionPolicy": "Snapshot" } }

YAML

NewVolume: Type: 'AWS::EC2::Volume' Properties: Size: 'Fn::If': - CreateLargeSize - '100' - '10' AvailabilityZone: 'Fn::GetAtt': - Ec2Instance - AvailabilityZone DeletionPolicy: Snapshot

Conditions imbriquées

Vous pouvez également utiliser les conditions dans d'autres conditions. L'extrait suivant est issu de la section Conditions d'un modèle. La condition MyAndCondition inclut la condition SomeOtherCondition :

JSON
"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }
YAML
MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref "ASecurityGroup"] - !Condition SomeOtherCondition

Fn::And

Renvoie true si toutes les conditions spécifiées sont vraies, ou retourne false si l'une des conditions est fausse. Fn::Andagit en tant qu'ANDopérateur. Le nombre minimum de conditions que vous pouvez inclure est de 2, et la valeur maximale est de 10.

Déclaration

JSON

"Fn::And": [{condition}, {...}]

YAML

Syntaxe pour le nom complet de la fonction :

Fn::And: [condition]

Syntaxe pour la forme courte :

!And [condition]

Paramètres

condition

Condition qui correspond à true ou false.

Exemple

La condition MyAndCondition suivante équivaut à true si le nom du groupe de sécurité référencé est égal à sg-mysggroup et si SomeOtherCondition est défini sur true :

JSON

"MyAndCondition": { "Fn::And": [ {"Fn::Equals": ["sg-mysggroup", {"Ref": "ASecurityGroup"}]}, {"Condition": "SomeOtherCondition"} ] }

YAML

MyAndCondition: !And - !Equals ["sg-mysggroup", !Ref ASecurityGroup] - !Condition SomeOtherCondition

Fn::Equals

Compare si deux valeurs sont égales Renvoie true si les deux valeurs sont égales ou false si elles ne le sont pas.

Déclaration

JSON

"Fn::Equals" : ["value_1", "value_2"]

YAML

Syntaxe pour le nom complet de la fonction :

Fn::Equals: [value_1, value_2]

Syntaxe pour la forme courte :

!Equals [value_1, value_2]

Paramètres

value

Valeur de tous les types que vous voulez comparer.

Exemple

La condition UseProdCondition suivante équivaut à true si la valeur du paramètre EnvironmentType est égal à prod :

JSON

"UseProdCondition" : { "Fn::Equals": [ {"Ref": "EnvironmentType"}, "prod" ] }

YAML

UseProdCondition: !Equals [!Ref EnvironmentType, prod]

Fn::If

Renvoie une valeur si la condition spécifiée équivaut à true et une autre valeur si la condition spécifiée équivaut à false. Actuellement, CloudFormation prend en charge la fonction Fn::If intrinsèque dans l'attribut de métadonnées, l'attribut de politique de mise à jour et les valeurs de propriété dans les sections Ressources et Sorties d'un modèle. Vous pouvez utiliser le pseudo-paramètre AWS::NoValue comme valeur de retour pour supprimer la propriété correspondante.

Déclaration

YAML

Syntaxe pour le nom complet de la fonction :

Fn::If: [condition_name, value_if_true, value_if_false]

Syntaxe pour la forme courte :

!If [condition_name, value_if_true, value_if_false]

Paramètres

condition_name

Référence à une condition dans la section Conditions. Utilisez le nom de la condition pour la référencer.

value_if_true

Valeur à renvoyer si la condition spécifiée équivaut à true.

value_if_false

Valeur à renvoyer si la condition spécifiée équivaut à false.

Exemples

Pour voir des exemples supplémentaires, consultez Exemples de modèle.

Exemple 1

L'extrait suivant utilise une Fn::If fonction de la SecurityGroups propriété d'une ressource AmazonEC2. Si la CreateNewSecurityGroup condition est vraie, CloudFormation utilise la valeur référencée de NewSecurityGroup pour spécifier la SecurityGroups propriété ; sinon, CloudFormation utilise la valeur référencée deExistingSecurityGroup.

JSON
"SecurityGroups" : [{ "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] }]
YAML
SecurityGroups: - !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]

Exemple 2

Dans la section Outputs d'un modèle, vous pouvez utiliser la fonction Fn::If pour générer les informations de manière conditionnelle. Dans l'extrait suivant, si la CreateNewSecurityGroup condition est vraie, CloudFormation affiche l'ID du groupe de sécurité de la ressource. NewSecurityGroup Si la condition est fausse, CloudFormation affiche l'ID du groupe de sécurité de la ExistingSecurityGroup ressource.

JSON
"Outputs" : { "SecurityGroupId" : { "Description" : "Group ID of the security group used.", "Value" : { "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] } } }
YAML
Outputs: SecurityGroupId: Description: Group ID of the security group used. Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]

Exemple 3

L'extrait suivant utilise le pseudo-paramètre AWS::NoValue dans une fonction Fn::If. La condition utilise un instantané pour une RDS instance de base de données Amazon uniquement si un ID d'instantané est fourni. Si la UseDBSnapshot condition est vraie, CloudFormation utilise la valeur du DBSnapshotName paramètre de la DBSnapshotIdentifier propriété. Si la condition est fausse, la DBSnapshotIdentifier propriété CloudFormation est supprimée.

JSON
"MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDB: Type: "AWS::RDS::DBInstance" Properties: AllocatedStorage: 5 DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: 5.5 MasterUsername: !Ref DBUser MasterUserPassword: !Ref DBPassword DBParameterGroupName: !Ref MyRDSParamGroup DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]

Exemple 4

L'extrait suivant fournit une politique de mise à jour Auto Scaling uniquement si la condition RollingUpdates équivaut à true (vrai). Si la condition est fausse, CloudFormation la politique de AutoScalingRollingUpdate mise à jour est supprimée.

JSON
"UpdatePolicy": { "AutoScalingRollingUpdate": { "Fn::If": [ "RollingUpdates", { "MaxBatchSize": "2", "MinInstancesInService": "2", "PauseTime": "PT0M30S" }, { "Ref" : "AWS::NoValue" } ] } }
YAML
UpdatePolicy: AutoScalingRollingUpdate: !If - RollingUpdates - MaxBatchSize: 2 MinInstancesInService: 2 PauseTime: PT0M30S - !Ref "AWS::NoValue"

Fn::Not

Renvoie true une condition évaluée à false ou renvoie false une condition évaluée à. true Fn::Notagit en tant qu'NOTopérateur.

Déclaration

JSON

"Fn::Not": [{condition}]

YAML

Syntaxe pour le nom complet de la fonction :

Fn::Not: [condition]

Syntaxe pour la forme courte :

!Not [condition]

Paramètres

condition

Condition comme Fn::Equals, qui a la valeur true ou false.

Exemple

La condition EnvCondition suivante équivaut à true si la valeur du paramètre EnvironmentType est égal à prod :

JSON

"MyNotCondition" : { "Fn::Not" : [{ "Fn::Equals" : [ {"Ref" : "EnvironmentType"}, "prod" ] }] }

YAML

MyNotCondition: !Not [!Equals [!Ref EnvironmentType, prod]]

Fn::Or

Renvoie true si l'une quelconque des conditions spécifiées équivaut à true, ou renvoie false si toutes les conditions équivalent à false. Fn::Or agit en tant qu'opérateur OR. Le nombre minimum de conditions que vous pouvez inclure est de 2, et la valeur maximale est de 10.

Déclaration

JSON

"Fn::Or": [{condition}, {...}]

YAML

Syntaxe pour le nom complet de la fonction :

Fn::Or: [condition, ...]

Syntaxe pour la forme courte :

!Or [condition, ...]

Paramètres

condition

Condition qui correspond à true ou false.

Exemple

La condition MyOrCondition suivante équivaut à true si le nom du groupe de sécurité référencé est égal à sg-mysggroup ou si SomeOtherCondition est défini sur true :

JSON

"MyOrCondition" : { "Fn::Or" : [ {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]}, {"Condition" : "SomeOtherCondition"} ] }

YAML

MyOrCondition: !Or [!Equals [sg-mysggroup, !Ref ASecurityGroup], Condition: SomeOtherCondition]

Fonctions prises en charge

Vous pouvez utiliser les fonctions suivantes dans la condition Fn::If :

  • Fn::Base64

  • Fn::FindInMap

  • Fn::GetAtt

  • Fn::GetAZs

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref

Vous pouvez utiliser les fonctions suivantes dans toutes les autres fonctions de condition, comme Fn::Equals et Fn::Or :

  • Fn::FindInMap

  • Ref

  • Autres fonctions de condition