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.
Rubriques
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::And
agit 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
oufalse
.
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
JSON
"Fn::If": [
condition_name
,value_if_true
,value_if_false
]
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::Not
agit 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 valeurtrue
oufalse
.
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
oufalse
.
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