

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.

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