

Il s’agit du nouveau *Guide de référence des modèles CloudFormation *. Veuillez mettre à jour vos favoris et vos liens. Pour obtenir de l'aide pour démarrer CloudFormation, consultez le [guide de AWS CloudFormation l'utilisateur](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

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.

# Référence des fonctions intrinsèques
<a name="intrinsic-function-reference"></a>

CloudFormation fournit plusieurs fonctions intégrées qui vous aident à gérer vos piles. Utilisez les fonctions intrinsèques de vos modèles pour affecter des valeurs aux propriétés qui ne sont pas disponibles jusqu'à l'exécution.

**Note**  
Vous ne pouvez utiliser des fonctions intrinsèques que dans des parties spécifiques d'un modèle. À l'heure actuelle, vous pouvez utiliser des fonctions intrinsèques dans les propriétés des ressources, les sorties, les attributs de métadonnées et les attributs de la politique de mise à jour. Vous pouvez utiliser des fonctions intrinsèques pour créer les ressources d’une pile de manière conditionnelle.

**Topics**
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::Cidr`](intrinsic-function-reference-cidr.md)
+ [Fonctions de condition](intrinsic-function-reference-conditions.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Split`](intrinsic-function-reference-split.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Fn::Transform`](intrinsic-function-reference-transform.md)
+ [`Ref`](intrinsic-function-reference-ref.md)
+ [Fonctions de règle](intrinsic-function-reference-rules.md)

# `Fn::Base64`
<a name="intrinsic-function-reference-base64"></a>

La fonction intrinsèque `Fn::Base64` renvoie la représentation Base64 de la chaîne d'entrée. Cette fonction est généralement utilisée pour transmettre des données codées aux EC2 instances Amazon par le biais de la `UserData` propriété.

## Déclaration
<a name="w2aac24c12b5"></a>

### JSON
<a name="intrinsic-function-reference-base64-syntax.json"></a>

```
{ "Fn::Base64" : valueToEncode }
```

### YAML
<a name="intrinsic-function-reference-base64-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Base64: valueToEncode
```

Syntaxe pour la forme courte :

```
!Base64 valueToEncode
```

**Note**  
Si vous utilisez la forme courte et incluez immédiatement une autre fonction dans le paramètre `valueToEncode`, utilisez le nom de fonction complet pour au moins une des fonctions. Par exemple, la syntaxe suivante n'est pas valide :  

```
!Base64 !Sub string
!Base64 !Ref logical_ID
```
Utilisez à la place le nom de fonction complet pour au moins une des fonctions, comme dans les exemples suivants :  

```
!Base64
  "Fn::Sub": string

Fn::Base64:
  !Sub string
```

## Parameters
<a name="w2aac24c12b7"></a>

valueToEncode  
Valeur de chaîne à convertir au format Base64.

## Valeur renvoyée :
<a name="w2aac24c12b9"></a>

Chaîne d'origine, sous forme de représentation Base64.

## Exemples
<a name="w2aac24c12c11"></a>

### JSON
<a name="intrinsic-function-reference-base64-example.json"></a>

```
{ "Fn::Base64" : "AWS CloudFormation" }
```

### YAML
<a name="intrinsic-function-reference-base64-example.yaml"></a>

```
Fn::Base64: AWS CloudFormation
```

## Fonctions prises en charge
<a name="w2aac24c12c13"></a>

Vous pouvez utiliser n'importe quelle fonction qui retourne une chaîne à l'intérieur de la fonction `Fn::Base64`.

# `Fn::Cidr`
<a name="intrinsic-function-reference-cidr"></a>

La fonction intrinsèque `Fn::Cidr` renvoie un tableau de blocs d'adresse CIDR. Le nombre de blocs d'adresse CIDR renvoyés dépend du paramètre `count`.

## Déclaration
<a name="intrinsic-function-reference-cidr-declaration"></a>

### JSON
<a name="intrinsic-function-reference-cidr-syntax.json"></a>

```
{ "Fn::Cidr" : [ipBlock, count, cidrBits]}
```

### YAML
<a name="intrinsic-function-reference-cidr-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Cidr: 
  - ipBlock
  - count
  - cidrBits
```

Syntaxe pour la forme courte :

```
!Cidr [ ipBlock, count, cidrBits ]
```

## Parameters
<a name="intrinsic-function-reference-cidr-parameters"></a>

ipBlock  <a name="ipBlock"></a>
Bloc d'adresse CIDR spécifié par l'utilisateur à fractionner en plus petits blocs d'adresse CIDR.

count  <a name="count"></a>
Le nombre de CIDRs à générer. La plage valide est comprise entre 1 et 256.

cidrBits  <a name="cidrBits"></a>
Nombre de bits de sous-réseau pour le bloc CIDR. Par exemple, spécifier la valeur « 8 » pour ce paramètre crée un bloc CIDR avec un masque « /24 ».  
Les bits de sous-réseaux sont l'inverse du masque de sous-réseau. Pour calculer les bits d'hôte requis pour un sous-réseau donné, soustrayez les bits de sous-réseau de 32 pour IPv4 ou 128 pour. IPv6

## Valeur renvoyée
<a name="intrinsic-function-reference-cidr-return-values"></a>

Tableau de blocs d'adresse CIDR.

## Exemple
<a name="intrinsic-function-reference-cidr-examples"></a>

### Utilisation de base
<a name="intrinsic-function-reference-cidr-example1"></a>

Cet exemple crée 6 CIDRs avec un masque de sous-réseau « /27 » à l'intérieur d'un CIDR avec un masque « /24 ».

#### JSON
<a name="intrinsic-function-reference-cidr-example1.json"></a>

```
{ "Fn::Cidr" : [ "192.168.0.0/24", "6", "5"] }
```

#### YAML
<a name="intrinsic-function-reference-cidr-example1.yaml"></a>

```
!Cidr [ "192.168.0.0/24", 6, 5 ]
```

### Création d'un IPv6 VPC activé
<a name="intrinsic-function-reference-cidr-example2"></a>

Cet exemple de modèle crée un sous-réseau IPv6 activé.

#### JSON
<a name="intrinsic-function-reference-cidr-example2.json"></a>

```
{
    "Resources": {
        "ExampleVpc": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16"
            }
        },
        "IPv6CidrBlock": {
            "Type": "AWS::EC2::VPCCidrBlock",
            "Properties": {
                "AmazonProvidedIpv6CidrBlock": true,
                "VpcId": {
                    "Ref": "ExampleVpc"
                }
            }
        },
        "ExampleSubnet": {
            "Type": "AWS::EC2::Subnet",
            "DependsOn": "IPv6CidrBlock",
            "Properties": {
                "AssignIpv6AddressOnCreation": true,
                "CidrBlock": {
                    "Fn::Select": [
                        0,
                        {
                            "Fn::Cidr": [
                                {
                                    "Fn::GetAtt": [
                                        "ExampleVpc",
                                        "CidrBlock"
                                    ]
                                },
                                1,
                                8
                            ]
                        }
                    ]
                },
                "Ipv6CidrBlock": {
                    "Fn::Select": [
                        0,
                        {
                            "Fn::Cidr": [
                                {
                                    "Fn::Select": [
                                        0,
                                        {
                                            "Fn::GetAtt": [
                                                "ExampleVpc",
                                                "Ipv6CidrBlocks"
                                            ]
                                        }
                                    ]
                                },
                                1,
                                64
                            ]
                        }
                    ]
                },
                "VpcId": {
                    "Ref": "ExampleVpc"
                }
            }
        }
    }
}
```

#### YAML
<a name="intrinsic-function-reference-cidr-example2.yaml"></a>

```
Resources:
  ExampleVpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  IPv6CidrBlock:
    Type: AWS::EC2::VPCCidrBlock
    Properties:
      AmazonProvidedIpv6CidrBlock: true
      VpcId: !Ref ExampleVpc
  ExampleSubnet:
    Type: AWS::EC2::Subnet
    DependsOn: IPv6CidrBlock
    Properties:
      AssignIpv6AddressOnCreation: true
      CidrBlock: !Select
        - 0
        - !Cidr
          - !GetAtt ExampleVpc.CidrBlock
          - 1
          - 8
      Ipv6CidrBlock: !Select
        - 0
        - !Cidr
          - !Select
            - 0
            - !GetAtt ExampleVpc.Ipv6CidrBlocks
          - 1
          - 64
      VpcId: !Ref ExampleVpc
```

## Fonctions prises en charge
<a name="intrinsic-function-reference-cidr-functions"></a>

Vous pouvez utiliser les fonctions suivantes dans une fonction `Fn::Cidr` :
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

# Fonctions de condition
<a name="intrinsic-function-reference-conditions"></a>

Vous pouvez utiliser des fonctions intrinsèques telles que `Fn::If` ou `Fn::Equals` pour créer et configurer des ressources de pile selon une logique conditionnelle. Ces conditions sont évaluées lors de la création ou de la mise à jour de la pile. Une fois toutes vos conditions définies, vous pouvez les associer à des ressources ou à des propriétés de ressources dans les sections `Resources` et `Outputs` du modèle.

Pour des scénarios avancés, vous pouvez combiner les conditions à l’aide des fonctions `Fn::And` ou `Fn::Or`, ou utiliser `Fn::Not` pour inverser la valeur d’une condition. Vous pouvez également imbriquer des conditions pour créer une logique conditionnelle plus complexe.

Si vous utilisez des conditions pour la première fois dans vos modèles, nous vous recommandons de consulter d'abord la rubrique relative à la [syntaxe des conditions du CloudFormation modèle](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) dans le *Guide de AWS CloudFormation l'utilisateur*.

**Note**  
Vous devez définir toutes les conditions dans la section `Conditions` du modèle, à l’exception des conditions `Fn::If`. Vous pouvez utiliser la condition `Fn::If` dans l’attribut `Metadata`, l’attribut `UpdatePolicy`, et dans les valeurs des propriétés des sections `Resources` et `Outputs`.

**Topics**
+ [`Fn::And`](#intrinsic-function-reference-conditions-and)
+ [`Fn::Equals`](#intrinsic-function-reference-conditions-equals)
+ [`Fn::If`](#intrinsic-function-reference-conditions-if)
+ [`Fn::Not`](#intrinsic-function-reference-conditions-not)
+ [`Fn::Or`](#intrinsic-function-reference-conditions-or)
+ [Fonctions prises en charge](#w2aac24c20c25)
+ [Exemple de modèle](#conditions-sample-templates)

## `Fn::And`
<a name="intrinsic-function-reference-conditions-and"></a>

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

### Déclaration
<a name="intrinsic-function-reference-conditions-and-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-and-syntax.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-and-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::And: [condition]
```

Syntaxe pour la forme courte :

```
!And [condition]
```

### Parameters
<a name="w2aac24c20c13b7"></a>

condition  <a name="fn-and-condition"></a>
Condition qui correspond à `true` ou `false`.

### Exemples d’utilisation de `Fn::And`
<a name="w2aac24c20c13b9"></a>

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
<a name="intrinsic-function-reference-conditions-and-example.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-and-example.yaml"></a>

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

## `Fn::Equals`
<a name="intrinsic-function-reference-conditions-equals"></a>

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

### Déclaration
<a name="intrinsic-function-reference-conditions-equals-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-equals-syntax.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-equals-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

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

Syntaxe pour la forme courte :

```
!Equals [value_1, value_2]
```

### Parameters
<a name="w2aac24c20c15b7"></a>

value  
Une valeur de chaîne à comparer.

### Exemples d’utilisation de `Fn::Equals`
<a name="w2aac24c20c15b9"></a>

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

#### JSON
<a name="intrinsic-function-reference-conditions-equals-example.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-equals-example.yaml"></a>

```
IsProduction:
  !Equals [!Ref EnvironmentType, prod]
```

## `Fn::If`
<a name="intrinsic-function-reference-conditions-if"></a>

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 les valeurs `UpdatePolicy` d'`Metadata`attribut, d'attribut et de propriété dans la `Resources` section et `Outputs` les sections 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
<a name="intrinsic-function-reference-conditions-if-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-if-syntax.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-if-syntax.yaml"></a>

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

### Parameters
<a name="w2aac24c20c19b7"></a>

condition\$1name  <a name="condition_name"></a>
Référence à une condition dans la section Conditions. Utilisez le nom de la condition pour la référencer.

value\$1if\$1true  <a name="value_if_true"></a>
Valeur à renvoyer si la condition spécifiée équivaut à true.

value\$1if\$1false  <a name="value_if_false"></a>
Valeur à renvoyer si la condition spécifiée équivaut à `false`.

### Exemples d’utilisation de `Fn::If`
<a name="w2aac24c20c19b9"></a>

**Topics**
+ [Choix conditionnel d’une ressource](#w2aac24c20c19b9b5)
+ [Sorties conditionnelles](#w2aac24c20c19b9b7)
+ [Valeurs conditionnelles de tableaux](#w2aac24c20c19b9b9)
+ [Propriétés et valeurs de propriétés conditionnelles](#w2aac24c20c19b9c11)
+ [Politiques de mise à jour conditionnelles](#w2aac24c20c19b9c13)

#### Choix conditionnel d’une ressource
<a name="w2aac24c20c19b9b5"></a>

L'exemple suivant utilise une `Fn::If` fonction dans une définition de EC2 ressource Amazon pour déterminer la ressource du groupe de sécurité à associer à l'instance. Si la `CreateNewSecurityGroup` condition est vraie, CloudFormation utilise la valeur référencée de `NewSecurityGroup` (un groupe de sécurité créé ailleurs dans le modèle) pour spécifier la `SecurityGroupIds` propriété. Si la valeur `CreateNewSecurityGroup` est fausse, CloudFormation utilise la valeur référencée de `ExistingSecurityGroupId` (un paramètre qui fait référence à un groupe de sécurité existant).

##### JSON
<a name="intrinsic-function-reference-conditions-if-example1.json"></a>

```
"Resources": {
  "EC2Instance": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
      "ImageId": "ami-0abcdef1234567890",
      "InstanceType": "t3.micro",
      "SecurityGroupIds": {
        "Fn::If": [
          "CreateNewSecurityGroup",
          [{"Ref": "NewSecurityGroup"}],
          [{"Ref": "ExistingSecurityGroupId"}]
        ]
      }]
    }
  }
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example1.yaml"></a>

```
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-0abcdef1234567890
      InstanceType: t3.micro
      SecurityGroupIds: !If
        - CreateNewSecurityGroup
        - [!Ref NewSecurityGroup]
        - [!Ref ExistingSecurityGroupId]
```

#### Sorties conditionnelles
<a name="w2aac24c20c19b9b7"></a>

Dans la section `Output` d’un modèle, vous pouvez utiliser la fonction `Fn::If` pour générer conditionnellement des valeurs de sortie. 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
<a name="intrinsic-function-reference-conditions-if-example2.json"></a>

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

##### YAML
<a name="intrinsic-function-reference-conditions-if-example2.yaml"></a>

```
Outputs:
  SecurityGroupId: 
    Description: Group ID of the security group used.
    Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroupId]
```

#### Valeurs conditionnelles de tableaux
<a name="w2aac24c20c19b9b9"></a>

L’exemple suivant utilise `Fn::If` pour fournir conditionnellement différentes valeurs de tableau selon une condition. Si la condition `MoreThan2AZs` est « true », trois sous-réseaux publics sont utilisés. Sinon, seuls deux sous-réseaux publics sont utilisés.

##### JSON
<a name="intrinsic-function-reference-conditions-if-example-arrays.json"></a>

```
"Subnets": {
  "Fn::If": [
    "MoreThan2AZs",
    [
      {"Fn::ImportValue": "PublicSubnet01"},
      {"Fn::ImportValue": "PublicSubnet02"},
      {"Fn::ImportValue": "PublicSubnet03"}
    ],
    [
      {"Fn::ImportValue": "PublicSubnet01"},
      {"Fn::ImportValue": "PublicSubnet02"}
    ]
  ]
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example-arrays.yaml"></a>

```
Subnets:
  Fn::If:
    - MoreThan2AZs
    - - Fn::ImportValue: PublicSubnet01
      - Fn::ImportValue: PublicSubnet02
      - Fn::ImportValue: PublicSubnet03
    - - Fn::ImportValue: PublicSubnet01
      - Fn::ImportValue: PublicSubnet02
```

#### Propriétés et valeurs de propriétés conditionnelles
<a name="w2aac24c20c19b9c11"></a>

L’exemple suivant utilise le pseudo-paramètre `AWS::NoValue` dans une fonction `Fn::If`. La condition utilise un instantané pour une instance de base de données Amazon RDS 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 équivaut à false, CloudFormation supprime la propriété `DBSnapshotIdentifier`.

Il utilise également une fonction `Fn::If` dans la propriété `AllocatedStorage` de l’instance de base de données Amazon RDS. Si la condition `IsProduction` est « true », la taille de stockage est définie sur `100`. Sinon, elle est définie sur `20`.

##### JSON
<a name="intrinsic-function-reference-conditions-if-example3.json"></a>

```
"MyDatabase" : {
  "Type" : "AWS::RDS::DBInstance",
  "Properties": {
    "DBInstanceClass": "db.t3.micro",
    "AllocatedStorage": {
      "Fn::If": [
        "IsProduction",
        100,
        20
      ]
    },
    "Engine" : "MySQL",
    "EngineVersion" : "5.5",
    "MasterUsername" : { "Ref" : "DBUser" },
    "MasterUserPassword" : { "Ref" : "DBPassword" },
    "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" },
    "DBSnapshotIdentifier" : {
      "Fn::If" : [
        "UseDBSnapshot",
        {"Ref" : "DBSnapshotName"},
        {"Ref" : "AWS::NoValue"}
      ]
    }
  }
}
```

##### YAML
<a name="intrinsic-function-reference-conditions-if-example3.yaml"></a>

```
MyDatabase:
  Type: AWS::RDS::DBInstance
  Properties:
    DBInstanceClass: db.t3.micro
    AllocatedStorage: !If [IsProduction, 100, 20]
    Engine: MySQL
    EngineVersion: 5.5
    MasterUsername: !Ref DBUser
    MasterUserPassword: !Ref DBPassword
    DBParameterGroupName: !Ref MyRDSParamGroup
    DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"]
```

#### Politiques de mise à jour conditionnelles
<a name="w2aac24c20c19b9c13"></a>

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
<a name="intrinsic-function-reference-conditions-if-example4.json"></a>

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

##### YAML
<a name="intrinsic-function-reference-conditions-if-example4.yaml"></a>

```
UpdatePolicy: !If
  - RollingUpdates
  - AutoScalingRollingUpdate:
      MaxBatchSize: 2
      MinInstancesInService: 2
      PauseTime: PT0M30S
  - !Ref "AWS::NoValue"
```

## `Fn::Not`
<a name="intrinsic-function-reference-conditions-not"></a>

Renvoie `true` pour une condition qui équivaut à `false`, ou renvoie `false` pour une condition qui équivaut à `true`. `Fn::Not` agit en tant qu'opérateur NOT.

### Déclaration
<a name="intrinsic-function-reference-conditions-not-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-not-syntax.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-not-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Not: [condition]
```

Syntaxe pour la forme courte :

```
!Not [condition]
```

### Parameters
<a name="w2aac24c20c21b7"></a>

condition  <a name="condition"></a>
Condition comme `Fn::Equals`, qui a la valeur `true` ou `false`.

### Exemples d’utilisation de `Fn::Not`
<a name="w2aac24c20c21b9"></a>

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

#### JSON
<a name="intrinsic-function-reference-conditions-not-example.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-not-example.yaml"></a>

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

## `Fn::Or`
<a name="intrinsic-function-reference-conditions-or"></a>

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
<a name="intrinsic-function-reference-conditions-or-syntax"></a>

#### JSON
<a name="intrinsic-function-reference-conditions-or-syntax.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-or-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

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

Syntaxe pour la forme courte :

```
!Or [condition, ...]
```

### Parameters
<a name="w2aac24c20c23b7"></a>

condition  
Condition qui correspond à `true` ou `false`.

### Exemples d’utilisation de `Fn::Or`
<a name="w2aac24c20c23b9"></a>

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
<a name="intrinsic-function-reference-conditions-or-example.json"></a>

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

#### YAML
<a name="intrinsic-function-reference-conditions-or-example.yaml"></a>

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

## Fonctions prises en charge
<a name="w2aac24c20c25"></a>

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

## Exemple de modèle
<a name="conditions-sample-templates"></a>

### Création de ressources de manière conditionnelle pour une pile de production, de développement ou de test
<a name="w2aac24c20c27b3"></a>

Dans certains cas, vous pouvez créer des piles qui sont semblables, mais qui impliquent des modifications mineures. Par exemple, vous utilisez peut-être un modèle pour les applications de production. Vous voulez créer la même pile de production afin de pouvoir l’utiliser pour le développement ou les tests. Cependant, pour le développement et les tests, vous n’avez pas forcément besoin de toute la capacité supplémentaire qui est incluse dans une pile de production. Au lieu de cela, vous pouvez utiliser un paramètre d’entrée pour le type d’environnement afin de créer de manière conditionnelle les ressources qui sont spécifiques à la production, au développement ou au test, comme illustré dans l’exemple suivant :

Vous pouvez spécifier `prod`, `dev` ou `test` pour le paramètre `EnvType`. Pour chaque type d'environnement, le modèle spécifie un autre type d'instance. Les types d'instance peuvent aller d'un type d'instance volumineux, optimisé pour le calcul à un type d'instance à usage général et de petite taille. Pour spécifier conditionnellement le type d’instance, le modèle définit deux conditions dans la section `Conditions` du modèle : `CreateProdResources`, qui est « true » si la valeur du paramètre `EnvType` est égale à `prod`, et `CreateDevResources`, qui est « true » si la valeur du paramètre est égale à `dev`.

Dans la propriété `InstanceType`, les modèles hébergent deux fonctions intrinsèques `Fn::If`pour déterminer le type d'instance à utiliser. Si la condition `CreateProdResources` équivaut à true, le type d'instance est `c5.xlarge`. Si la condition équivaut à false, la condition `CreateDevResources` est évaluée. Si la condition `CreateDevResources` équivaut à true, le type d'instance est `t3.medium`. Sinon, le type d'instance est `t3.small`.

Outre le type d'instance, l'environnement de production crée et attache un EC2 volume Amazon à l'instance. Les ressources `MountPoint` et `NewVolume` sont associées à la condition `CreateProdResources` pour que les ressources soient créées uniquement si la condition équivaut à true.

**Example JSON**  

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Parameters" : {
    "EnvType" : {
      "Description" : "Environment type.",
      "Default" : "test",
      "Type" : "String",
      "AllowedValues" : ["prod", "dev", "test"],
      "ConstraintDescription" : "must specify prod, dev, or test."
    }
  },
  "Conditions" : {
    "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "prod"]},
    "CreateDevResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "dev"]}
  },
  "Resources" : {
    "EC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "ImageId" : "ami-1234567890abcdef0",
        "InstanceType" : { "Fn::If" : [
          "CreateProdResources",
          "c5.xlarge",
          {"Fn::If" : [
            "CreateDevResources",
            "t3.medium",
            "t3.small"
          ]}
        ]}
      }
    },
    "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" ]}
      }
    }
  }
}
```

**Example YAML**  

```
AWSTemplateFormatVersion: "2010-09-09"
Parameters:
  EnvType:
    Description: Environment type.
    Default: test
    Type: String
    AllowedValues: [prod, dev, test]
    ConstraintDescription: must specify prod, dev, or test.
Conditions:
  CreateProdResources: !Equals [!Ref EnvType, prod]
  CreateDevResources: !Equals [!Ref EnvType, "dev"]
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-1234567890abcdef0
      InstanceType: !If [CreateProdResources, c5.xlarge, !If [CreateDevResources, t3.medium, t3.small]]    
  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
```

**Note**  
Pour des exemples plus complexes d’utilisation de conditions pour créer des ressources, consultez la rubrique [Attribut `Condition`](aws-attribute-condition.md).

# `Fn::FindInMap`
<a name="intrinsic-function-reference-findinmap"></a>

La fonction intrinsèque `Fn::FindInMap` renvoie la valeur correspondant aux clés dans un mappage à deux niveaux déclaré dans la section `Mappings`.

## Déclaration
<a name="w2aac24c25b5"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-syntax.json"></a>

```
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
```

### YAML
<a name="intrinsic-function-reference-findinmap-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]
```

Syntaxe pour la forme courte :

```
!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
```

**Note**  
Vous ne pouvez pas imbriquer deux instances de deux fonctions sous une forme courte.

## Parameters
<a name="w2aac24c25b7"></a>

MapName  <a name="MapName"></a>
Nom logique d'un mappage déclaré dans la section Mappings, qui contient les clés et les valeurs.

TopLevelKey  <a name="TopLevelKey"></a>
Nom de la clé de niveau supérieur. Sa valeur est une liste des paires clé-valeur.

SecondLevelKey  <a name="SecondLevelKey"></a>
Nom de la clé de deuxième niveau, qui est l'une des clés de la liste assignée à `TopLevelKey`.

## Valeur renvoyée
<a name="w2aac24c25b9"></a>

La valeur qui est assignée à `SecondLevelKey`.

## Exemples
<a name="intrinsic-function-reference-findinmap-examples"></a>

Les exemples suivants montrent comment utiliser la fonction `Fn::FindInMap`.

**Topics**
+ [Utilisation de Fn::FindInMap avec des valeurs propres à une région](#intrinsic-function-reference-findinmap-region-example)
+ [Utilisation de Fn::FindInMap pour des configurations propres à l’environnement](#intrinsic-function-reference-findinmap-environment-example)

### Utilisation de Fn::FindInMap avec des valeurs propres à une région
<a name="intrinsic-function-reference-findinmap-region-example"></a>

L’exemple suivant montre comment utiliser `Fn::FindInMap` dans un modèle qui inclut deux mappages : `AWSInstanceType2Arch` et `AWSRegionArch2AMI`. Il inclut également un paramètre `InstanceType` qui vous permet de choisir entre `t3.micro` et `t4g.nano`. La valeur par défaut est `t3.micro`, mais elle peut être remplacée lors de la création de la pile. 

`Fn::FindInMap` détermine d’abord l’architecture (`HVM64` ou `ARM64`) en fonction du type d’instance sélectionné, puis recherche l’ID d’AMI correct pour cette architecture dans la Région AWS actuelle. 

**Note**  
Les AMI IDs présentées dans ces exemples sont des espaces réservés à des fins de démonstration. Dans la mesure du possible, envisagez d’utiliser des références dynamiques aux paramètres  AWS Systems Manager comme alternative à la section `Mappings`. Pour éviter de mettre à jour tous vos modèles avec un nouvel identifiant chaque fois que l'AMI que vous souhaitez utiliser change, utilisez un AWS Systems Manager paramètre pour récupérer le dernier ID d'AMI lors de la création ou de la mise à jour de la pile. Les dernières versions des paramètres couramment utilisés AMIs sont également disponibles en tant que paramètres publics dans Systems Manager. Pour plus d’informations, consultez [Obtenir des valeurs stockées dans d’autres services à l’aide de références dynamiques](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html). 

#### JSON
<a name="intrinsic-function-reference-findinmap-region-example.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "InstanceType": {
      "Description": "The EC2 instance type",
      "Type": "String",
      "AllowedValues": [
        "t3.micro",
        "t4g.nano"
      ],
      "Default": "t3.micro"
    }
  },
  "Mappings": {
    "AWSInstanceType2Arch": {
      "t3.micro": {
        "Arch": "HVM64"
      },
      "t4g.nano": {
        "Arch": "ARM64"
      }
    },
    "AWSRegionArch2AMI": {
      "us-east-1" : { 
        "HVM64" : "ami-12345678901234567", "ARM64" : "ami-23456789012345678" 
      },
      "us-west-1" : { 
        "HVM64" : "ami-34567890123456789", "ARM64" : "ami-45678901234567890"
      },
      "eu-west-1" : { 
        "HVM64" : "ami-56789012345678901", "ARM64" : "ami-67890123456789012" 
      },
      "ap-southeast-1" : { 
        "HVM64" : "ami-78901234567890123", "ARM64" : "ami-89012345678901234" 
      },
      "ap-northeast-1" : { 
        "HVM64" : "ami-90123456789012345", "ARM64" : "ami-01234567890123456" 
      }
    }
  },
  "Resources" : {
    "MyEC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "InstanceType" : { "Ref": "InstanceType" },
        "ImageId" : {
          "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ]}]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-region-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  InstanceType:
    Description: The EC2 instance type
    Type: String
    AllowedValues:
      - t3.micro
      - t4g.nano
    Default: t3.micro
Mappings: 
  AWSInstanceType2Arch:
    t3.micro:
      Arch: HVM64
    t4g.nano:
      Arch: ARM64
  AWSRegionArch2AMI:
    us-east-1: 
      HVM64: ami-12345678901234567
      ARM64: ami-23456789012345678
    us-west-1: 
      HVM64: ami-34567890123456789
      ARM64: ami-45678901234567890
    eu-west-1: 
      HVM64: ami-56789012345678901
      ARM64: ami-67890123456789012
    ap-southeast-1: 
      HVM64: ami-78901234567890123
      ARM64: ami-89012345678901234
    ap-northeast-1: 
      HVM64: ami-90123456789012345
      ARM64: ami-01234567890123456
Resources: 
  myEC2Instance: 
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref InstanceType
      ImageId:
        Fn::FindInMap:
        - AWSRegionArch2AMI
        - Ref: AWS::Region
        - Fn::FindInMap:
          - AWSInstanceType2Arch
          - Ref: InstanceType
          - Arch
```

### Utilisation de Fn::FindInMap pour des configurations propres à l’environnement
<a name="intrinsic-function-reference-findinmap-environment-example"></a>

L’exemple suivant montre comment utiliser `Fn::FindInMap` dans un modèle contenant une section `Mappings` constituée d’un seul mappage, `SecurityGroups`. Le modèle comporte également un paramètre `EnvironmentType` qui permet de spécifier si l’environnement est `Dev` ou `Prod`. La valeur par défaut est `Dev`, mais elle peut être remplacée lors de la création de la pile.

`Fn::FindInMap`renvoie la valeur appropriée `SecurityGroupIds` en fonction du `EnvironmentType` paramètre. `Fn::Split`divise ensuite la chaîne du groupe de sécurité séparée par des virgules IDs en une liste, selon le format attendu pour. [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids)

Si vous déployez cette pile avec `EnvironmentType` défini sur `Dev`, la valeur `SecurityGroupIds` utilisée par `EC2Instance` sera `sg-12345678`. Si vous définissez `EnvironmentType` sur `Prod`, elle utilisera `sg-abcdef01` et `sg-ghijkl23`.

#### JSON
<a name="intrinsic-function-reference-findinmap-environment-example.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters":{
    "EnvironmentType":{
      "Description":"The environment type (Dev or Prod)",
      "Type":"String",
      "Default":"Dev",
      "AllowedValues":[
        "Dev",
        "Prod"
      ]
    }
  },
  "Mappings":{
    "SecurityGroups":{
      "Dev":{
        "SecurityGroupIds":"sg-12345678"
      },
      "Prod":{
        "SecurityGroupIds":"sg-abcdef01,sg-ghijkl23"
      }
    }
  },
  "Resources":{
    "Ec2Instance":{
      "Type":"AWS::EC2::Instance",
      "Properties":{
        "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}",
        "InstanceType": "t2.micro",
        "SecurityGroupIds":{
          "Fn::Split":[
            ",",
            {
              "Fn::FindInMap":[
                "SecurityGroups",
                {
                  "Ref":"EnvironmentType"
                },
                "SecurityGroupIds"
              ]
            }
          ]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-environment-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvironmentType:
    Description: The environment type (Dev or Prod)
    Type: String
    Default: Dev
    AllowedValues:
      - Dev
      - Prod
Mappings:
  SecurityGroups:
    Dev:
      SecurityGroupIds: sg-12345678
    Prod:
      SecurityGroupIds: sg-abcdef01,sg-ghijkl23
Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
      InstanceType: t2.micro
      SecurityGroupIds:
        Fn::Split:
          - ","
          - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]
```

## Fonctions prises en charge
<a name="w2aac24c25c13"></a>

Vous pouvez utiliser les fonctions suivantes dans une fonction `Fn::FindInMap` :
+ `Fn::FindInMap`
+ `Ref`

## Ressources connexes
<a name="w2aac24c25c15"></a>

Pour utiliser d’autres fonctions intrinsèques ou une valeur par défaut dans une fonction `Fn::FindInMap`, vous devez déclarer la transformation `AWS::LanguageExtensions` dans votre modèle. Pour de plus amples informations, veuillez consulter [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md).

Ces rubriques connexes peuvent vous être utiles pour développer des modèles utilisant la fonction `Fn::FindInMap`.
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [CloudFormationMappingssyntaxe du modèle](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html) dans le *guide de AWS CloudFormation l'utilisateur*

# `Fn::ForEach`
<a name="intrinsic-function-reference-foreach"></a>

La fonction intrinsèque `Fn::ForEach` prend une collection et un fragment, et applique les éléments de la collection à l’identifiant du fragment fourni. `Fn::ForEach` peut contenir d’autres fonctions intrinsèques, y compris `Fn::ForEach` elle-même, et être utilisée dans les sections `Conditions`, `Outputs` et `Resources` (y compris les propriétés des ressources). Elle ne peut être utilisé dans aucune des sections suivantes : `AWSTemplateFormatVersion`, `Description`, `Metadata`, `Transform`, `Parameters`, `Mappings`, `Rules` ou `Hooks`.

Si vous utilisez la fonction intrinsèque `Fn::ForEach` dans votre modèle, vous devez également utiliser [Transformation `AWS::LanguageExtensions`](transform-aws-languageextensions.md).

L'utilisation de la fonction intrinsèque `Fn::ForEach` ne modifie pas les quotas qui s'appliquent au modèle obtenu. Les quotas incluent la taille maximale et le nombre maximal de ressources d'un modèle. Pour plus d'informations, consultez la section [Comprendre CloudFormation les quotas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) dans le *guide de AWS CloudFormation l'utilisateur*.

## Déclaration
<a name="intrinsic-function-reference-foreach-declaration"></a>

### JSON
<a name="intrinsic-function-reference-foreach-declaration.json"></a>

```
"Fn::ForEach::LoopLogicalName": [
  "Identifier",
  ["Value1","Value2"], // Collection
  {"OutputKey": {OutputValue}}
]
```

### YAML
<a name="intrinsic-function-reference-foreach-declaration.yaml"></a>

```
'Fn::ForEach::LoopLogicalName':
    - Identifier
    - - Value1 # Collection
      - Value2
    - 'OutputKey':
        OutputValue
```

## Parameters
<a name="intrinsic-function-reference-foreach-parameters"></a>

*Nom logique de la boucle*  
ID logique de la boucle. Le nom doit être unique dans le modèle et ne doit entrer en conflit avec aucune valeur d’ID logique dans la section `Resources` du modèle. Ce nom n’apparaît pas dans la sortie transformée. Il est utilisé comme référence interne dans le CloudFormation modèle lui-même.

*Identifiant*  
Identifiant de l’espace réservé qui est remplacé dans les paramètres `OutputKey` et `OutputValue`. Toutes les instances de `${Identifier}` ou `&{Identifier}` dans les paramètres `OutputKey` et `OutputValue` sont remplacées par les valeurs du paramètre `Collection`.

*Collection*  
La collection de valeurs sur laquelle itérer. Il peut s'agir d'un tableau dans ce paramètre, ou il peut s'agir d'une fonction intrinsèque [`Ref`](intrinsic-function-reference-ref.md) à `CommaDelimitedList`. Lors de l’utilisation de `&{Identifier}`, des caractères non alphanumériques peuvent être transmis dans `Collection`.

*Clé de sortie*  
Clé apparaissant dans le modèle transformé. `${Identifier}` ou `&{Identifier}` doivent être inclus dans le paramètre `OutputKey`. Par exemple, si `Fn::ForEach` est utilisé dans la section `Resources` du modèle, il s’agit de l’ID logique généré pour chaque ressource.  
La syntaxe `&{}` autorise l’utilisation de caractères non alphanumériques dans `Collection` au sein du paramètre`OutputKey` . Pour en voir un exemple, consultez [Transmission de caractères non alphanumériques dans `Collection` pour `Fn::ForEach`](intrinsic-function-reference-foreach-example-resource.md#intrinsic-function-reference-foreach-example-non-alphanumeric).

*Valeur de sortie*  
Valeur répliquée dans le modèle transformé pour chaque élément du paramètre `Collection`. Par exemple, si la fonction intrinsèque `Fn::ForEach` est utilisée dans la section `Resources` du modèle, il s’agit du fragment de modèle répété pour configurer chaque ressource.

## Valeur renvoyée
<a name="intrinsic-function-reference-foreach-return-value"></a>

Objet développé qui contient le fragment d'objet répété une fois pour chaque élément de la collection, où l'identifiant du fragment est remplacé par l'élément de la collection.

## Fonctions prises en charge
<a name="intrinsic-function-reference-foreach-nested-functions"></a>

Vous pouvez utiliser les fonctions suivantes dans la fonction intrinsèque `Fn::ForEach`.
+ Fonctions de condition :
  + [`Fn::And`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-and)
  + [`Fn::Equals`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-equals)
  + [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
  + [`Fn::Not`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-not)
  + [`Fn::Or`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-or)
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::Transform`](intrinsic-function-reference-transform.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

## Exemples
<a name="intrinsic-function-reference-foreach-example-pointer"></a>

Vous trouverez des exemples pour les sections `Conditions`, `Outputs` et `Resources` dans [Exemples](intrinsic-function-reference-foreach-examples.md).

# Exemples
<a name="intrinsic-function-reference-foreach-examples"></a>

**Topics**
+ [Exemples de `Fn::ForEach` dans la section consacrée aux `Resources`](intrinsic-function-reference-foreach-example-resource.md)
+ [Exemples de `Fn::ForEach` dans la section consacrée aux `Outputs`](intrinsic-function-reference-foreach-example-outputs.md)
+ [Exemples de `Fn::ForEach` dans la section consacrée aux `Conditions`](intrinsic-function-reference-foreach-example-conditions.md)

# Exemples de `Fn::ForEach` dans la section consacrée aux `Resources`
<a name="intrinsic-function-reference-foreach-example-resource"></a>

Ces exemples illustrent l'utilisation de la fonction intrinsèque `Fn::ForEach` dans la section `Resources`. Pour plus d’informations sur cette section, consultez [Ressources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html) dans le *Guide de l’utilisateur AWS CloudFormation *.

**Topics**
+ [Répliquer une ressource Amazon SNS](#intrinsic-function-reference-foreach-example-replicate-resource)
+ [Répliquer une ressource Amazon DynamoDB](#intrinsic-function-reference-foreach-example-replicate-ddb-resource)
+ [Répliquer plusieurs ressources](#intrinsic-function-reference-foreach-example-replicate-multiple-resources)
+ [Répliquer plusieurs ressources à l'aide de boucles `Fn::ForEach` imbriquées](#intrinsic-function-reference-foreach-example-nested-loop-resources)
+ [Référencer les propriétés répliquées d'une ressource Amazon EC2](#intrinsic-function-reference-foreach-example-reference-replicated-resource)
+ [Répliquer les propriétés d'une ressource Amazon EC2](#intrinsic-function-reference-foreach-example-replicate-resource-properties)
+ [Transmission de caractères non alphanumériques dans `Collection` pour `Fn::ForEach`](#intrinsic-function-reference-foreach-example-non-alphanumeric)

## Répliquer une ressource Amazon SNS
<a name="intrinsic-function-reference-foreach-example-replicate-resource"></a>

Cet exemple d'extrait de code renvoie une liste de quatre rubriques Amazon SNS, avec l'ID logique correspondant aux éléments de la collection (`Success`, `Failure`, `Timeout`, `Unknown`) et avec des correspondances `TopicName` et `FifoTopic` définies sur `true`.

**Note**  
Pour les modèles devant fonctionner avec des rubriques FIFO et standard, vous pouvez utiliser la propriété `DisplayName` au lieu de `TopicName`. Cela permet de CloudFormation générer automatiquement des noms de sujets avec le `.fifo` suffixe approprié quand `FifoTopic` c'est `true` le cas. Il suffit de remplacer `TopicName` par `DisplayName: !Ref TopicName` dans la section `Properties`.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-resource.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Resources": {
        "Fn::ForEach::Topics": [
            "TopicName",
            ["Success", "Failure", "Timeout", "Unknown"],
            {
                "SnsTopic${TopicName}": {
                    "Type": "AWS::SNS::Topic",
                    "Properties": {
                        "TopicName": {"Fn::Sub": "${TopicName}.fifo"},
                        "FifoTopic": true
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Topics':
    - TopicName
    - [Success, Failure, Timeout, Unknown]
    - 'SnsTopic${TopicName}':
        Type: AWS::SNS::Topic
        Properties:
          TopicName: !Sub '${TopicName}.fifo'
          FifoTopic: true
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  SnsTopicSuccess:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Success.fifo
      FifoTopic: true
  SnsTopicFailure:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Failure.fifo
      FifoTopic: true
  SnsTopicTimeout:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Timeout.fifo
      FifoTopic: true
  SnsTopicUnknown:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: Unknown.fifo
      FifoTopic: true
```

## Répliquer une ressource Amazon DynamoDB
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource"></a>

Cet exemple d'extrait de code crée quatre ressources [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-dynamodb-table.html) dotées de noms tels que `Points`, `Score`, etc.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Resources": {
        "Fn::ForEach::Tables": [
            "TableName",
            ["Points", "Score", "Name", "Leaderboard"],
            {
                "DynamoDB${TableName}": {
                    "Type": "AWS::DynamoDB::Table",
                    "Properties": {
                        "TableName": {
                            "Ref": "TableName"
                        },
                        "AttributeDefinitions": [
                            {
                                "AttributeName": "id",
                                "AttributeType": "S"
                            }
                        ],
                        "KeySchema": [
                            {
                                "AttributeName": "id",
                                "KeyType": "HASH"
                            }
                        ],
                        "ProvisionedThroughput": {
                            "ReadCapacityUnits": "5",
                            "WriteCapacityUnits": "5"
                        }
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Tables':
    - TableName
    - [Points, Score, Name, Leaderboard]
    - 'DynamoDB${TableName}':
        Type: AWS::DynamoDB::Table
        Properties:
          TableName: !Ref TableName
          AttributeDefinitions:
            - AttributeName: id
              AttributeType: S
          KeySchema:
            - AttributeName: id
              KeyType: HASH
          ProvisionedThroughput:
            ReadCapacityUnits: '5'
            WriteCapacityUnits: '5'
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  DynamoDBPoints:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Points
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBScore:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Score
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBName:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Name
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
  DynamoDBLeaderboard:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: Leaderboard
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
```

## Répliquer plusieurs ressources
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources"></a>

Cet exemple crée plusieurs instances de [AWS::EC2::NatGateway](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html)et [AWS : :EC2 : :EIP](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-eip.html) en utilisant une convention de dénomination de. `"{ResourceType}${Identifier}"` Vous pouvez déclarer plusieurs types de ressources dans une seule boucle `Fn::ForEach` pour tirer parti d'un identifiant unique.

Les valeurs uniques pour chaque élément de la collection sont définies dans la section `Mappings`, où la fonction intrinsèque [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md) est utilisée pour référencer la valeur correspondante. Si `Fn::FindInMap` ne parvient pas à trouver l’identifiant correspondant, la propriété `Condition` n’est pas définie et revient alors à `!Ref AWS:::NoValue`.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Conditions": {
    "TwoNatGateways": {"Fn::Equals": [{"Ref": "AWS::Region"}, "us-east-1"]},
    "ThreeNatGateways": {"Fn::Equals": [{"Ref": "AWS::Region"}, "us-west-2"]}
  },
  "Mappings": {
    "NatGateway": {
      "Condition": {
        "B": "TwoNatGateways",
        "C": "ThreeNatGateways"
      }
    }
  },
  "Resources": {
    "VPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {"CidrBlock": "10.0.0.0/16"}
    },
    "PublicSubnetA": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.1.0/24",
        "AvailabilityZone": {"Fn::Select": [0, {"Fn::GetAZs": ""}]}
      }
    },
    "PublicSubnetB": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.2.0/24",
        "AvailabilityZone": {"Fn::Select": [1, {"Fn::GetAZs": ""}]}
      }
    },
    "PublicSubnetC": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "VpcId": {"Ref": "VPC"},
        "CidrBlock": "10.0.3.0/24",
        "AvailabilityZone": {"Fn::Select": [2, {"Fn::GetAZs": ""}]}
      }
    },
    "Fn::ForEach::NatGatewayAndEIP": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "NatGateway${Identifier}": {
          "Type": "AWS::EC2::NatGateway",
          "Properties": {
            "AllocationId": {"Fn::GetAtt": [{"Fn::Sub": "NatGatewayAttachment${Identifier}"}, "AllocationId"]},
            "SubnetId": {"Ref": {"Fn::Sub": "PublicSubnet${Identifier}"}}
          },
          "Condition": {"Fn::FindInMap": ["NatGateway", "Condition", {"Ref": "Identifier"}, {"DefaultValue": {"Ref": "AWS::NoValue"}}]}
        },
        "NatGatewayAttachment${Identifier}": {
          "Type": "AWS::EC2::EIP",
          "Properties": {
            "Domain": "vpc"
          },
          "Condition": {"Fn::FindInMap": ["NatGateway", "Condition", {"Ref": "Identifier"}, {"DefaultValue": {"Ref": "AWS::NoValue"}}]}
        }
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Conditions:
  TwoNatGateways: !Equals [!Ref "AWS::Region", "us-east-1"]
  ThreeNatGateways: !Equals [!Ref "AWS::Region", "us-west-2"]
Mappings:
  NatGateway:
    Condition:
      B: TwoNatGateways
      C: ThreeNatGateways
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs ""]
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: !Select [1, !GetAZs ""]
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
      AvailabilityZone: !Select [2, !GetAZs ""]
  Fn::ForEach::NatGatewayAndEIP:
    - Identifier
    - - A
      - B
      - C
    - NatGateway${Identifier}:
        Type: AWS::EC2::NatGateway
        Properties:
          AllocationId: !GetAtt
            - !Sub NatGatewayAttachment${Identifier}
            - AllocationId
          SubnetId: !Ref
            Fn::Sub: PublicSubnet${Identifier}
        Condition: !FindInMap
          - NatGateway
          - Condition
          - !Ref Identifier
          - DefaultValue: !Ref AWS::NoValue
      NatGatewayAttachment${Identifier}:
        Type: AWS::EC2::EIP
        Properties:
          Domain: vpc
        Condition: !FindInMap
          - NatGateway
          - Condition
          - !Ref Identifier
          - DefaultValue: !Ref AWS::NoValue
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Conditions:
  TwoNatGateways: !Equals [!Ref "AWS::Region", "us-east-1"]
  ThreeNatGateways: !Equals [!Ref "AWS::Region", "us-west-2"]
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: !Select [0, !GetAZs ""]
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: !Select [1, !GetAZs ""]
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
      AvailabilityZone: !Select [2, !GetAZs ""]
  NatGatewayA:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentA
        - AllocationId
      SubnetId: !Ref PublicSubnetA
  NatGatewayB:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentB
        - AllocationId
      SubnetId: !Ref PublicSubnetB
    Condition: TwoNatGateways
  NatGatewayC:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt
        - NatGatewayAttachmentC
        - AllocationId
      SubnetId: !Ref PublicSubnetC
    Condition: ThreeNatGateways
  NatGatewayAttachmentA:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
  NatGatewayAttachmentB:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Condition: TwoNatGateways
  NatGatewayAttachmentC:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
    Condition: ThreeNatGateways
```

## Répliquer plusieurs ressources à l'aide de boucles `Fn::ForEach` imbriquées
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources"></a>

Cet exemple utilise des boucles `Fn::ForEach` imbriquées pour mapper trois ressources ([AWS::EC2::NetworkAcl](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html), [AWS::EC2::Subnet](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnet.html) et [AWS::EC2::SubnetNetworkAclAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnetnetworkaclassociation.html)) entre elles.

### JSON
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Resources": {
    "VPC": {
      "Type": "AWS::EC2::VPC",
      "Properties": {
        "CidrBlock": "10.0.0.0/16",
        "EnableDnsSupport": "true",
        "EnableDnsHostnames": "true"
      }
    },
    "Fn::ForEach::SubnetResources": [
      "Prefix",
      [
        "Transit",
        "Public"
      ],
      {
        "Nacl${Prefix}Subnet": {
          "Type": "AWS::EC2::NetworkAcl",
          "Properties": {
            "VpcId": {
              "Ref": "VPC"
            }
          }
        },
        "Fn::ForEach::LoopInner": [
          "Suffix",
          [
            "A",
            "B",
            "C"
          ],
          {
            "${Prefix}Subnet${Suffix}": {
              "Type": "AWS::EC2::Subnet",
              "Properties": {
                "VpcId": {
                  "Ref": "VPC"
                }
              }
            },
            "Nacl${Prefix}Subnet${Suffix}Association": {
              "Type": "AWS::EC2::SubnetNetworkAclAssociation",
              "Properties": {
                "SubnetId": {
                  "Ref": {
                    "Fn::Sub": "${Prefix}Subnet${Suffix}"
                  }
                },
                "NetworkAclId": {
                  "Ref": {
                    "Fn::Sub": "Nacl${Prefix}Subnet"
                  }
                }
              }
            }
          }
        ]
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  'Fn::ForEach::SubnetResources':
  - Prefix
  - [Transit, Public]
  - 'Nacl${Prefix}Subnet':
      Type: AWS::EC2::NetworkAcl
      Properties:
        VpcId: !Ref 'VPC'
    'Fn::ForEach::LoopInner':
    - Suffix
    - [A, B, C]
    - '${Prefix}Subnet${Suffix}':
        Type: AWS::EC2::Subnet
        Properties:
          VpcId: !Ref 'VPC'
      'Nacl${Prefix}Subnet${Suffix}Association':
        Type: AWS::EC2::SubnetNetworkAclAssociation
        Properties:
          SubnetId: !Ref
            'Fn::Sub': '${Prefix}Subnet${Suffix}'
          NetworkAclId: !Ref
            'Fn::Sub': 'Nacl${Prefix}Subnet'
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  NaclTransitSubnet:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
  TransitSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetAAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetA
      NetworkAclId: !Ref NaclTransitSubnet
  TransitSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetBAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetB
      NetworkAclId: !Ref NaclTransitSubnet
  TransitSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclTransitSubnetCAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref TransitSubnetC
      NetworkAclId: !Ref NaclTransitSubnet
  NaclPublicSubnet:
    Type: AWS::EC2::NetworkAcl
    Properties:
      VpcId: !Ref VPC
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetAAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetA
      NetworkAclId: !Ref NaclPublicSubnet
  PublicSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetBAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetB
      NetworkAclId: !Ref NaclPublicSubnet
  PublicSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
  NaclPublicSubnetCAssociation:
    Type: AWS::EC2::SubnetNetworkAclAssociation
    Properties:
      SubnetId: !Ref PublicSubnetC
      NetworkAclId: !Ref NaclPublicSubnet
```

## Référencer les propriétés répliquées d'une ressource Amazon EC2
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource"></a>

Cet exemple utilise la fonction intrinsèque `Fn::ForEach` pour faire référence aux ressources [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html) répliquées.

### JSON
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "Instances": {
      "InstanceType": {
        "B": "m5.4xlarge",
        "C": "c5.2xlarge"
      },
      "ImageId": {"A": "ami-id1"}
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "Identifier",
      [
        "A",
        "B",
        "C"
      ],
      {
        "Instance${Identifier}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "InstanceType": {"Fn::FindInMap": ["Instances", "InstanceType", {"Ref": "Identifier"}, {"DefaultValue": "m5.xlarge"}]},
            "ImageId": {"Fn::FindInMap": ["Instances", "ImageId", {"Ref": "Identifier"}, {"DefaultValue": "ami-id-default"}]}
          }
        }
      }
    ]
  },
  "Outputs": {
    "SecondInstanceId": {
      "Description": "Instance Id for InstanceB",
      "Value": {"Ref": "InstanceB"}
    },
    "SecondPrivateIp": {
      "Description": "Private IP for InstanceB",
      "Value": {
        "Fn::GetAtt": [
          "InstanceB",
          "PrivateIp"
        ]
      }
    }
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Instances:
    InstanceType:
      B: m5.4xlarge
      C: c5.2xlarge
    ImageId:
      A: ami-id1
Resources:
  'Fn::ForEach::Instances':
  - Identifier
  - [A, B, C]
  - 'Instance${Identifier}':
      Type: AWS::EC2::Instance
      Properties:
        InstanceType: !FindInMap [Instances, InstanceType, !Ref 'Identifier', {DefaultValue: m5.xlarge}]
        ImageId: !FindInMap [Instances, ImageId, !Ref 'Identifier', {DefaultValue: ami-id-default}]
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref 'InstanceB'
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.xlarge
      ImageId: ami-id1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.4xlarge
      ImageId: ami-id-default
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: c5.2xlarge
      ImageId: ami-id-default
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

## Répliquer les propriétés d'une ressource Amazon EC2
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties"></a>

Cet exemple utilise la fonction intrinsèque `Fn::ForEach` pour répéter certaines propriétés telles que `ImageId`, `InstanceType` et `AvailabilityZone` à une ressource [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html).

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "InstanceA": {
      "Properties": {
        "ImageId": "ami-id1",
        "InstanceType": "m5.xlarge"
      }
    },
    "InstanceB": {
      "Properties": {
        "ImageId": "ami-id2"
      }
    },
    "InstanceC": {
      "Properties": {
        "ImageId": "ami-id3",
        "InstanceType": "m5.2xlarge",
        "AvailabilityZone": "us-east-1a"
      }
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "InstanceLogicalId",
      [ "InstanceA", "InstanceB", "InstanceC" ],
      {
        "${InstanceLogicalId}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "DisableApiTermination": true,
            "UserData": {
              "Fn::Base64": {
                "Fn::Join": [
                  "",
                  [
                    "#!/bin/bash\n",
                    "yum update -y\n",
                    "yum install -y httpd.x86_64\n",
                    "systemctl start httpd.service\n",
                    "systemctl enable httpd.service\n",
                    "echo \"Hello World from $(hostname -f)\" > /var/www/html/index.html\n"
                  ]
                ]
              }
            },
            "Fn::ForEach::Properties": [
              "PropertyName",
              [ "ImageId", "InstanceType", "AvailabilityZone" ],
              {
                "${PropertyName}": {
                  "Fn::FindInMap": [
                    { "Ref": "InstanceLogicalId" },
                    "Properties",
                    { "Ref": "PropertyName"},
                    {
                      "DefaultValue": { "Ref": "AWS::NoValue" }
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  InstanceA:
    Properties:
      ImageId: ami-id1
      InstanceType: m5.xlarge
  InstanceB:
    Properties:
      ImageId: ami-id2
  InstanceC:
    Properties:
      ImageId: ami-id3
      InstanceType: m5.2xlarge
      AvailabilityZone: us-east-1a
Resources:
  'Fn::ForEach::Instances':
  - InstanceLogicalId
  - [InstanceA, InstanceB, InstanceC]
  - '${InstanceLogicalId}':
      Type: AWS::EC2::Instance
      Properties:
        DisableApiTermination: true
        UserData:
          Fn::Base64: !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
        'Fn::ForEach::Properties':
          - PropertyName
          - [ImageId, InstanceType, AvailabilityZone]
          - '${PropertyName}':
             'Fn::FindInMap':
               - Ref: 'InstanceLogicalId'
               - Properties
               - Ref: 'PropertyName'
               - {DefaultValue: !Ref 'AWS::NoValue'}
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id1
      InstanceType: m5.xlarge
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id2
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      DisableApiTermination: true
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            yum update -y
            yum install -y httpd.x86_64
            systemctl start httpd.service
            systemctl enable httpd.service
            echo "Hello World from $(hostname -f)" > /var/www/html/index.html
      ImageId: ami-id3
      InstanceType: m5.2xlarge
      AvailabilityZone: us-east-1a
```

## Transmission de caractères non alphanumériques dans `Collection` pour `Fn::ForEach`
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric"></a>

Cet exemple utilise la syntaxe `&{}` qui permet de transmettre les caractères non alphanumériques (`.` et `/`) des adresses IP dans la `Collection`.

### JSON
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric-json.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "IpAddresses": {
            "Type": "CommaDelimitedList",
            "Default": "10.0.2.0/24,10.0.3.0/24,10.0.4.0/24"
        }
    },
    "Resources": {
        "VPC": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsSupport": "true",
                "EnableDnsHostnames": "true"
            }
        },
        "Fn::ForEach::Subnets": [
            "CIDR",
            {
                "Ref": "IpAddresses"
            },
            {
                "Subnet&{CIDR}": {
                    "Type": "AWS::EC2::Subnet",
                    "Properties": {
                        "VpcId": {
                            "Ref": "VPC"
                        },
                        "CidrBlock": {
                            "Ref": "CIDR"
                        }
                    }
                }
            }
        ]
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric-yaml.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  IpAddresses:
    Type: CommaDelimitedList
    Default: '10.0.2.0/24,10.0.3.0/24,10.0.4.0/24'
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  'Fn::ForEach::Subnets':
    - CIDR
    - !Ref IpAddresses
    - 'Subnet&{CIDR}':
        Type: AWS::EC2::Subnet
        Properties:
          VpcId: !Ref VPC
          CidrBlock: !Ref CIDR
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  IpAddresses:
    Type: CommaDelimitedList
    Default: '10.0.2.0/24,10.0.3.0/24,10.0.4.0/24'
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
  Subnet1002024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
  Subnet1003024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.3.0/24
  Subnet1004024:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.4.0/24
```

# Exemples de `Fn::ForEach` dans la section consacrée aux `Outputs`
<a name="intrinsic-function-reference-foreach-example-outputs"></a>

Ces exemples illustrent l'utilisation de la fonction intrinsèque `Fn::ForEach` dans la section `Outputs`. Pour plus d’informations sur cette section, consultez [Sorties](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) dans le *Guide de l’utilisateur AWS CloudFormation *.

**Topics**
+ [Référencer les ressources `AWS::S3::Bucket` répliquées](#intrinsic-function-reference-foreach-example-replicate-outputs)
+ [Référencer les ressources `AWS::EC2::Instance` répliquées](#intrinsic-function-reference-foreach-example-replicate-conditions)

## Référencer les ressources `AWS::S3::Bucket` répliquées
<a name="intrinsic-function-reference-foreach-example-replicate-outputs"></a>

Cet exemple utilise des boucles `Fn::ForEach` imbriquées dans la section `Outputs` pour réduire la longueur du modèle.

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-outputs.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Resources": {
    "Fn::ForEach::Buckets": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "S3Bucket${Identifier}": {
          "Type": "AWS::S3::Bucket",
          "Properties": {
            "AccessControl": "PublicRead",
            "MetricsConfigurations": [
              {
                "Id": {"Fn::Sub": "EntireBucket${Identifier}"}
              }
            ],
            "WebsiteConfiguration": {
              "IndexDocument": "index.html",
              "ErrorDocument": "error.html",
              "RoutingRules": [
                {
                  "RoutingRuleCondition": {
                    "HttpErrorCodeReturnedEquals": "404",
                    "KeyPrefixEquals": "out1/"
                  },
                  "RedirectRule": {
                    "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
                    "ReplaceKeyPrefixWith": "report-404/"
                  }
                }
              ]
            }
          },
          "DeletionPolicy": "Retain",
          "UpdateReplacePolicy": "Retain"
        }
      }
    ]
  },
  "Outputs": {
    "Fn::ForEach::BucketOutputs": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "Fn::ForEach::GetAttLoop": [
          "Property",
          [ "Arn", "DomainName", "WebsiteURL" ],
          {
            "S3Bucket${Identifier}${Property}": {
              "Value": {"Fn::GetAtt": [{"Fn::Sub": "S3Bucket${Identifier}"}, {"Ref": "Property"}]}
            }
          }
        ]
      }
    ]
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-outputs.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  'Fn::ForEach::Buckets':
    - Identifier
    - [A, B, C]
    - 'S3Bucket${Identifier}':
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: PublicRead
          MetricsConfigurations:
            - Id: !Sub 'EntireBucket${Identifier}'
          WebsiteConfiguration:
            IndexDocument: index.html
            ErrorDocument: error.html
            RoutingRules:
              - RoutingRuleCondition:
                  HttpErrorCodeReturnedEquals: '404'
                  KeyPrefixEquals: out1/
                RedirectRule:
                  HostName: ec2-11-22-333-44.compute-1.amazonaws.com
                  ReplaceKeyPrefixWith: report-404/
        DeletionPolicy: Retain
        UpdateReplacePolicy: Retain
Outputs:
  'Fn::ForEach::BucketOutputs':
    - Identifier
    - [A, B, C]
    - 'Fn::ForEach::GetAttLoop':
        - Property
        - [Arn, DomainName, WebsiteURL]
        - 'S3Bucket${Identifier}${Property}':
            Value: !GetAtt [!Sub 'S3Bucket${Identifier}', !Ref Property]
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  S3BucketA:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketA
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
  S3BucketB:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketB
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
  S3BucketC:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      MetricsConfigurations:
        - Id: EntireBucketC
      WebsiteConfiguration:
        IndexDocument: index.html
        ErrorDocument: error.html
        RoutingRules:
          - RoutingRuleCondition:
              HttpErrorCodeReturnedEquals: '404'
              KeyPrefixEquals: out1/
            RedirectRule:
              HostName: ec2-11-22-333-44.compute-1.amazonaws.com
              ReplaceKeyPrefixWith: report-404/
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
Outputs:
  S3BucketAArn:
    Value: !GetAtt [S3BucketA, Arn]
  S3BucketADomainName:
    Value: !GetAtt [S3BucketA, DomainName]
  S3BucketAWebsiteURL:
    Value: !GetAtt [S3BucketA, WebsiteURL]
  S3BucketBArn:
    Value: !GetAtt [S3BucketB, Arn]
  S3BucketBDomainName:
    Value: !GetAtt [S3BucketB, DomainName]
  S3BucketBWebsiteURL:
    Value: !GetAtt [S3BucketB, WebsiteURL]
  S3BucketCArn:
    Value: !GetAtt [S3BucketC, Arn]
  S3BucketCDomainName:
    Value: !GetAtt [S3BucketC, DomainName]
  S3BucketCWebsiteURL:
    Value: !GetAtt [S3BucketC, WebsiteURL]
```

## Référencer les ressources `AWS::EC2::Instance` répliquées
<a name="intrinsic-function-reference-foreach-example-replicate-conditions"></a>

Cet exemple fait référence aux ressources répliquées dans la `Resources` section à l'aide de la logique IDs générée. 

### JSON
<a name="intrinsic-function-reference-foreach-example-replicate-conditions.json"></a>

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::LanguageExtensions",
  "Mappings": {
    "Instances": {
      "InstanceType": {
        "B": "m5.4xlarge",
        "C": "c5.2xlarge"
      },
      "ImageId": {"A": "ami-id1"}
    }
  },
  "Resources": {
    "Fn::ForEach::Instances": [
      "Identifier",
      [ "A", "B", "C" ],
      {
        "Instance${Identifier}": {
          "Type": "AWS::EC2::Instance",
          "Properties": {
            "InstanceType": {"Fn::FindInMap": ["Instances", "InstanceType", {"Ref": "Identifier"}, {"DefaultValue": "m5.xlarge"}]},
            "ImageId": {"Fn::FindInMap": ["Instances", "ImageId", {"Ref": "Identifier"}, {"DefaultValue": "ami-id-default"}]}
          }
        }
      }
    ]
  },
  "Outputs": {
    "SecondInstanceId": {
      "Description": "Instance Id for InstanceB",
      "Value": {"Ref": "InstanceB"}
    },
    "SecondPrivateIp": {
      "Description": "Private IP for InstanceB",
      "Value": {
        "Fn::GetAtt": [
          "InstanceB",
          "PrivateIp"
        ]
      }
    }
  }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-replicate-conditions.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Instances:
    InstanceType:
      B: m5.4xlarge
      C: c5.2xlarge
    ImageId:
      A: ami-id1
Resources:
  'Fn::ForEach::Instances':
    - Identifier
    - [A, B, C]
    - 'Instance${Identifier}':
        Type: AWS::EC2::Instance
        Properties:
          InstanceType: !FindInMap [Instances, InstanceType, !Ref Identifier, DefaultValue: m5.xlarge]
          ImageId: !FindInMap [Instances, ImageId, !Ref Identifier, DefaultValue: ami-id-default]
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Resources:
  InstanceA:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.xlarge
      ImageId: ami-id1
  InstanceB:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: m5.4xlarge
      ImageId: ami-id-default
  InstanceC:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: c5.2xlarge
      ImageId: ami-id-default
Outputs:
  SecondInstanceId:
    Description: Instance Id for InstanceB
    Value: !Ref InstanceB
  SecondPrivateIp:
    Description: Private IP for InstanceB
    Value: !GetAtt [InstanceB, PrivateIp]
```

# Exemples de `Fn::ForEach` dans la section consacrée aux `Conditions`
<a name="intrinsic-function-reference-foreach-example-conditions"></a>

Ces exemples illustrent l'utilisation de la fonction intrinsèque `Fn::ForEach` dans la section `Conditions`. Pour plus d’informations sur cette section, consultez [Conditions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) dans le *Guide de l’utilisateur AWS CloudFormation *.

**Important**  
`Conditions` doit apparaître en tant que deuxième propriété dans la liste, ou à une position ultérieure. La création de la pile échouera si `Conditions` est la première propriété répertoriée dans le paramètre du fragment de modèle de `Fn::ForEach`.

```
Resources:
  'Fn::ForEach::Topics':
    - LogicalId
    - !Ref TopicList
    - '${LogicalId}':
        Condition: !Sub 'TopicCondition${LogicalId}'
        Type: AWS::SNS::Topic
        Properties:
          TopicName: !Sub 'My${LogicalId}'
```

`Conditions` doit être ajoutée en tant que deuxième clé, ou après, pour que la création de la pile réussisse : 

```
Resources:
  'Fn::ForEach::Topics':
    - LogicalId
    - !Ref TopicList
    - '${LogicalId}':
        Type: AWS::SNS::Topic
        Condition: !Sub 'TopicCondition${LogicalId}'
        Properties:
          TopicName: !Sub 'My${LogicalId}'
```

**Topics**
+ [Répliquer une seule condition](#intrinsic-function-reference-foreach-example-replicated-single-condition)

## Répliquer une seule condition
<a name="intrinsic-function-reference-foreach-example-replicated-single-condition"></a>

Cet exemple utilise la fonction intrinsèque `Fn::ForEach` dans la section `Conditions` pour reproduire plusieurs conditions similaires ayant des propriétés différentes.

### JSON
<a name="intrinsic-function-reference-foreach-example-conditions.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "ParamA": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamB": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamC": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        },
        "ParamD": {
            "Type": "String",
            "AllowedValues": [
                "true",
                "false"
            ]
        }
    },
    "Conditions": {
        "Fn::ForEach::CheckTrue": [
            "Identifier",
            ["A", "B", "C", "D"],
            {
                "IsParam${Identifier}Enabled": {
                    "Fn::Equals": [
                        {"Ref": {"Fn::Sub": "Param${Identifier}"}},
                        "true"
                    ]
                }
            }
        ]
    },
    "Resources": {
        "WaitConditionHandle": {
            "Type": "AWS::CloudFormation::WaitConditionHandle"
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-foreach-example-conditions.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  ParamA:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamB:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamC:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamD:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
Conditions:
  'Fn::ForEach::CheckTrue':
    - Identifier
    - [A, B, C, D]
    - 'IsParam${Identifier}Enabled': !Equals 
        - !Ref 
          'Fn::Sub': 'Param${Identifier}'
        - 'true'
Resources:
  WaitConditionHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

Le modèle transformé sera équivalent au modèle suivant :

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  ParamA:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamB:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamC:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
  ParamD:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
Conditions:
  IsParamAEnabled: !Equals 
    - !Ref ParamA
    - 'true'
  IsParamBEnabled: !Equals 
    - !Ref ParamB
    - 'true'
  IsParamCEnabled: !Equals 
    - !Ref ParamC
    - 'true'
  IsParamDEnabled: !Equals 
    - !Ref ParamD
    - 'true'
Resources:
  WaitConditionHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

# `Fn::GetAtt`
<a name="intrinsic-function-reference-getatt"></a>

La fonction intrinsèque `Fn::GetAtt` renvoie la valeur d'un attribut à partir d'une ressource du modèle. 

## Déclaration
<a name="getatt-declaration"></a>

### JSON
<a name="intrinsic-function-reference-getatt-syntax.json"></a>

```
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
```

### YAML
<a name="intrinsic-function-reference-getatt-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::GetAtt: [ logicalNameOfResource, attributeName ]
```

Syntaxe pour la forme courte :

```
!GetAtt logicalNameOfResource.attributeName
```

## Parameters
<a name="getatt-parameters"></a>

`logicalNameOfResource`  
Nom logique (également appelé *ID logique*) de la ressource qui contient l'attribut souhaité.

`attributeName`  
Nom de l'attribut spécifique à une ressource dont vous voulez la valeur. Consultez la page de référence de la ressource pour plus d'informations sur les attributs disponibles pour ce type de ressource.

## Valeur renvoyée
<a name="intrinsic-function-reference-getatt-return"></a>

Valeur de l'attribut. Pour plus d’informations sur les valeurs renvoyées `GetAtt` pour les ressources, consultez la documentation des ressources dans [Référence des propriétés et des ressources](aws-template-resource-type-ref.md).

## Exemples
<a name="intrinsic-function-reference-getatt-examples"></a>

### Renvoi d’une valeur d’attribut
<a name="intrinsic-function-reference-getatt-example"></a>

Les exemples suivants renvoient une chaîne contenant le nom DNS de l’équilibreur de charge dont le nom logique est `myELB`.

#### JSON
<a name="intrinsic-function-reference-getatt-example.json"></a>

```
"Fn::GetAtt" : [ "myELB" , "DNSName" ]
```

#### YAML
<a name="intrinsic-function-reference-getatt-example.yaml"></a>

```
!GetAtt myELB.DNSName
```

#### Renvoi de plusieurs valeurs d’attribut
<a name="intrinsic-function-reference-getatt-example2"></a>

Les exemples suivants renvoient les valeurs `SourceSecurityGroup.OwnerAlias` et `SourceSecurityGroup.GroupName` de l’équilibreur de charge dont le nom logique est `myELB`.

##### JSON
<a name="intrinsic-function-reference-getatt-example2.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "myELB": {
            "Type": "AWS::ElasticLoadBalancing::LoadBalancer",
            "Properties": {
                "AvailabilityZones": [
                    "eu-west-1a"
                ],
                "Listeners": [
                    {
                        "LoadBalancerPort": "80",
                        "InstancePort": "80",
                        "Protocol": "HTTP"
                    }
                ]
            }
        },
        "myELBIngressGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "ELB ingress group",
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": 80,
                        "ToPort": 80,
                        "SourceSecurityGroupOwnerId": {
                            "Fn::GetAtt": [
                                "myELB",
                                "SourceSecurityGroup.OwnerAlias"
                            ]
                        },
                        "SourceSecurityGroupName": {
                            "Fn::GetAtt": [
                                "myELB",
                                "SourceSecurityGroup.GroupName"
                            ]
                        }
                    }
                ]
            }
        }
    }
}
```

##### YAML
<a name="intrinsic-function-reference-getatt-example2.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  myELB:
    Type: AWS::ElasticLoadBalancing::LoadBalancer
    Properties:
      AvailabilityZones:
        - eu-west-1a
      Listeners:
        - LoadBalancerPort: '80'
          InstancePort: '80'
          Protocol: HTTP
  myELBIngressGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ELB ingress group
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          SourceSecurityGroupOwnerId: !GetAtt myELB.SourceSecurityGroup.OwnerAlias
          SourceSecurityGroupName: !GetAtt myELB.SourceSecurityGroup.GroupName
```

#### Utilisation de `Fn::Sub` dans la fonction `Fn::GetAtt`
<a name="intrinsic-function-reference-getatt-foreach"></a>

**Note**  
Lorsque vous utilisez la transformation `AWS::LanguageExtensions`, vous pouvez utiliser `Fn::GetAtt` en combinaison avec d’autres fonctions intrinsèques. Pour les fonctions prises en charge, consultez [Fonctions prises en charge](#getatt-supported-functions).

Les exemples suivants montrent comment utiliser `Fn::GetAtt` avec [`Fn::Sub`](intrinsic-function-reference-sub.md), conjointement avec [`Fn::ForEach`](intrinsic-function-reference-foreach.md), dans la section `Outputs` d’un modèle afin de réduire la longueur et la verbosité du modèle. L'utilisation de `Fn::Sub` dans `Fn::GetAtt` permet au modèle de contenir une fonction intrinsèque qui peut faire référence à un compartiment différent à chaque itération de l'appel `Fn::ForEach`. 

##### JSON
<a name="intrinsic-function-reference-getatt-foreach.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Mappings": {
        "Buckets": {
            "Properties": {
                "Identifiers": ["A", "B", "C"]
            }
        }
    },
    "Resources": {
        "Fn::ForEach::Buckets": [
            "Identifier",
            {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]},
            {
                "S3Bucket${Identifier}": {
                    "Type": "AWS::S3::Bucket",
                    "Properties": {
                        "AccessControl": "PublicRead",
                        "MetricsConfigurations": [
                            {
                                "Id": {"Fn::Sub": "EntireBucket${Identifier}"}
                            }
                        ],
                        "WebsiteConfiguration": {
                            "IndexDocument": "index.html",
                            "ErrorDocument": "error.html",
                            "RoutingRules": [
                                {
                                    "RoutingRuleCondition": {
                                        "HttpErrorCodeReturnedEquals": "404",
                                        "KeyPrefixEquals": "out1/"
                                    },
                                    "RedirectRule": {
                                        "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
                                        "ReplaceKeyPrefixWith": "report-404/"
                                    }
                                }
                            ]
                        }
                    },
                    "DeletionPolicy": "Retain",
                    "UpdateReplacePolicy": "Retain"
                }
            }
        ]
    },
    "Outputs": {
        "Fn::ForEach::BucketOutputs": [
            "Identifier",
            {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]},
            {
                "Fn::ForEach::GetAttLoop": [
                    "Property",
                    ["Arn", "DomainName", "WebsiteURL"],
                    {
                        "S3Bucket${Identifier}${Property}": {
                            "Value": {
                                "Fn::GetAtt": [{"Fn::Sub": "S3Bucket${Identifier}"}, {"Ref": "Property"}]
                            }
                        }
                    }
                ]
            }
        ]
    }
}
```

##### YAML
<a name="intrinsic-function-reference-getatt-foreach.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Mappings:
  Buckets:
    Properties:
      Identifiers:
        - A
        - B
        - C
Resources:
  'Fn::ForEach::Buckets':
    - Identifier
    - Fn::FindInMap: 
      - Buckets
      - Properties
      - Identifiers
    - 'S3Bucket${Identifier}':
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: PublicRead
          MetricsConfigurations:
            - Id: 
                Fn::Sub: 'EntireBucket${Identifier}'
          WebsiteConfiguration:
            IndexDocument: index.html
            ErrorDocument: error.html
            RoutingRules:
              - RoutingRuleCondition:
                  HttpErrorCodeReturnedEquals: '404'
                  KeyPrefixEquals: out1/
                RedirectRule:
                  HostName: ec2-11-22-333-44.compute-1.amazonaws.com
                  ReplaceKeyPrefixWith: report-404/
        DeletionPolicy: Retain
        UpdateReplacePolicy: Retain
Outputs:
  'Fn::ForEach::BucketOutputs':
    - Identifier
    - Fn::FindInMap:
      - Buckets
      - Properties
      - Identifiers
    - 'Fn::ForEach::GetAttLoop':
        - Property
        - - Arn
          - DomainName
          - WebsiteURL
        - 'S3Bucket${Identifier}${Property}':
            Value: !GetAtt 
              - !Sub 'S3Bucket${Identifier}'
              - !Ref Property
```

## Fonctions prises en charge
<a name="getatt-supported-functions"></a>

Lorsque vous utilisez la [transformation AWS::LanguageExtensions](transform-aws-languageextensions.md), vous pouvez utiliser les fonctions suivantes dans la fonction `Fn::GetAtt`. Cela est vrai à la fois pour le nom de la ressource logique `Fn::GetAtt` et le nom de l'attribut `Fn::GetAtt`.
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

Lorsque la transformation `AWS::LanguageExtensions` n'est pas utilisée :
+ Le nom d’attribut `Fn::GetAtt` ne peut utiliser que la fonction [`Ref`](intrinsic-function-reference-ref.md).
+ Le nom de ressource logique `Fn::GetAtt` ne peut pas utiliser de fonctions. Vous devez spécifier une chaîne qui correspond à l'ID logique d'une ressource. 

# `Fn::GetAZs`
<a name="intrinsic-function-reference-getavailabilityzones"></a>

La fonction intrinsèque `Fn::GetAZs` renvoie un tableau qui répertorie les zones de disponibilité d’une région donnée en ordre alphabétique. Etant donné que les clients ont accès à différentes zones de disponibilité, la fonction intrinsèque `Fn::GetAZs` permet aux auteurs d'écrire des modèles qui s'adaptent à l'accès de l'utilisateur appelant. De cette façon, vous n’avez pas à coder en dur une liste complète de zones de disponibilité pour une région donnée.

**Important**  
La fonction `Fn::GetAZs` renvoie uniquement les zones de disponibilité qui ont un sous-réseau par défaut, sauf si aucune d'elles n'a de sous-réseau par défaut. Dans ce cas, toutes les zones de disponibilité sont renvoyées.  
Comme pour la réponse de la `describe-availability-zones` AWS CLI commande, l'ordre des résultats de la `Fn::GetAZs` fonction n'est pas garanti et peut changer lorsque de nouvelles zones de disponibilité sont ajoutées.

Autorisations IAM

Les autorisations dont vous avez besoin pour pouvoir utiliser la fonction `Fn::GetAZs` dépendent de la plateforme sur laquelle vous lancez les instances Amazon EC2. Pour les deux plateformes, vous avez besoin des autorisations requises pour les actions Amazon EC2 `DescribeAvailabilityZones` et `DescribeAccountAttributes`. Pour EC2-VPC, vous devez également disposer des autorisations requises pour l'action Amazon EC2 `DescribeSubnets`.

## Déclaration
<a name="intrinsic-function-reference-getazs-declaration"></a>

### JSON
<a name="intrinsic-function-reference-getazs-syntax.json"></a>

```
{ "Fn::GetAZs" : "region" }
```

### YAML
<a name="intrinsic-function-reference-getazs-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::GetAZs: region
```

Syntaxe pour la forme courte :

```
!GetAZs region
```

## Parameters
<a name="intrinsic-function-reference-getazs-parameters"></a>

region  <a name="region"></a>
Nom de la région pour laquelle vous souhaitez obtenir les zones de disponibilité.  
Vous pouvez utiliser le pseudo-paramètre `AWS::Region` pour spécifier la région dans laquelle la pile est créée. La définition d'une chaîne vide revient à spécifier `AWS::Region`.

## Valeur renvoyée
<a name="intrinsic-function-reference-getazs-return-value"></a>

Liste des zones de disponibilité de la région.

## Exemples
<a name="intrinsic-function-reference-getazs-examples"></a>

### Évaluer une région.
<a name="intrinsic-function-reference-getazs-examples-evaluate-region"></a>

Pour ces exemples, CloudFormation évalue `Fn::GetAZs` le tableau suivant, en supposant que l'utilisateur a créé la pile dans la région : `us-east-1`

`[ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1e" ]`

#### JSON
<a name="intrinsic-function-reference-getazs-example1.json"></a>

```
1. { "Fn::GetAZs" : "" }
2. { "Fn::GetAZs" : { "Ref" : "AWS::Region" } }
3. { "Fn::GetAZs" : "us-east-1" }
```

#### YAML
<a name="intrinsic-function-reference-getazs-example1.yaml"></a>

```
1. Fn::GetAZs: ""
2. Fn::GetAZs:
3.   Ref: "AWS::Region"
4. Fn::GetAZs: us-east-1
```

 

### Spécification de la zone de disponibilité d'un sous-réseau
<a name="intrinsic-function-reference-getazs-examples-subnet-az"></a>

L'exemple suivant utilise `Fn::GetAZs` pour spécifier la zone de disponibilité d'un sous-réseau :

#### JSON
<a name="intrinsic-function-reference-getazs-example.json"></a>

```
"mySubnet" : {
  "Type" : "AWS::EC2::Subnet",
  "Properties" : {
    "VpcId" : { 
      "Ref" : "VPC"   
    },
    "CidrBlock" : "10.0.0.0/24",
    "AvailabilityZone" : {
      "Fn::Select" : [ 
        0, 
        { 
          "Fn::GetAZs" : "" 
        } 
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-getazs-example.yaml"></a>

```
mySubnet: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: 
      !Ref VPC
    CidrBlock: 10.0.0.0/24
    AvailabilityZone: 
      Fn::Select: 
        - 0
        - Fn::GetAZs: ""
```

 

### Fonctions imbriquées avec forme courte YAML
<a name="intrinsic-function-reference-getazs-examples-nested-functions"></a>

Les exemples suivants illustrent des modèles valides pour l'utilisation des fonctions intrinsèque imbriquées à l'aide d'une forme YAML courte. Comme vous ne pouvez pas imbriquer consécutivement des fonctions de forme courte, un modèle tel que `!GetAZs !Ref` n'est pas valide.

#### YAML
<a name="intrinsic-function-reference-getavailabilityzones-example3.yaml"></a>

```
1. AvailabilityZone: !Select
2.   - 0
3.   - !GetAZs
4.     Ref: 'AWS::Region'
```

#### YAML
<a name="intrinsic-function-reference-getavailabilityzones-example4.yaml"></a>

```
1. AvailabilityZone: !Select
2.   - 0
3.   - Fn::GetAZs: !Ref 'AWS::Region'
```

## Fonctions prises en charge
<a name="intrinsic-function-reference-getazs-supported-functions"></a>

Vous pouvez utiliser la fonction `Ref` dans la fonction `Fn::GetAZs`.

# `Fn::ImportValue`
<a name="intrinsic-function-reference-importvalue"></a>

La fonction intrinsèque `Fn::ImportValue` renvoie la valeur d’une sortie exportée par une autre pile. Cette fonction est généralement utilisée pour créer des références entre piles. Pour plus d'informations, voir [Procédure pas à pas : reportez-vous aux sorties de ressources d'une autre CloudFormation pile](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html) dans le *Guide de l'AWS CloudFormation utilisateur*.

Dans les extraits des exemples de modèles suivants, la pile A exporte les valeurs du groupe de sécurité VPC et la pile B les importe.

**Note**  
Les restrictions suivantes s’appliquent aux références entre piles :  
Pour chacun Compte AWS, les `Export` noms doivent être uniques au sein d'une région.
Il n’est pas possible de créer des références entre piles entre différentes régions. Vous pouvez utiliser la fonction intrinsèque `Fn::ImportValue` pour importer uniquement les valeurs qui ont été exportées dans la même région.
Pour les sorties, la valeur de la propriété `Name` d'un `Export` ne peut pas utiliser de fonctions `Ref` ou `GetAtt` qui dépendent d'une ressource.  
De même, la fonction `ImportValue` ne peut pas inclure de fonctions `Ref` ou `GetAtt` qui dépendent d'une ressource.
Lorsqu’une autre pile importe une valeur de sortie, vous ne peut pas supprimer la pile qui exporte la valeur de sortie ou modifier la valeur de sortie exportée. Toutes les importations doivent être supprimées avant de pouvoir supprimer la pile d’exportation ou modifier la valeur de sortie.

## JSON
<a name="intrinsic-function-reference-importvalue-export.json"></a>

Exportation de la pile A

```
"Outputs" : {
  "PublicSubnet" : {
    "Description" : "The subnet ID to use for public web servers",
    "Value" :  { "Ref" : "PublicSubnet" },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SubnetID" }}
  },
  "WebServerSecurityGroup" : {
    "Description" : "The security group ID to use for public web servers",
    "Value" :  { "Fn::GetAtt" : ["WebServerSecurityGroup", "GroupId"] },
    "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SecurityGroupID" }}
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-export.yaml"></a>

Exportation de la pile A

```
Outputs:
  PublicSubnet:
    Description: The subnet ID to use for public web servers
    Value:
      Ref: PublicSubnet
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SubnetID'
  WebServerSecurityGroup:
    Description: The security group ID to use for public web servers
    Value:
      'Fn::GetAtt':
        - WebServerSecurityGroup
        - GroupId
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SecurityGroupID'
```

## JSON
<a name="intrinsic-function-reference-importvalue-import.json"></a>

Importation de la pile B

```
"Resources" : {
  "WebServerInstance" : {
    "Type" : "AWS::EC2::Instance",
    "Properties" : {
      "InstanceType" : "t2.micro",
      "ImageId" : "ami-a1b23456",
      "NetworkInterfaces" : [{
        "GroupSet" : [{"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SecurityGroupID"}}],
        "AssociatePublicIpAddress" : "true",
        "DeviceIndex" : "0",
        "DeleteOnTermination" : "true",
        "SubnetId" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SubnetID"}}
      }]
    }
  }
}
```

## YAML
<a name="intrinsic-function-reference-importvalue-import.yaml"></a>

Importation de la pile B

```
Resources:
  WebServerInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-a1b23456
      NetworkInterfaces:
        - GroupSet:
            - Fn::ImportValue: 
              'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID'
          AssociatePublicIpAddress: 'true'
          DeviceIndex: '0'
          DeleteOnTermination: 'true'
          SubnetId: Fn::ImportValue: 
            'Fn::Sub': '${NetworkStackNameParameter}-SubnetID'
```

## Déclaration
<a name="w2aac24c43c11"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-syntax.json"></a>

```
{ "Fn::ImportValue" : sharedValueToImport }
```

### YAML
<a name="intrinsic-function-reference-importvalue-syntax.yaml"></a>

Vous pouvez utiliser le nom complet de la fonction :

```
Fn::ImportValue: sharedValueToImport
```

Vous pouvez également utiliser la forme courte :

```
!ImportValue sharedValueToImport
```

**Important**  
Vous ne pouvez pas utiliser la forme courte de `!ImportValue` quand elle contient une forme courte de `!Sub`.   

```
# do not use
!ImportValue
  !Sub '${NetworkStack}-SubnetID'
```
Vous devez plutôt indiquer le nom complet de la fonction, par exemple :  

```
Fn::ImportValue:
  !Sub "${NetworkStack}-SubnetID"
```

## Parameters
<a name="w2aac24c43c13"></a>

sharedValueToImporter  
Valeur de sortie de pile à importer.

## Valeur renvoyée
<a name="w2aac24c43c15"></a>

Valeur de sortie de pile.

## Exemple
<a name="w2aac24c43c17"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-example.json"></a>

```
{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }
```

### YAML
<a name="intrinsic-function-reference-importvalue-example.yaml"></a>

```
Fn::ImportValue:
  !Sub "${NetworkStackName}-SecurityGroupID"
```

## Fonctions prises en charge
<a name="w2aac24c43c19"></a>

Vous pouvez utiliser les fonctions suivantes dans la fonction `Fn::ImportValue`. La valeur de ces fonctions ne peut pas dépendre d'une ressource.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Join`
<a name="intrinsic-function-reference-join"></a>

La fonction intrinsèque `Fn::Join` ajoute un ensemble de valeurs dans une seule valeur, séparées par le délimiteur spécifié. Si un délimiteur est une chaîne vide, l'ensemble de valeurs est concaténé avec aucun délimiteur.

## Déclaration
<a name="w2aac24c48b5"></a>

### JSON
<a name="intrinsic-function-reference-join-syntax.json"></a>

```
{ "Fn::Join" : [ "delimiter", [ comma-delimited list of values ] ] }
```

### YAML
<a name="intrinsic-function-reference-join-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Join: [ delimiter, [ comma-delimited list of values ] ]
```

Syntaxe pour la forme courte :

```
!Join [ delimiter, [ comma-delimited list of values ] ]
```

## Parameters
<a name="intrinsic-function-reference-join-parameters"></a>

delimiter  
Valeur que vous voulez utiliser entre les fragments. Le délimiteur intervient uniquement entre les fragments. Il n'apparaît pas après la valeur finale.

ListOfValues  
Liste des valeurs que vous voulez combiner.

## Valeur renvoyée
<a name="intrinsic-function-reference-join-returnvalues"></a>

Chaîne combinée.

## Exemples
<a name="intrinsic-function-reference-join-examples"></a>

### Associer une matrice à chaîne simple
<a name="intrinsic-function-reference-join-example1"></a>

L'exemple suivant renvoie : `"a:b:c"`.

#### JSON
<a name="intrinsic-function-reference-join-example1.json"></a>

```
"Fn::Join" : [ ":", [ "a", "b", "c" ] ]
```

#### YAML
<a name="intrinsic-function-reference-join-example1.yaml"></a>

```
!Join [ ":", [ a, b, c ] ]
```

### Associer à l'aide de la fonction Ref avec Paramètres
<a name="intrinsic-function-reference-join-example2"></a>

L'exemple suivant utilise `Fn::Join` pour construire une valeur de chaîne. Il utilise la fonction `Ref` avec le paramètre `AWS::Partition` et le pseudo-paramètre `AWS::AccountId`.

#### JSON
<a name="intrinsic-function-reference-join-example2.json"></a>

```
{
  "Fn::Join": [
    "", [
      "arn:",
      {
        "Ref": "AWS::Partition"
      },
      ":s3:::elasticbeanstalk-*-",
      {
        "Ref": "AWS::AccountId"
      }
    ]
  ]
}
```

#### YAML
<a name="intrinsic-function-reference-join-example2.yaml"></a>

```
!Join
  - ''
  - - 'arn:'
    - !Ref AWS::Partition
    - ':s3:::elasticbeanstalk-*-'
    - !Ref AWS::AccountId
```

**Note**  
Consultez également la fonction [`Fn::Sub`](intrinsic-function-reference-sub.md) pour une fonctionnalité similaire.

## Fonctions prises en charge
<a name="intrinsic-function-reference-join-supportedfunctions"></a>

Avec le délimiteur `Fn::Join`, vous ne pouvez pas utiliser toutes les fonctions. Vous devez spécifier une valeur de type chaîne.

Pour la liste de valeurs `Fn::Join`, vous pouvez utiliser les fonctions suivantes :
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Split`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Length`
<a name="intrinsic-function-reference-length"></a>

La fonction intrinsèque `Fn::Length` renvoie le nombre d'éléments d'un tableau ou d'une fonction intrinsèque qui renvoie un tableau.

**Important**  
Vous devez utiliser la transformation [Transformation `AWS::LanguageExtensions`](transform-aws-languageextensions.md) pour utiliser la fonction intrinsèque `Fn::Length`.

## Déclaration
<a name="length-declaration"></a>

### JSON
<a name="intrinsic-function-reference-length-syntax.json"></a>

```
{ "Fn::Length" : IntrinsicFunction }
```

```
{ "Fn::Length" : Array }
```

### YAML
<a name="intrinsic-function-reference-length-syntax.yaml"></a>

```
Fn::Length : IntrinsicFunction
```

```
Fn::Length : Array
```

## Parameters
<a name="length-parameters"></a>

`IntrinsicFunction`  
La fonction intrinsèque qui renvoie un tableau dont vous voulez renvoyer plusieurs éléments.

`Array`  
Le tableau à partir duquel vous souhaitez renvoyer le nombre d'éléments.

## Valeur renvoyée
<a name="intrinsic-function-reference-length-return"></a>

Le nombre d'éléments de la fonction intrinsèque qui renvoie un tableau ou le nombre d'éléments du tableau transmis à la fonction intrinsèque. 

## Exemples
<a name="intrinsic-function-reference-length-examples"></a>

### Renvoyer le nombre d'éléments d'une fonction intrinsèque qui renvoie un tableau
<a name="intrinsic-function-reference-length-example-subsection"></a>

Cet exemple d'extrait renvoie le nombre d'éléments d'une fonction intrinsèque qui renvoie un tableau. La fonction renvoie 3.

#### JSON
<a name="intrinsic-function-reference-length-example.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::Length" : {
            "Fn::Split": ["|", "a|b|c"]
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-legnth-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    !Split ["|", "a|b|c"]
#...
```

### Renvoyer le nombre d'éléments d'une fonction intrinsèque Ref qui fait référence à un type de paramètre de liste
<a name="intrinsic-function-reference-length-example2"></a>

Cet exemple renvoie le nombre d'éléments d'une fonction intrinsèque `Ref` qui fait référence à un paramètre de type liste. Si le paramètre avec le nom `ListParameter` est une liste avec 3 éléments, la fonction renvoie 3.

#### JSON
<a name="intrinsic-function-reference-length-example2.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::Length": {
            "Ref": "ListParameter"
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-legnth-example2.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    !Ref ListParameter
#...
```

### Renvoyer le nombre d'éléments d'un tableau
<a name="intrinsic-function-reference-length-example3"></a>

Cet exemple d'extrait renvoie le nombre d'éléments du tableau transmis à la fonction intrinsèque. La fonction renvoie 3.

#### JSON
<a name="intrinsic-function-reference-length-example3.json"></a>

```
 1. {
 2. //...
 3.     "Transform": "AWS::LanguageExtensions"
 4.     //...
 5.         "Fn::Length": [
 6.             1,
 7.             {"Ref": "ParameterName"}, 
 8.             3
 9.         ]
10. //...
11. }
```

#### YAML
<a name="intrinsic-function-reference-legnth-example3.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::Length: 
    - 1
    - !Ref ParameterName
    - 3
#...
```

## Fonctions prises en charge
<a name="length-supported-functions"></a>

Vous pouvez utiliser les fonctions suivantes dans la fonction intrinsèque `Fn::Length` ou le tableau :
+ `Condition Functions`
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::Join`
+ `Fn::Length`
+ `Fn::Select`
+ `Fn::Split`
+ `Fn::Sub`
+ `Fn::ToJsonString`
+ `Ref`

# `Fn::Select`
<a name="intrinsic-function-reference-select"></a>

La fonction intrinsèque `Fn::Select` renvoie un seul objet à partir d'une liste d'objets en fonction de son index.

**Important**  
`Fn::Select` ne recherche pas les valeurs null ou ne vérifie pas si l'index sort des limites du tableau. Ces deux conditions entraînent une erreur de la pile. Assurez-vous donc que l’index que vous choisissez est valide et que la liste contient des valeurs autres que null.

## Déclaration
<a name="w2aac24c58b7"></a>

### JSON
<a name="intrinsic-function-reference-select-syntax.json"></a>

```
{ "Fn::Select" : [ index, listOfObjects ] }
```

### YAML
<a name="intrinsic-function-reference-select-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Select: [ index, listOfObjects ] 
```

Syntaxe pour la forme courte :

```
!Select [ index, listOfObjects ]
```

## Parameters
<a name="w2aac24c58b9"></a>

index  
Index de l'objet à récupérer. Il doit s'agir d'une valeur comprise entre zéro et N-1, où N représente le nombre d'éléments du tableau.

listOfObjects  
Liste des objets à partir desquels effectuer la sélection. Cette liste ne doit pas être nulle et ne peut pas contenir d'entrées null.

## Valeur renvoyée
<a name="w2aac24c58c11"></a>

Objet sélectionné.

## Exemples
<a name="w2aac24c58c13"></a>

### Exemple de base
<a name="w2aac24c58c13b3"></a>

L'exemple suivant renvoie : `"grapes"`.

#### JSON
<a name="intrinsic-function-reference-select-example0.json"></a>

```
{ "Fn::Select" : [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ] }
```

#### YAML
<a name="intrinsic-function-reference-select-example0.yaml"></a>

```
!Select [ "1", [ "apples", "grapes", "oranges", "mangoes" ] ]
```

 

### Type de paramètre avec une liste de valeurs séparées par des virgules
<a name="w2aac24c58c13b5"></a>

Vous pouvez utiliser `Fn::Select` pour sélectionner un objet à partir d'un paramètre `CommaDelimitedList`. Vous pouvez utiliser un paramètre `CommaDelimitedList` pour combiner les valeurs des paramètres associés, ce qui réduit le nombre total de paramètres dans le modèle. Par exemple, le paramètre suivant spécifie une liste CSV de trois blocs d'adresses CIDR :

#### JSON
<a name="intrinsic-function-reference-select-example1.json"></a>

```
"Parameters" : {
  "DbSubnetIpBlocks": {
    "Description": "Comma-delimited list of three CIDR blocks",
    "Type": "CommaDelimitedList",
      "Default": "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
  }
}
```

#### YAML
<a name="intrinsic-function-reference-select-example1.yaml"></a>

```
Parameters: 
  DbSubnetIpBlocks: 
    Description: "Comma-delimited list of three CIDR blocks"
    Type: CommaDelimitedList
    Default: "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
```

Pour spécifier l'un des trois blocs CIDR, utilisez `Fn::Select` dans la section Resources du même modèle, comme illustré dans l'exemple d'extrait suivant :

#### JSON
<a name="intrinsic-function-reference-select-example2.json"></a>

```
"Subnet0": {
  "Type": "AWS::EC2::Subnet",
    "Properties": {
      "VpcId": { "Ref": "VPC" },
      "CidrBlock": { "Fn::Select" : [ "0", {"Ref": "DbSubnetIpBlocks"} ] }
    }
}
```

#### YAML
<a name="intrinsic-function-reference-select-example2.yaml"></a>

```
Subnet0: 
  Type: AWS::EC2::Subnet
  Properties: 
    VpcId: !Ref VPC
    CidrBlock: !Select [ 0, !Ref DbSubnetIpBlocks ]
```

 

### Fonctions imbriquées avec forme courte YAML
<a name="w2aac24c58c13b7"></a>

Les exemples suivants montrent les schémas valides pour l'utilisation des fonctions intrinsèque imbriquées avec la forme courte `!Select`. Comme vous ne pouvez pas imbriquer consécutivement des fonctions de forme courte, un modèle tel que `!GetAZs !Ref` n'est pas valide.

#### YAML
<a name="intrinsic-function-reference-select-example3.yaml"></a>

```
AvailabilityZone: !Select 
  - 0
  - !GetAZs 
    Ref: 'AWS::Region'
```

#### YAML
<a name="intrinsic-function-reference-select-example4.yaml"></a>

```
AvailabilityZone: !Select 
  - 0
  - Fn::GetAZs: !Ref 'AWS::Region'
```

## Fonctions prises en charge
<a name="w2aac24c58c15"></a>

Pour la valeur d'index `Fn::Select`, vous pouvez utiliser les fonctions `Ref` et `Fn::FindInMap`.

Pour la liste d'objets `Fn::Select`, vous pouvez utiliser les fonctions suivantes :
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Split`
+ `Ref`

# `Fn::Split`
<a name="intrinsic-function-reference-split"></a>

Pour fractionner une chaîne en liste de valeurs de chaînes afin de pouvoir sélectionner un élément dans la liste de chaîne obtenue, utilisez la fonction intrinsèque `Fn::Split`. Spécifiez l'emplacement des fractionnements avec un délimiteur, par exemple `,` (une virgule). Une fois que la chaîne a été fractionnée, utilisez la fonction [`Fn::Select`](intrinsic-function-reference-select.md) pour sélectionner un élément spécifique.

Par exemple, si une chaîne de sous-réseau séparée par des virgules IDs est importée dans votre modèle de pile, vous pouvez diviser la chaîne à chaque virgule. Dans la liste des sous-réseaux IDs, utilisez la fonction `Fn::Select` intrinsèque pour spécifier un ID de sous-réseau pour une ressource.

## Déclaration
<a name="w2aac24c62b7"></a>

### JSON
<a name="intrinsic-function-reference-split-syntax.json"></a>

```
{ "Fn::Split" : [ "delimiter", "source string" ] }
```

### YAML
<a name="intrinsic-function-reference-split-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Split: [ delimiter, source string ]
```

Syntaxe pour la forme courte :

```
!Split [ delimiter, source string ]
```

## Parameters
<a name="w2aac24c62b9"></a>

Vous devez spécifier les deux paramètres.

delimiter  
Valeur de chaîne qui détermine l'emplacement de division de la chaîne source.

chaîne source  
Valeur de la chaîne que vous souhaitez fractionner.

## Valeur renvoyée
<a name="w2aac24c62c11"></a>

Liste de valeurs d'une chaîne.

## Exemples
<a name="w2aac24c62c13"></a>

Les exemples suivants montrent le comportement de la fonction `Fn::Split`.

### Liste simple
<a name="w2aac24c62c13b5"></a>

L'exemple suivant fractionne une chaîne à chaque barre verticale (`|`). La fonction retourne `["a", "b", "c"]`.

#### JSON
<a name="intrinsic-function-reference-split-example.json"></a>

```
{ "Fn::Split" : [ "|" , "a|b|c" ] }
```

#### YAML
<a name="intrinsic-function-reference-split-example.yaml"></a>

```
!Split [ "|" , "a|b|c" ]
```

 

### Liste avec des valeurs de chaîne vides
<a name="w2aac24c62c13b7"></a>

Si vous fractionnez une chaîne avec des délimiteurs consécutifs, la liste obtenue comprend une chaîne vide. L'exemple suivant montre comment une chaîne avec deux délimiteurs consécutifs et un délimiteur ajouté est fractionnée. La fonction retourne `["a", "", "c", ""]`.

#### JSON
<a name="w2aac24c62c13b7b5"></a>

```
{ "Fn::Split" : [ "|" , "a||c|" ] }
```

#### YAML
<a name="w2aac24c62c13b7b7"></a>

```
!Split [ "|" , "a||c|" ]
```

 

### Fractionner une valeur de sortie importée
<a name="w2aac24c62c13b9"></a>

L'exemple suivant divise une valeur de sortie importée, puis sélectionne le troisième élément dans la liste de sous-réseaux qui en résulte IDs, comme spécifié par la `Fn::Select` fonction.

#### JSON
<a name="w2aac24c62c13b9b5"></a>

```
{ "Fn::Select" : [ "2", { "Fn::Split": [",", {"Fn::ImportValue": "AccountSubnetIDs"}]}] }
```

#### YAML
<a name="w2aac24c62c13b9b7"></a>

```
!Select [2, !Split [",", !ImportValue AccountSubnetIDs]]
```

## Fonctions prises en charge
<a name="w2aac24c62c15"></a>

Avec le délimiteur `Fn::Split`, vous ne pouvez pas utiliser toutes les fonctions. Vous devez spécifier une valeur de type chaîne.

Pour la liste de valeurs `Fn::Split`, vous pouvez utiliser les fonctions suivantes :
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

# `Fn::Sub`
<a name="intrinsic-function-reference-sub"></a>

La fonction intrinsèque `Fn::Sub` permet de remplacer les variables contenues dans une chaîne d'entrée par des valeurs que vous spécifiez. Dans vos modèles, vous pouvez utiliser cette fonction pour construire des commandes ou des sorties qui incluent des valeurs qui ne sont pas disponibles tant que vous ne créez ou ne mettez à jour une pile.

## Déclaration
<a name="intrinsic-function-reference-sub-declaration"></a>

Les sections suivantes présentent la syntaxe de la fonction.

### JSON
<a name="intrinsic-function-reference-sub-syntax.json"></a>

```
{ "Fn::Sub" : [ String, { Var1Name: Var1Value, Var2Name: Var2Value } ] }
```

Si vous remplacez uniquement des paramètres de modèle, une logique IDs de ressource ou des attributs de ressource dans le `String` paramètre, ne spécifiez pas de carte variable.

```
{ "Fn::Sub" : String }
```

### YAML
<a name="intrinsic-function-reference-sub-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Sub:
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

Syntaxe pour la forme courte :

```
!Sub
  - String
  - Var1Name: Var1Value
    Var2Name: Var2Value
```

Si vous remplacez uniquement des paramètres de modèle, une logique IDs de ressource ou des attributs de ressource dans le `String` paramètre, ne spécifiez pas de carte variable.

Syntaxe pour le nom complet de la fonction :

```
Fn::Sub: String
```

Syntaxe pour la forme courte :

```
!Sub String
```

## Parameters
<a name="w2aac24c66b7"></a>

`String`  
Chaîne contenant des variables qui sont CloudFormation remplacées par leurs valeurs associées lors de l'exécution. Les variables s'écrivent sous la forme `${MyVarName}`. Les variables peuvent être des noms de paramètres de modèle, une logique de ressource IDs, des attributs de ressources ou une variable dans une carte clé-valeur. Si vous spécifiez uniquement les noms des paramètres du modèle, la logique IDs des ressources et les attributs des ressources, ne spécifiez pas de mappage clé-valeur.  
Si vous spécifiez des noms de paramètres de modèle ou une logique IDs de ressource`${InstanceTypeParameter}`, par exemple, CloudFormation renvoie les mêmes valeurs que si vous utilisiez la fonction `Ref` intrinsèque. Si vous spécifiez des attributs de ressource, tels que`${MyInstance.PublicIp}`, CloudFormation renvoie les mêmes valeurs que si vous utilisiez la fonction `Fn::GetAtt` intrinsèque.  
Pour écrire littéralement un symbole dollar et des accolades (`${}`), ajoutez un point d'exclamation (`!`) après l'orthèse bouclée ouverte, par exemple. `${!Literal}` CloudFormation résout ce texte en tant que`${Literal}`.  
Si vous utilisez un modèle de lancement, ajoutez une barre oblique inverse `\` avant le signe dollar, comme `\${!Literal}`, sinon la valeur littérale sera résolue en chaîne vide.

`VarName`  
Nom d'une variable que vous avez incluse dans le paramètre `String`.

`VarValue`  
La valeur qui CloudFormation remplace le nom de variable associé lors de l'exécution.

## Valeur renvoyée
<a name="w2aac24c66b9"></a>

CloudFormation renvoie la chaîne d'origine en remplaçant les valeurs de toutes les variables.

## Exemples
<a name="w2aac24c66c11"></a>

Les exemples suivants montrent comment utiliser la fonction `Fn::Sub`.

### Utilisation de `Fn::Sub` sans mappage clé-valeur
<a name="w2aac24c66c11b5"></a>

Dans cet exemple simple, la description de la ressource `InstanceSecurityGroup` est générée dynamiquement à l’aide du pseudo-paramètre `AWS::StackName`. Par exemple, si le nom de la pile est « VPC-EC2-ALB-Stack », la description obtenue sera « SSH security group for VPC-EC2-ALB-Stack ».

#### JSON
<a name="intrinsic-function-reference-sub-example-1.json"></a>

```
"InstanceSecurityGroup" : {
    "Type" : "AWS::EC2::SecurityGroup",
    "Properties" : {
        "GroupDescription" : {"Fn::Sub": "SSH security group for ${AWS::StackName}"}
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-1.yaml"></a>

```
InstanceSecurityGroup:
  Type: AWS::EC2::SecurityGroup
  Properties:
    GroupDescription: !Sub "SSH security group for ${AWS::StackName}"
```

### Utilisation de `Fn::Sub` avec un mappage clé-valeur
<a name="w2aac24c66c11b7"></a>

Dans cet exemple, le nom de la ressource`WWWBucket`  est généré dynamiquement avec un mappage clé-valeur. La fonction `Fn::Sub` remplace `${Domain}` dans la chaîne d’entrée `www.${Domain}` par la valeur issue de la fonction `Ref`, qui référence le paramètre `RootDomainName` défini dans le même modèle de pile. Par exemple, si le nom de domaine racine est « mydomain.com », le nom résultant de cette ressource sera « www.mydomain.com ».

#### JSON
<a name="intrinsic-function-reference-sub-example-2.json"></a>

```
"WWWBucket":{
  "Type":"AWS::S3::Bucket",
  "Properties":{
    "BucketName":{
      "Fn::Sub":[
        "www.${Domain}",
        {
          "Domain":{
            "Ref":"RootDomainName"
          }
        }
      ]
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-2.yaml"></a>

```
  WWWBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub
        - 'www.${Domain}'
        - Domain: !Ref RootDomainName
```

### Utiliser plusieurs variables pour construire ARNs
<a name="w2aac24c66c11b9"></a>

L’exemple suivant utilise `Fn::Sub` avec les pseudo-paramètres `AWS::Region` et `AWS::AccountId`, ainsi que l’ID logique de la ressource `vpc`, pour créer un Amazon Resource Name (ARN) pour un VPC.

#### JSON
<a name="intrinsic-function-reference-sub-example-3.json"></a>

```
{ "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" }
```

#### YAML
<a name="intrinsic-function-reference-sub-example-3.yaml"></a>

```
!Sub 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}'
```

### Transmission des valeurs de paramètres dans des scripts de données utilisateur
<a name="w2aac24c66c11c11"></a>

L’exemple suivant utilise `Fn::Sub` pour remplacer les pseudo-paramètres `AWS::StackName` et `AWS::Region` par le nom de la pile et la région au moment de l’exécution.

#### JSON
<a name="intrinsic-function-reference-sub-example.json"></a>

Pour plus de lisibilité, l'exemple JSON utilise la fonction `Fn::Join` pour séparer chaque commande, au lieu de spécifier l'intégralité du script de données utilisateur dans une même valeur de chaîne.

```
"UserData": { "Fn::Base64": { "Fn::Join": ["\n", [
  "#!/bin/bash -xe",
  "yum update -y aws-cfn-bootstrap",
  { "Fn::Sub": "/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}" },
  { "Fn::Sub": "/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}" }]]
}}
```

#### YAML
<a name="intrinsic-function-reference-sub-example.yaml"></a>

L'exemple YAML utilise un bloc littéral pour spécifier le script de données utilisateur.

```
UserData:
  Fn::Base64:
    !Sub |
      #!/bin/bash -xe
      yum update -y aws-cfn-bootstrap
      /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}
      /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
```

### Spécification de valeurs conditionnelles à l’aide de mappages
<a name="w2aac24c66c11c13"></a>

Dans cet exemple, le nom de la ressource `myLogGroup` est créé dynamiquement en remplaçant la variable `log_group_name` par la valeur résultante de la fonction `Fn::FindInMap`.

#### JSON
<a name="intrinsic-function-reference-sub-example-5.json"></a>

```
{
  "Mappings": {
    "LogGroupMapping": {
      "Test": {
        "Name": "test_log_group"
      },
      "Prod": {
        "Name": "prod_log_group"
      }
    }
  },
  "Resources": {
    "myLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": {
          "Fn::Sub": [
            "cloud_watch_${log_group_name}",
            {
              "log_group_name": {
                "Fn::FindInMap": [
                  "LogGroupMapping",
                  "Test",
                  "Name"
                ]
              }
            }
          ]
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-sub-example-5.yaml"></a>

```
Mappings:
  LogGroupMapping:
    Test:
      Name: test_log_group
    Prod:
      Name: prod_log_group
Resources:
  myLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Sub 
        - 'cloud_watch_${log_group_name}'
        - log_group_name: !FindInMap 
            - LogGroupMapping
            - Test
            - Name
```

## Fonctions prises en charge
<a name="intrinsic-function-reference-sub-supported-functions"></a>

Pour le paramètre `String`, vous ne pouvez pas utiliser de fonction. Vous devez spécifier une valeur de type chaîne.

Pour les paramètres `VarName` et `VarValue`, vous pouvez utiliser les fonctions suivantes :
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::GetAZs`](intrinsic-function-reference-getavailabilityzones.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Fn::Sub`](#intrinsic-function-reference-sub)
+ [`Ref`](intrinsic-function-reference-ref.md)

# `Fn::ToJsonString`
<a name="intrinsic-function-reference-ToJsonString"></a>

La fonction intrinsèque `Fn::ToJsonString` convertit un objet ou un tableau en sa chaîne JSON correspondante.

**Important**  
Vous devez utiliser la transformation [Transformation `AWS::LanguageExtensions`](transform-aws-languageextensions.md) pour utiliser la fonction intrinsèque `Fn::ToJsonString`.

## Déclaration
<a name="tojsonstring-declaration"></a>

### JSON
<a name="intrinsic-function-reference-tojsonstring-syntax.json"></a>

```
{ "Fn::ToJsonString": Object }
```

```
{ "Fn::ToJsonString": Array }
```

### YAML
<a name="intrinsic-function-reference-tojsonstring-syntax.yaml"></a>

```
Fn::ToJsonString: Object
```

```
Fn::ToJsonString: Array
```

## Parameters
<a name="tojsonstring-parameters"></a>

`Object`  
L'objet que vous voulez convertir en chaîne JSON.

`Array`  
Le tableau que vous voulez convertir en chaîne JSON.

## Valeur renvoyée
<a name="intrinsic-function-reference-tojsonstring-return"></a>

L'objet ou le tableau converti en chaîne JSON. 

## Exemples
<a name="intrinsic-function-reference-tojsonstring-examples"></a>

### Conversion d'un objet en chaîne JSON
<a name="intrinsic-function-reference-tojsonstring-example-subsection"></a>

Cet exemple d'extrait convertit l'objet transmis à la fonction intrinsèque en chaîne JSON.

#### JSON
<a name="intrinsic-function-reference-tojsonstring-example.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::ToJsonString": {
            "key1": "value1",
            "key2": { 
                "Ref": "ParameterName"
            }
        }
//...
}
```

#### YAML
<a name="intrinsic-function-reference-tojsonstring-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::ToJsonString: 
    key1: value1
    key2: !Ref ParameterName
#...
```

Dans ces deux exemples, si la `Ref` à `ParameterName` se résout en `resolvedValue`, la fonction se résout dans la chaîne JSON suivante :

```
"{\"key1\":\"value1\",\"key2\":\"resolvedValue\"}"
```

### Conversion d'un tableau en chaîne JSON
<a name="intrinsic-function-reference-tojsonstring-example2"></a>

Cet exemple d'extrait convertit le tableau transmis à la fonction intrinsèque en chaîne JSON.

#### JSON
<a name="intrinsic-function-reference-tojsonstring-example2.json"></a>

```
{
//...
    "Transform": "AWS::LanguageExtensions"
    //...
        "Fn::ToJsonString": [{
            "key1": "value1",
            "key2": { 
                "Ref": "ParameterName" 
            }
        }]
//...
}
```

#### YAML
<a name="intrinsic-function-reference-tojsonstring-example2.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
  Fn::ToJsonString: 
    - key1: value1
      key2: !Ref ParameterName
#...
```

Dans ces deux exemples, si la `Ref` à `ParameterName` se résout en `resolvedValue`, la fonction se résout dans la chaîne JSON suivante :

```
"[{\"key1\":\"value1\"},{\"key2\":\"resolvedValue\"}]"
```

## Fonctions prises en charge
<a name="tojsonstring-supported-functions"></a>

Vous pouvez utiliser les fonctions suivantes dans la fonction intrinsèque `Fn::ToJsonString` ou le tableau :
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::ImportValue`
+ `Fn::Join`
+ `Fn::Length`
+ `Fn::Select`
+ `Fn::Split`
+ `Fn::Sub`
+ `Fn::ToJsonString`
+ `Ref`

# `Fn::Transform`
<a name="intrinsic-function-reference-transform"></a>

La fonction intrinsèque `Fn::Transform` spécifie une macro pour effectuer un traitement personnalisé sur une partie d’un modèle de pile. Les macros vous permettent d'effectuer un traitement personnalisé sur les modèles, qu'il s'agisse d'actions simples telles que find-and-replace des opérations ou de transformations étendues de modèles entiers. Pour plus d'informations, consultez la section [Utilisation de CloudFormation macros pour effectuer un traitement personnalisé sur des modèles](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) dans le *Guide de AWS CloudFormation l'utilisateur*.

Vous pouvez également utiliser `Fn::Transform` pour appeler la [Transformation `AWS::Include`](transform-aws-include.md) transformation, qui est une macro hébergée par CloudFormation.

## Déclaration
<a name="intrinsic-function-reference-transform-declaration"></a>

### JSON
<a name="intrinsic-function-reference-transform-syntax.json"></a>

Syntaxe pour le nom complet de la fonction :

```
{
    "Fn::Transform": {
        "Name": "macro name",
        "Parameters": {
            "Key": "value"
        }
    }
}
```

Syntaxe pour la forme courte :

```
{
    "Transform": {
        "Name": "macro name",
        "Parameters": {
            "Key": "value"
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-transform-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Fn::Transform:
  Name : macro name
  Parameters :
    Key : value
```

Syntaxe pour la forme courte :

```
!Transform
  Name: macro name
  Parameters:
    Key: value
```

## Parameters
<a name="intrinsic-function-reference-transform-parameters"></a>

`Name`  
Nom de la macro que vous souhaitez utiliser pour effectuer le traitement.

`Parameters`  
Liste des paramètres, spécifiés en tant que paires clé-valeur, à transmettre à la macro.

## Valeur renvoyée
<a name="intrinsic-function-reference-transform-returnvalue"></a>

Extrait de modèle traité à inclure dans le modèle de pile traité.

## Exemples
<a name="intrinsic-function-reference-transform-examples"></a>

L'exemple suivant appelle la transformation `AWS::Include`, en spécifiant que l'emplacement à partir duquel récupérer un extrait de modèle est transmis dans le paramètre `InputValue`.

### JSON
<a name="intrinsic-function-reference-transform-example-1.json"></a>

```
{
    "Fn::Transform": {
        "Name": "AWS::Include",
        "Parameters": {
            "Location": {
                "Ref": "InputValue"
            }
        }
    }
}
```

### YAML
<a name="intrinsic-function-reference-transform-example-1.yaml"></a>

```
Fn::Transform:
  Name: AWS::Include
  Parameters:
    Location: !Ref InputValue
```

## Fonctions prises en charge
<a name="intrinsic-function-reference-transform-supported-functions"></a>

Aucune.

CloudFormation transmet tous les appels de fonction intrinsèques inclus dans `Fn::Transform` la macro spécifiée sous forme de chaînes littérales.

# `Ref`
<a name="intrinsic-function-reference-ref"></a>

La fonction intrinsèque `Ref` renvoie la valeur d’un paramètre, d’une ressource ou d’une autre fonction intrinsèque spécifiée. Cette fonction est couramment utilisée pour créer des références entre les ressources d'un CloudFormation modèle. 

## Déclaration
<a name="ref-declaration"></a>

### JSON
<a name="intrinsic-function-reference-ref-syntax.json"></a>

```
{ "Ref" : "logicalName" }
```

```
{ "Ref" : "IntrinsicFunction" }
```

### YAML
<a name="intrinsic-function-reference-ref-syntax.yaml"></a>

Syntaxe pour le nom complet de la fonction :

```
Ref: logicalName
```

```
Ref:
   IntrinsicFunction
```

Syntaxe pour la forme courte :

```
!Ref logicalName
```

```
!Ref
   IntrinsicFunction
```

## Parameters
<a name="ref-parameters"></a>

logicalName  
Le nom logique de la ressource ou du paramètre que vous souhaitez référencer.

IntrinsicFunction  
La fonction intrinsèque qui se résout dans une chaîne valide. Elle doit contenir des références aux paramètres ou aux identifiants, et ne doit pas contenir d'identifiants de ressources logiques.

## Valeur renvoyée
<a name="ref-return-value"></a>

La valeur renvoyée par `Ref` dépend du type d’entité référencée :
+ Lorsque vous spécifiez le nom logique d'un paramètre, elle renvoie la valeur du paramètre. Pour plus d'informations, consultez la section [ParametersSyntaxe du CloudFormation modèle](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html).
+ Lorsque vous spécifiez le nom logique d’une ressource, elle renvoie une valeur que vous utilisez pour identifier cette ressource. Il s’agit généralement du nom de la ressource. Cependant, pour certaines ressources, la valeur renvoyée est un identifiant ayant une signification particulière dans le contexte de la ressource. Par exemple, la ressource `AWS::EC2::EIP` renvoie l’adresse IP et `AWS::EC2::Instance` renvoie l’ID de l’instance. Pour plus d’informations sur les valeurs renvoyées `Ref` pour chaque ressource, consultez la documentation de cette ressource dans [Référence des propriétés et des ressources](aws-template-resource-type-ref.md).
+ Lorsque vous spécifiez une fonction intrinsèque, elle renvoie la sortie de cette fonction.

## Exemples
<a name="ref-examples"></a>

### Création de références entre ressources
<a name="intrinsic-function-reference-ref-example"></a>

La déclaration de ressource suivante pour une adresse IP Elastic nécessite l’ID d’une instance EC2. Elle utilise la fonction `Ref` pour indiquer l’ID de l’instance issue de la ressource `MyEC2Instance`, déclarée ailleurs dans le modèle.

#### JSON
<a name="intrinsic-function-reference-ref-example.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Resources":{
  
      ...
  
    "MyEIP":{
      "Type":"AWS::EC2::EIP",
      "Properties":{
        "InstanceId":{
          "Ref":"MyEC2Instance"
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-ref-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:

  ...

  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyEC2Instance
```

### Renvoi d’un identifiant de ressource dans les sorties de pile
<a name="intrinsic-function-reference-ref-example-2"></a>

Les exemples suivants montrent comment utiliser la fonction `Ref` pour renvoyer, en sortie de pile, le nom d’un compartiment Amazon S3 ayant pour nom logique `MyBucket`. 

#### JSON
<a name="intrinsic-function-reference-ref-example-2.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Resources":{
    "MyBucket":{
      "Type":"AWS::S3::Bucket",
      "Properties":{
        "BucketName":{
          "Fn::Sub": "${AWS::StackName}-mybucket"
        }
      }
    }
  },
  "Outputs":{
    "BucketNameOutput":{
      "Description":"The name of the S3 bucket",
      "Value":{
        "Ref":"MyBucket"
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-ref-example-2.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub ${AWS::StackName}-mybucket

Outputs:
  BucketNameOutput:
    Description: The name of the S3 bucket
    Value: !Ref MyBucket
```

### Utilisation de la fonction intrinsèque `Fn::Join` dans la fonction `Ref`
<a name="ref-example-intrinsic-functions-multiple-stages"></a>

**Note**  
Lorsque vous utilisez la transformation `AWS::LanguageExtensions`, vous pouvez utiliser `Ref` en combinaison avec d’autres fonctions intrinsèques. Pour les fonctions prises en charge, consultez [Fonctions prises en charge](#ref-supported-functions).

Les exemples suivants montrent comment définir les identifiants des ressources en utilisant la fonction intrinsèque `Fn::Sub`, des conditions et la valeur d’entrée du paramètre `Stage`. Les `Fn::GetAtt` fonctions `Ref` et font ensuite référence aux valeurs appropriées, en fonction de la scène. `Fn::Sub`est d'abord utilisé `Fn::GetAtt` pour obtenir l'ARN de la file d'attente Amazon SQS appropriée afin de définir les dimensions de l'alarme Amazon CloudWatch. Ensuite, [`Fn::Join`](intrinsic-function-reference-join.md) est utilisé avec `Ref` pour créer le nom de la rubrique SNS pour la propriété `AlarmActions`. 

#### JSON
<a name="ref-example-intrinsic-functions-multiple-stages.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "Stage": {
            "Type": "String",
            "Default": "Dev",
            "AllowedValues": [
                "Dev",
                "Prod"
            ]
        }
    },
    "Conditions": {
        "isProd": {
            "Fn::Equals": [
                {"Ref": "Stage"},
                "Prod"
            ]
        },
        "isDev": {
            "Fn::Equals": [
                {"Ref": "Stage"},
                "Dev"
            ]
        }
    },
    "Resources": {
        "DevQueue": {
            "Type": "AWS::SQS::Queue",
            "Condition": "isDev",
            "Properties": {
                "QueueName": {"Fn::Sub": "My${Stage}Queue"}
            }
        },
        "ProdQueue": {
            "Type": "AWS::SQS::Queue",
            "Condition": "isProd",
            "Properties": {
                "QueueName": {"Fn::Sub": "My${Stage}Queue"}
            }
        },
        "DevTopic": {
            "Condition": "isDev",
            "Type": "AWS::SNS::Topic"
        },
        "ProdTopic": {
            "Condition": "isProd",
            "Type": "AWS::SNS::Topic"
        },
        "MyAlarm": {
            "Type": "AWS::CloudWatch::Alarm",
            "Properties": {
                "AlarmDescription": "Alarm if queue depth grows beyond 10 messages",
                "Namespace": "AWS/SQS",
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Dimensions":[
                    {
                        "Name": {"Fn::Sub": "${Stage}Queue"},
                        "Value": {"Fn::GetAtt": [{"Fn::Sub": "${Stage}Queue"}, "QueueName"]}
                    }
                ],
                "Statistic": "Sum",
                "Period": 300,
                "EvaluationPeriods": 1,
                "Threshold": 10,
                "ComparisonOperator": "GreaterThanThreshold",
                "AlarmActions": [
                    {
                        "Ref": {"Fn::Join": ["", [{"Ref": "Stage"}, "Topic"]]}
                    }
                ]
            }
        }
    }
}
```

#### YAML
<a name="ref-example-intrinsic-functions-multiple-stages.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  Stage:
    Type: String
    Default: Dev
    AllowedValues:
      - Dev
      - Prod
Conditions:
  isProd: !Equals 
    - !Ref Stage
    - Prod
  isDev: !Equals 
    - !Ref Stage
    - Dev
Resources:
  DevQueue:
    Type: AWS::SQS::Queue
    Condition: isDev
    Properties:
      QueueName: !Sub My${Stage}Queue
  ProdQueu:
    Type: AWS::SQS::Queue
    Condition: isProd
    Properties:
      QueueName: !Sub My${Stage}Queue
  DevTopic:
    Condition: isDev
    Type: AWS::SNS::Topic
  ProdTopic:
    Condition: isProd
    Type: AWS::SNS::Topic
  MyAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: Alarm if queue depth grows beyond 10 messages
      Namespace: AWS/SQS
      MetricName: ApproximateNumberOfMessagesVisible
      Dimensions:
        - Name: !Sub '${Stage}Queue'
          Value: !GetAtt 
            - !Sub '${Stage}Queue'
            - QueueName
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 10
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - !Ref 
          'Fn::Join':
            - ''
            - - !Ref Stage
              - Topic
```

## Fonctions prises en charge
<a name="ref-supported-functions"></a>

Lorsque vous utilisez la [transformation AWS::LanguageExtensions](transform-aws-languageextensions.md), vous pouvez utiliser les fonctions suivantes dans la fonction `Ref`.
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ `Ref`

# Fonctions de règle
<a name="intrinsic-function-reference-rules"></a>

Les fonctions de règle sont des fonctions spéciales qui ne fonctionnent que dans la `Rules` section d'un CloudFormation modèle. Ces fonctions permettent de valider les valeurs de paramètres avec une logique personnalisée. Toutes les validations ont lieu avant de CloudFormation créer ou de mettre à jour des ressources.

Les règles sont utiles lorsque les contraintes standard des paramètres ne suffisent pas. Par exemple, lorsque SSL est activé, un certificat et un nom de domaine doivent être fournis. Une règle peut garantir que ces dépendances sont respectées.

Dans la condition ou les assertions d'une règle, vous pouvez utiliser des fonctions intrinsèques, comme `Fn::Equals`, `Fn::Not` et `Fn::RefAll`. La propriété condition détermine si les CloudFormation assertions sont appliquées. Si la condition est évaluée à`true`, CloudFormation évalue les assertions pour vérifier si une valeur de paramètre est valide lors de la création ou de la mise à jour d'une pile. Si la valeur d'un paramètre n'est pas valide, CloudFormation cela ne crée ni ne met à jour la pile. Si la condition est évaluée à`false`, CloudFormation elle ne vérifie pas la valeur du paramètre et poursuit l'opération de pile.

Si vous utilisez des règles pour la première fois dans vos modèles, nous vous recommandons de consulter d'abord la rubrique relative à la [Rulessyntaxe des CloudFormation modèles](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html) dans le *Guide de AWS CloudFormation l'utilisateur*.

**Topics**
+ [`Fn::And`](#fn-and)
+ [`Fn::Contains`](#fn-contains)
+ [`Fn::EachMemberEquals`](#fn-eachmemberequals)
+ [`Fn::EachMemberIn`](#fn-eachmemberin)
+ [`Fn::Equals`](#fn-equals)
+ [`Fn::Not`](#fn-not)
+ [`Fn::Or`](#fn-or)
+ [`Fn::RefAll`](#fn-refall)
+ [`Fn::ValueOf`](#fn-valueof)
+ [`Fn::ValueOfAll`](#fn-valueofall)
+ [Fonctions prises en charge](#supported-rule-functions)
+ [Attributs pris en charge](#rules-parameter-attributes)

## `Fn::And`
<a name="fn-and"></a>

Renvoie `true` si toutes les conditions spécifiées correspondent à `true`, ou `false` si l'une des conditions indique `false`. `Fn::And` agit en tant qu'opérateur AND. Le nombre minimum de conditions que vous pouvez inclure est deux, et le maximum est dix.

### Déclaration
<a name="fn-and-declaration"></a>

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

### Parameters
<a name="fn-and-parameters"></a>

*condition*  
Fonction intrinsèque spécifique aux règles qui prend la valeur `true` ou `false`.

### Exemple
<a name="fn-and-example"></a>

L'exemple suivant a la valeur `true` si le nom du groupe de sécurité référencé est égal à `sg-mysggroup` et si la valeur du paramètre `InstanceType` est `t3.large` ou `t3.small` :

```
"Fn::And": [
  {
    "Fn::Equals": [
      "sg-mysggroup",
      {"Ref": "ASecurityGroup"}
    ]
  },
  {
    "Fn::Contains": [
      [
        "t3.large",
        "t3.small"
      ],
      {"Ref": "InstanceType"}
    ]
  }
]
```

## `Fn::Contains`
<a name="fn-contains"></a>

Renvoie `true` si une chaîne spécifiée correspond au moins à une valeur dans une liste de chaînes.

### Déclaration
<a name="fn-contains-declaration"></a>

```
"Fn::Contains" : [[list_of_strings], string]
```

### Parameters
<a name="fn-contains-parameters"></a>

*list\$1of\$1strings*  
Liste de chaînes comme `"A", "B", "C"`.

*chaîne*  
Chaîne, comme `"A"`, que vous souhaitez comparer à une liste de chaînes.

### Exemple
<a name="fn-contains-example"></a>

La fonction suivante a la valeur `true` si la valeur du paramètre `InstanceType` est contenu dans la liste (`t3.large` ou `t3.small`) :

```
"Fn::Contains" : [
  ["t3.large", "t3.small"], {"Ref" : "InstanceType"}
]
```

## `Fn::EachMemberEquals`
<a name="fn-eachmemberequals"></a>

Renvoie `true` si une chaîne spécifiée correspond à toutes les valeurs d'une liste.

### Déclaration
<a name="fn-eachmemberequals-declaration"></a>

```
"Fn::EachMemberEquals" : [[list_of_strings], string]
```

### Parameters
<a name="fn-eachmemberequals-parameters"></a>

*list\$1of\$1strings*  
Liste de chaînes comme `"A", "B", "C"`.

*chaîne*  
Chaîne, comme `"A"`, que vous souhaitez comparer à une liste de chaînes.

### Exemple
<a name="fn-eachmemberequals-example"></a>

La fonction suivante renvoie `true` si la balise `Department` pour l'ensemble des paramètres de type `AWS::EC2::VPC::Id` a la valeur `IT` :

```
"Fn::EachMemberEquals" : [
  {"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]}, "IT"
]
```

## `Fn::EachMemberIn`
<a name="fn-eachmemberin"></a>

Renvoie `true` si chaque membre d'une liste de chaînes correspond au moins à une valeur d'une deuxième liste de chaînes.

### Déclaration
<a name="fn-eachmemberin-declaration"></a>

```
"Fn::EachMemberIn" : [[strings_to_check], [strings_to_match]]
```

### Parameters
<a name="fn-eachmemberin-parameters"></a>

*strings\$1to\$1check*  
Une liste de chaînes, telles que`"A", "B", "C"`. CloudFormation vérifie si chaque membre du `strings_to_check` paramètre se trouve dans le `strings_to_match` paramètre.

*strings\$1to\$1match*  
Liste de chaînes comme `"A", "B", "C"`. Chaque membre du paramètre `strings_to_match` est comparé aux membres du paramètre `strings_to_check`.

### Exemple
<a name="fn-eachmemberin-example"></a>

La fonction suivante vérifie si les utilisateurs spécifient un sous-réseau qui constitue un cloud privé virtuel (VPC) valide. Le VPC doit se trouver dans le compte et la région où les utilisateurs interagissent avec la pile. La fonction s'applique à tous les paramètres de type `AWS::EC2::Subnet::Id`.

```
"Fn::EachMemberIn" : [ 
  {"Fn::ValueOfAll" : ["AWS::EC2::Subnet::Id", "VpcId"]}, {"Fn::RefAll" : "AWS::EC2::VPC::Id"}
]
```

## `Fn::Equals`
<a name="fn-equals"></a>

Compare deux valeurs pour déterminer si elles sont égales. Renvoie `true` si les deux valeurs sont égales et `false` si elles ne le sont pas.

### Déclaration
<a name="fn-equals-declaration"></a>

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

### Parameters
<a name="fn-equals-parameters"></a>

*`value`*  
Valeur de tout type que vous voulez comparer à une autre valeur.

### Exemple
<a name="fn-equals-example"></a>

L'exemple suivant prend la valeur `true` si la valeur du paramètre `EnvironmentType` est égale à `prod` :

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

## `Fn::Not`
<a name="fn-not"></a>

Renvoie `true` pour une condition qui prend la valeur `false`, et `false` pour une condition qui a la valeur `true`. `Fn::Not` agit en tant qu'opérateur NOT.

### Déclaration
<a name="fn-not-declaration"></a>

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

### Parameters
<a name="fn-not-parameters"></a>

*`condition`*  
Fonction intrinsèque spécifique aux règles qui prend la valeur `true` ou `false`.

### Exemple
<a name="fn-not-example"></a>

L'exemple suivant prend la valeur `true` si la valeur du paramètre `EnvironmentType` est égale à `prod` :

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

## `Fn::Or`
<a name="fn-or"></a>

Renvoie `true` si l'une des conditions spécifiées a la valeur `true`, ou `false` si toutes les conditions ont la valeur `false`. `Fn::Or` agit en tant qu'opérateur OR. Le nombre minimum de conditions que vous pouvez inclure est deux, et le maximum est dix.

### Déclaration
<a name="fn-or-declaration"></a>

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

### Parameters
<a name="fn-or-parameters"></a>

*`condition`*  
Fonction intrinsèque spécifique aux règles qui prend la valeur `true` ou `false`.

### Exemple
<a name="fn-or-example"></a>

L'exemple suivant a la valeur `true` si le nom du groupe de sécurité référencé est égal à `sg-mysggroup`, ou si la valeur du paramètre `InstanceType` est `t3.large` ou `t3.small` :

```
"Fn::Or" : [
  {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]},
  {"Fn::Contains" : [["t3.large", "t3.small"], {"Ref" : "InstanceType"}]}
]
```

## `Fn::RefAll`
<a name="fn-refall"></a>

Renvoie toutes les valeurs pour un type de paramètre spécifié.

### Déclaration
<a name="fn-refall-declaration"></a>

```
"Fn::RefAll" : "parameter_type"
```

### Parameters
<a name="fn-refall-parameters"></a>

*parameter\$1type*  
Un type de paramètre AWS spécifique, tel que `AWS::EC2::SecurityGroup::Id` ou`AWS::EC2::VPC::Id`. Pour plus d'informations, consultez la section [Types de paramètres AWS spécifiques pris en charge](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) dans le *Guide de l'AWS CloudFormation utilisateur*.

### Exemple
<a name="fn-refall-example"></a>

La fonction suivante renvoie une liste de tous les VPC IDs de la région et Compte AWS dans lesquels la pile est créée ou mise à jour :

```
"Fn::RefAll" : "AWS::EC2::VPC::Id"
```

## `Fn::ValueOf`
<a name="fn-valueof"></a>

Renvoie une valeur d'attribut ou une liste des valeurs pour un paramètre et un attribut spécifiques.

### Déclaration
<a name="fn-valueof-declaration"></a>

```
"Fn::ValueOf" : [ "parameter_logical_id", "attribute" ]
```

### Parameters
<a name="fn-valueof-parameters"></a>

*attribute*  
Nom de l’attribut à partir duquel extraire une valeur. Pour plus d'informations sur les attributs, consultez [Attributs pris en charge](#rules-parameter-attributes).

*parameter\$1logical\$1id*  
Nom du paramètre à partir duquel extraire les valeurs d’attribut. Le paramètre doit être déclaré dans la section `Parameters` du modèle.

### Exemples
<a name="fn-valueof-examples"></a>

L'exemple suivant renvoie la valeur de la balise `Department` pour le VPC spécifié par le paramètre `ElbVpc` :

```
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
```

Si vous spécifiez plusieurs valeurs pour un paramètre, la ValueOf fonction Fn : : peut renvoyer une liste. Par exemple, vous pouvez spécifier plusieurs sous-réseaux et obtenir une liste de zones de disponibilité où chaque membre est la zone de disponibilité d'un sous-réseau spécifique :

```
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
```

## `Fn::ValueOfAll`
<a name="fn-valueofall"></a>

Renvoie une liste de toutes les valeurs d'attribut pour un type de paramètre et d'attribut donné.

### Déclaration
<a name="fn-valueofall-declaration"></a>

```
"Fn::ValueOfAll" : ["parameter_type", "attribute"]
```

### Parameters
<a name="fn-valueofall-parameters"></a>

*attribute*  
Nom d'un attribut à partir duquel vous souhaitez extraire une valeur. Pour plus d'informations sur les attributs, consultez [Attributs pris en charge](#rules-parameter-attributes).

*parameter\$1type*  
Un type de paramètre AWS spécifique, tel que `AWS::EC2::SecurityGroup::Id` ou`AWS::EC2::VPC::Id`. Pour plus d'informations, consultez la section [Types de paramètres AWS spécifiques pris en charge](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) dans le *Guide de l'AWS CloudFormation utilisateur*.

### Exemple
<a name="fn-valueofall-example"></a>

Dans l'exemple suivant, la `Fn::ValueOfAll` fonction renvoie une liste de valeurs, où chaque membre est la valeur de `Department` balise associée VPCs à cette balise :

```
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
```

## Fonctions prises en charge
<a name="supported-rule-functions"></a>

Vous ne pouvez pas utiliser une autre fonction au sein des fonctions `Fn::ValueOf` et `Fn::ValueOfAll`. Par contre, vous pouvez utiliser les fonctions suivantes dans toutes les autres fonctions intrinsèques spécifiques aux règles :
+ `Ref`
+ Autres fonctions intrinsèques spécifiques aux règles

## Attributs pris en charge
<a name="rules-parameter-attributes"></a>

La liste suivante décrit les valeurs d'attribut que vous pouvez extraire pour des ressources et des types de paramètre spécifiques :

Type de `AWS::EC2::VPC::Id` paramètre ou VPC IDs.  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ Balises.*tag\$1key*

Le type de `AWS::EC2::Subnet::Id` paramètre ou le sous-réseau IDs,  
+ AvailabilityZone
+ Balises.*tag\$1key*
+ VpcId

Type de `AWS::EC2::SecurityGroup::Id` paramètre ou groupe de sécurité IDs.  
+ Balises.*tag\$1key*