

Questa è la nuova *Guida di riferimento ai modelli CloudFormation *. Aggiorna i segnalibri e i link. Per informazioni su come iniziare CloudFormation, consulta la [Guida AWS CloudFormation per l'utente](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

La funzione intrinseca `Fn::Sub` sostituisce le variabili in una stringa di input con valori che puoi specificare. Nei modelli, questa funzione è utilizzabile per costruire comandi o output che includono valori che non sono disponibili finché non crei o aggiorni uno stack.

## Dichiarazione
<a name="intrinsic-function-reference-sub-declaration"></a>

Le seguenti sezioni mostrano la sintassi della funzione.

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

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

Se stai sostituendo solo parametri del modello, risorse logiche IDs o attributi di risorsa nel `String` parametro, non specificare una mappa variabile.

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

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

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

Se state sostituendo solo parametri di modello, risorse logiche IDs o attributi di risorsa nel `String` parametro, non specificate una mappa variabile.

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

```
!Sub String
```

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

`String`  
Una stringa con variabili che CloudFormation sostituisce con i valori associati in fase di esecuzione. Scrivi le variabili come `${MyVarName}`. Le variabili possono essere i nomi dei parametri del modello, la logica delle risorse IDs, gli attributi delle risorse o una variabile in una mappa chiave-valore. Se specificate solo i nomi dei parametri del modello, la logica IDs delle risorse e gli attributi delle risorse, non specificate una mappa chiave-valore.  
Se si specificano i nomi dei parametri del modello o la logica delle risorse IDs, ad esempio`${InstanceTypeParameter}`, CloudFormation restituisce gli stessi valori che si otterrebbero se si utilizzasse la funzione `Ref` intrinseca. Se si specificano gli attributi delle risorse, ad esempio`${MyInstance.PublicIp}`, CloudFormation restituisce gli stessi valori come se si utilizzasse la funzione `Fn::GetAtt` intrinseca.  
Per scrivere letteralmente il simbolo del dollaro e le parentesi graffe (`${}`), aggiungete un punto esclamativo (`!`) dopo la parentesi riccia aperta, ad esempio. `${!Literal}` CloudFormation risolve questo testo come. `${Literal}`  
Se utilizzi un modello di avvio, aggiungi una barra rovesciata `\` prima del simbolo del dollaro, ad esempio `\${!Literal}`, altrimenti il valore letterale si risolverà in una stringa vuota.

`VarName`  
Il nome di una variabile inclusa nel parametro `String`.

`VarValue`  
Il valore che CloudFormation sostituisce il nome della variabile associata in fase di esecuzione.

## Valore restituito
<a name="w2aac24c66b9"></a>

CloudFormation restituisce la stringa originale, sostituendo i valori per tutte le variabili.

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

I seguenti esempi illustrano come utilizzare la funzione `Fn::Sub`.

### Utilizza `Fn::Sub` senza una mappa chiave-valore
<a name="w2aac24c66c11b5"></a>

In questo semplice esempio, la descrizione della risorsa `InstanceSecurityGroup` viene creata in modo dinamico con lo pseudo parametro `AWS::StackName`. Ad esempio, se il nome dello stack è “VPC-EC2-ALB-Stack”, la descrizione risultante è “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}"
```

### Utilizza `Fn::Sub` con una mappa chiave-valore
<a name="w2aac24c66c11b7"></a>

In questo esempio, il nome della risorsa `WWWBucket` viene creato in modo dinamico con una mappa chiave-valore. La funzione `Fn::Sub` sostituisce `${Domain}` nella stringa di input `www.${Domain}` con il valore di una funzione `Ref` che fa riferimento al parametro `RootDomainName` definito all’interno dello stesso modello di stack. Ad esempio, se il nome di dominio principale è “mydomain.com”, il nome risultante per questa risorsa è “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
```

### Usa più variabili per costruire ARNs
<a name="w2aac24c66c11b9"></a>

L’esempio seguente utilizza `Fn::Sub` con gli pseudo parametri `AWS::Region` e `AWS::AccountId` e l’ID logico della risorsa `vpc` per creare un nome della risorsa Amazon (ARN) per 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}'
```

### Passa i valori dei parametri negli script dei dati utente
<a name="w2aac24c66c11c11"></a>

L’esempio seguente utilizza `Fn::Sub` per sostituire gli pseudoparametri `AWS::StackName` e `AWS::Region` al nome dello stack e alla Regione effettivi in fase di runtime.

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

Per maggiore leggibilità, l’esempio JSON impiega la funzione `Fn::Join` per separare ogni comando, invece di specificare l’intero script dei dati utente in un singolo valore stringa.

```
"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’esempio YAML utilizza un blocco letterale per specificare lo script dei dati utente.

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

### Specifica i valori condizionali utilizzando le mappature
<a name="w2aac24c66c11c13"></a>

In questo esempio, il nome della risorsa `myLogGroup` viene creato in modo dinamico sostituendo la variabile `log_group_name` con il valore risultante dalla funzione `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
```

## Funzioni supportate
<a name="intrinsic-function-reference-sub-supported-functions"></a>

Per il parametro `String`, non è possibile utilizzare alcuna funzione. Devi specificare un valore di stringa.

Per i parametri `VarName` e `VarValue`, puoi utilizzare le seguenti funzioni:
+ [`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)