

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
<a name="conditions-section-structure"></a>

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, comme les environnements de test et de production. Par exemple, dans votre modèle, vous pouvez ajouter un paramètre d’entrée `EnvironmentType` qui accepte soit `prod`, soit `test` comme valeurs d’entrée. Pour l’environnement `prod`, vous pourriez inclure des instances EC2 avec certaines capacités, tandis que pour l’environnement `test`, vous pourriez utiliser des capacités réduites afin d’économiser des coûts. Cette définition de condition vous permet de déterminer quelles ressources sont créées et comment elles sont configurées pour chaque type d’environnement.

## Syntaxe
<a name="conditions-section-structure-syntax"></a>

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

### JSON
<a name="conditions-section-structure-syntax.json"></a>

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

  "LogicalConditionName2": {
    "Intrinsic function": ...
  }
}
```

### YAML
<a name="conditions-section-structure-syntax.yaml"></a>

```
Conditions:
  LogicalConditionName1:
    Intrinsic function:
      ...

  LogicalConditionName2:
    Intrinsic function:
      ...
```

## Fonctionnement des conditions
<a name="conditions-section-structure-overview"></a>

Pour utiliser des conditions, procédez comme suit :

1. **Ajouter une définition de paramètre** : définissez les valeurs d’entrée que vos conditions devront évaluer dans la section `Parameters` du modèle. Les conditions s’évaluent comme « true » ou « false » 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 section `Parameters`. Pour plus d'informations sur les pseudo-paramètres, consultez [Obtenir des AWS valeurs à l'aide de pseudo-paramètres](pseudo-parameter-reference.md).

1. **Ajouter une définition de condition** : définissez des conditions dans la section `Conditions` à l’aide de fonctions intrinsèques telles que `Fn::If` ou `Fn::Equals`. Ces conditions déterminent à quel moment CloudFormation les ressources associées sont créées. Les conditions peuvent se baser sur :
   + Valeurs de paramètres 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.

1. **Associer des conditions à des ressources ou à des sorties** : référencez les conditions dans les ressources ou les sorties à l’aide de la clé `Condition` et de l’ID logique d’une condition. Vous pouvez également utiliser `Fn::If` dans d’autres parties du modèle (comme des valeurs de propriétés) pour définir des valeurs dynamiques basées sur une condition. Pour de plus amples informations, veuillez consulter [Utilisation de la clé `Condition`](#using-conditions-in-templates).

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 « true » sont mises à jour, tandis que celles associées à 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.

## Fonctions intrinsèques de condition
<a name="conditions-section-structure-functions"></a>

Vous pouvez utiliser les fonctions intrinsèques suivantes pour définir des conditions :
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or)

**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.

## Utilisation de la clé `Condition`
<a name="using-conditions-in-templates"></a>

Une fois une condition définie, vous pouvez l’appliquer à plusieurs endroits du modèle, comme dans `Resources` ey `Outputs`, à l’aide de la clé `Condition`. La clé `Condition` référence le nom logique d’une condition et renvoie le résultat évalué de la condition spécifiée.

**Topics**
+ [Association des conditions aux ressources](#associate-conditions-with-resources)
+ [Association des conditions aux sorties](#associate-conditions-with-outputs)
+ [Référencement des conditions dans d’autres conditions](#reference-conditions-in-other-conditions)
+ [Renvoi conditionnel de valeurs de propriétés à l’aide de `Fn::If`](#conditional-return-property-values-using-fn-if)

### Association des conditions aux ressources
<a name="associate-conditions-with-resources"></a>

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
<a name="associate-conditions-with-resources.json"></a>

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

#### YAML
<a name="associate-conditions-with-resources.yaml"></a>

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

### Association des conditions aux sorties
<a name="associate-conditions-with-outputs"></a>

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
<a name="associate-conditions-with-outputs.json"></a>

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

#### YAML
<a name="associate-conditions-with-outputs.yaml"></a>

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

### Référencement des conditions dans d’autres conditions
<a name="reference-conditions-in-other-conditions"></a>

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

Dans l’exemple suivant, la condition `IsProdAndFeatureEnabled` s’évalue à « true » uniquement si les conditions `IsProduction` et `IsFeatureEnabled` s’évaluent toutes deux à « true ».

#### JSON
<a name="reference-conditions-in-other-conditions.json"></a>

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

#### YAML
<a name="reference-conditions-in-other-conditions.yaml"></a>

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

### Renvoi conditionnel de valeurs de propriétés à l’aide de `Fn::If`
<a name="conditional-return-property-values-using-fn-if"></a>

Pour un contrôle plus précis, vous pouvez utiliser la fonction intrinsèque `Fn::If` afin de renvoyer conditionnellement l’une de deux valeurs dans des propriétés de ressources ou de sorties. Cette fonction évalue une condition et renvoie une valeur si la condition est « true », et une autre valeur si la condition est « false ».

#### Valeurs conditionnelles de propriétés
<a name="using-fn-if-for-conditional-values"></a>

L’exemple suivant montre comment définir le type d’instance EC2 en fonction d’une condition liée à l’environnement. Si la condition `IsProduction` s’évalue à « true », le type d’instance est défini sur `c5.xlarge`. Sinon, elle est définie sur `t3.small`.

##### JSON
<a name="using-fn-if-for-conditional-values.json"></a>

```
"Properties" : {
  "InstanceType" : {
    "Fn::If" : [
      "IsProduction",
      "c5.xlarge",
      "t3.small"
    ]
  }
}
```

##### YAML
<a name="using-fn-if-for-conditional-values.yaml"></a>

```
Properties:
  InstanceType: !If
    - IsProduction
    - c5.xlarge
    - t3.small
```

#### Suppression conditionnelle de propriétés
<a name="using-fn-if-with-novalue"></a>

Vous pouvez également utiliser le pseudo-paramètre `AWS::NoValue` comme valeur de renvoi pour supprimer la propriété correspondante lorsqu’une condition s’évalue à « false ».

##### JSON
<a name="using-fn-if-with-novalue.json"></a>

```
"DBSnapshotIdentifier" : {
  "Fn::If" : [
    "UseDBSnapshot",
    {"Ref" : "DBSnapshotName"},
    {"Ref" : "AWS::NoValue"}
  ]
}
```

##### YAML
<a name="using-fn-if-with-novalue.yaml"></a>

```
DBSnapshotIdentifier: !If
  - UseDBSnapshot
  - !Ref DBSnapshotName
  - !Ref "AWS::NoValue"
```

## Exemples
<a name="conditions-section-structure-examples"></a>

**Topics**
+ [Création de ressources en fonction de l’environnement](#environment-based-resource-creation)
+ [Provisionnement de ressources basé sur plusieurs conditions](#multi-condition-resource-provisioning)

### Création de ressources en fonction de l’environnement
<a name="environment-based-resource-creation"></a>

Les exemples suivants provisionnent une instance EC2 et créent puis attachent un volume EBS supplémentaire uniquement si le type d’environnement est `prod`. Si l’environnement est `test`, seule l’instance EC2 est créée, sans volume supplémentaire.

#### JSON
<a name="conditions-section-example-resource-creation.json"></a>

```
{
    "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
<a name="conditions-section-example-resource-creation.yaml"></a>

```
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
```

### Provisionnement de ressources basé sur plusieurs conditions
<a name="multi-condition-resource-provisioning"></a>

Les exemples suivants créent conditionnellement un compartiment S3 lorsqu’un nom de compartiment est fourni, puis attachent une stratégie de compartiment uniquement lorsque l’environnement est défini sur `prod`. Si aucun nom de compartiment n’est fourni ou si l’environnement est `test`, aucune ressource n’est créée.

#### JSON
<a name="conditions-section-example-multi-condition.json"></a>

```
{
    "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
<a name="conditions-section-example-multi-condition.yaml"></a>

```
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 condition `CreateBucketPolicy` montre comment référencer d’autres conditions à l’aide de la clé `Condition`. La stratégie est créée uniquement lorsque les conditions `IsProduction` et `CreateBucket` s’évaluent toutes deux à « true ».

**Note**  
Pour des exemples plus complexes d’utilisation des conditions, consultez la rubrique [Attribut Condition](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-condition.html) dans le *Guide de référence des modèles CloudFormation *.