

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

# Riferimento funzione intrinseca
<a name="intrinsic-function-reference"></a>

CloudFormation offre diverse funzioni integrate che consentono di gestire gli stack. Utilizza le funzioni intrinseche nei tuoi modelli per assegnare valori alle proprietà che non sono disponibili fino al runtime.

**Nota**  
Puoi utilizzare le funzioni solo in parti specifiche di un modello. Attualmente, puoi utilizzare le funzioni intrinseche nelle proprietà delle risorse, negli output, negli attributi dei metadati e negli attributi delle policy di aggiornamento. Puoi utilizzare funzioni intrinseche anche per creare risorse di stack in modo condizionale.

**Topics**
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::Cidr`](intrinsic-function-reference-cidr.md)
+ [Funzioni di condizione](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)
+ [Funzioni delle regole](intrinsic-function-reference-rules.md)

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

La funzione intrinseca `Fn::Base64` restituisce la rappresentazione Base64 della stringa di input. Questa funzione viene in genere utilizzata per passare dati codificati alle EC2 istanze Amazon tramite la `UserData` proprietà.

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

```
!Base64 valueToEncode
```

**Nota**  
Se utilizzi la versione abbreviata e includi immediatamente un’altra funzione nel parametro `valueToEncode`, utilizza il nome completo della funzione per almeno una delle funzioni. Ad esempio, la sintassi seguente non è valida:  

```
!Base64 !Sub string
!Base64 !Ref logical_ID
```
Utilizza invece il nome completo della funzione per almeno una delle funzioni, come illustrato negli esempi seguenti:  

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

Fn::Base64:
  !Sub string
```

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

valueToEncode  
Il valore di stringa da convertire in Base64.

## Valore restituito:
<a name="w2aac24c12b9"></a>

La stringa originale, in rappresentazione Base64.

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

## Funzioni supportate
<a name="w2aac24c12c13"></a>

Puoi utilizzare qualsiasi funzione che restituisce una stringa all’interno della funzione `Fn::Base64`.

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

La funzione intrinseca `Fn::Cidr` restituisce una matrice di blocchi di indirizzi CIDR. Il numero di blocchi CIDR restituiti dipende dal parametro `count`.

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

ipBlock  <a name="ipBlock"></a>
Il blocco di indirizzi CIDR specificato dall’utente da suddividere in blocchi CIDR più piccoli.

count  <a name="count"></a>
Il numero di CIDRs da generare. L’intervallo valido è 1–256.

cidrBits  <a name="cidrBits"></a>
Il numero di bit di sottorete per il CIDR. Ad esempio, specificando un valore "8" per questo parametro, verrà creato un CIDR con una mask "/ 24".  
I bit di sottorete sono l’inverso della subnet mask. Per calcolare i bit host richiesti per un determinato bit di sottorete, sottraete i bit di sottorete da 32 per o 128 per. IPv4 IPv6

## Valore restituito
<a name="intrinsic-function-reference-cidr-return-values"></a>

Una matrice di blocchi di indirizzi CIDR.

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

### Utilizzo di base
<a name="intrinsic-function-reference-cidr-example1"></a>

Questo esempio crea 6 CIDRs con una maschera di sottorete «/27" all'interno di un CIDR con una maschera di «/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 ]
```

### Creazione di un IPv6 VPC abilitato
<a name="intrinsic-function-reference-cidr-example2"></a>

Questo modello di esempio crea una sottorete IPv6 abilitata.

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

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

È possibile utilizzare le funzioni seguenti in una funzione `Fn::Cidr`.
+ [`Fn::Select`](intrinsic-function-reference-select.md)
+ [`Ref`](intrinsic-function-reference-ref.md)

# Funzioni di condizione
<a name="intrinsic-function-reference-conditions"></a>

Puoi usare le funzioni intrinseche, come `Fn::If` o `Fn::Equals`, per creare e configurare risorse dello stack in base alla logica condizionale. Queste condizioni vengono valutate durante la creazione o l’aggiornamento dello stack. Dopo aver definito tutte le condizioni, puoi associarle alle risorse o alle relative proprietà nelle sezioni `Resources` e `Outputs` di un modello.

Per scenari avanzati, puoi combinare le condizioni utilizzando le funzioni `Fn::And` o `Fn::Or`, oppure `Fn::Not` per negare il valore di una condizione. Puoi anche annidare le condizioni per creare una logica condizionale più complessa.

Se non conosci l'utilizzo delle condizioni nei tuoi modelli, ti consigliamo di consultare prima l'argomento sulla [sintassi delle condizioni del CloudFormation modello](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) nella *Guida per l'AWS CloudFormation utente*.

**Nota**  
Devi definire tutte le condizioni nella sezione `Conditions` di un modello, ad eccezione delle condizioni `Fn::If`. Puoi utilizzare la condizione `Fn::If` nei valori degli attributi `Metadata`, degli attributi `UpdatePolicy` e dei valori delle proprietà nelle sezioni `Resources` e `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)
+ [Funzioni supportate](#w2aac24c20c25)
+ [Modello di esempio](#conditions-sample-templates)

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

Restituisce `true` se una delle condizioni specificate viene valutata true; restituisce `false` se una qualsiasi delle condizioni corrisponde a false. `Fn::And` agisce come operatore AND. Il numero minimo di condizioni che puoi includere è 2, il numero massimo è 10.

### Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

```
!And [condition]
```

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

condition  <a name="fn-and-condition"></a>
Una condizione che corrisponde a `true` o `false`.

### Esempi di utilizzo di `Fn::And`
<a name="w2aac24c20c13b9"></a>

La seguente funzione `MyAndCondition` viene valutata true se il nome del gruppo di sicurezza a cui si fa riferimento è uguale a `sg-mysggroup` e se `SomeOtherCondition` corrisponde a 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>

Confronta due valori per capire se sono uguali. Restituisce `true` se i due valori sono uguali o `false` se non lo sono.

### Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

value  
Un valore della stringa che intendi confrontare.

### Esempi di utilizzo di `Fn::Equals`
<a name="w2aac24c20c15b9"></a>

La seguente condizione `IsProduction` viene valutata true se il valore per il parametro `EnvironmentType` è uguale a `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>

Restituisce un valore se la condizione specificata viene valutata `true` e un altro valore se viene valutata `false`. Attualmente, CloudFormation supporta la funzione `Fn::If` intrinseca nei valori degli `Metadata` attributi, degli `UpdatePolicy` attributi e delle proprietà nella `Resources` sezione e nelle `Outputs` sezioni di un modello. Puoi utilizzare lo pseudoparametro `AWS::NoValue` come valore restituito per rimuovere la proprietà corrispondente.

### Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

```
!If [condition_name, value_if_true, value_if_false]
```

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

condition\$1name  <a name="condition_name"></a>
Un riferimento a una condizione nella sezione Conditions (Condizioni). Utilizza il nome della condizione per farvi riferimento.

value\$1if\$1true  <a name="value_if_true"></a>
Un valore da restituire se la condizione specificata viene valutata true.

value\$1if\$1false  <a name="value_if_false"></a>
Un valore da restituire se la condizione specificata viene valutata `false`.

### Esempi di utilizzo di `Fn::If`
<a name="w2aac24c20c19b9"></a>

**Topics**
+ [Scelta condizionale di una risorsa](#w2aac24c20c19b9b5)
+ [Output condizionali](#w2aac24c20c19b9b7)
+ [Valori di matrice condizionale](#w2aac24c20c19b9b9)
+ [Proprietà condizionali e valori delle proprietà](#w2aac24c20c19b9c11)
+ [Policy di aggiornamento condizionale](#w2aac24c20c19b9c13)

#### Scelta condizionale di una risorsa
<a name="w2aac24c20c19b9b5"></a>

L'esempio seguente utilizza una `Fn::If` funzione in una definizione di EC2 risorsa Amazon per determinare quale risorsa del gruppo di sicurezza associare all'istanza. Se la `CreateNewSecurityGroup` condizione risulta vera, CloudFormation utilizza il valore di riferimento di `NewSecurityGroup` (un gruppo di sicurezza creato altrove nel modello) per specificare la `SecurityGroupIds` proprietà. Se `CreateNewSecurityGroup` è false, CloudFormation utilizza il valore di riferimento di `ExistingSecurityGroupId` (un parametro che fa riferimento a un gruppo di sicurezza esistente).

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

#### Output condizionali
<a name="w2aac24c20c19b9b7"></a>

Nella sezione `Output` di un modello, è possibile utilizzare la funzione `Fn::If` per restituire le informazioni in modo condizionale. Nel frammento seguente, se la `CreateNewSecurityGroup` condizione restituisce true, CloudFormation restituisce l'ID del gruppo di sicurezza della risorsa. `NewSecurityGroup` Se la condizione è falsa, CloudFormation restituisce l'ID del gruppo di sicurezza della risorsa. `ExistingSecurityGroup`

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

#### Valori di matrice condizionale
<a name="w2aac24c20c19b9b9"></a>

L’esempio seguente utilizza `Fn::If` per fornire in modo condizionale diversi valori di matrice in base a una condizione. Se la condizione `MoreThan2AZs` corrisponde a true, utilizza tre sottoreti pubbliche. Altrimenti, utilizza solo due sottoreti pubbliche.

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

#### Proprietà condizionali e valori delle proprietà
<a name="w2aac24c20c19b9c11"></a>

L’esempio seguente utilizza lo pseudoparametro `AWS::NoValue` in una funzione `Fn::If`. La condizione utilizza una snapshot per un’istanza database Amazon RDS solo se viene fornito un ID snapshot. Se la `UseDBSnapshot` condizione risulta vera, CloudFormation utilizza il valore del `DBSnapshotName` parametro per la `DBSnapshotIdentifier` proprietà. Se la condizione restituisce false, CloudFormation rimuove la proprietà `DBSnapshotIdentifier`.

Utilizza inoltre una funzione `Fn::If` nella proprietà `AllocatedStorage` dell’istanza database di Amazon RDS. Se la condizione `IsProduction` risulta true, la dimensione dell’archivio viene impostata su `100`. In caso contrario, viene impostata su `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"]
```

#### Policy di aggiornamento condizionale
<a name="w2aac24c20c19b9c13"></a>

Il seguente frammento fornisce una policy di aggiornamento di dimensionamento automatico solo se la condizione `RollingUpdates` viene valutata true. Se la condizione risulta falsa, CloudFormation rimuove la politica di `AutoScalingRollingUpdate` aggiornamento.

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

Restituisce `true` per una condizione che viene valutata `false` o restituisce `false` per una condizione che viene valutata `true`. `Fn::Not` agisce come operatore NOT.

### Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

```
!Not [condition]
```

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

condition  <a name="condition"></a>
Una condizione come `Fn::Equals` che viene valutata `true` o `false`.

### Esempi di utilizzo di `Fn::Not`
<a name="w2aac24c20c21b9"></a>

La seguente condizione `EnvCondition` viene valutata true se il valore per il parametro `EnvironmentType` è uguale a `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>

Restituisce `true` se una qualsiasi delle condizioni specificate viene valutata true; restituisce `false` se tutte le condizioni vengono valutate false. `Fn::Or` agisce come operatore OR. Il numero minimo di condizioni che puoi includere è 2, il numero massimo è 10.

### Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

condition  
Una condizione che corrisponde a `true` o `false`.

### Esempi di utilizzo di `Fn::Or`
<a name="w2aac24c20c23b9"></a>

La seguente funzione `MyOrCondition` viene valutata true se il nome del gruppo di sicurezza a cui si fa riferimento è uguale a `sg-mysggroup` o se `SomeOtherCondition` viene valutata 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]
```

## Funzioni supportate
<a name="w2aac24c20c25"></a>

È possibile utilizzare le funzioni seguenti nella condizione `Fn::If`:
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

È possibile utilizzare le seguenti funzioni in tutte le altre funzioni di condizione, ad esempio `Fn::Equals` e `Fn::Or`:
+ `Fn::FindInMap`
+ `Ref`
+ Altre funzioni di condizione

## Modello di esempio
<a name="conditions-sample-templates"></a>

### Crea risorse in modo condizionale per uno stack di produzione, di sviluppo o di test
<a name="w2aac24c20c27b3"></a>

In alcuni casi si ha la necessità di creare stack simili, ma con piccoli aggiustamenti. Ad esempio, potresti avere modello utilizzato per la applicazioni di produzione e voler creare lo stesso stack di produzione, in modo da poterlo usare a fini di sviluppo o test. Tuttavia, per questi scopi, potresti non avere bisogno di tutte le capacità aggiuntive inclusa in uno stack a livello di produzione. Invece, è possibile utilizzare un parametro di input di tipo ambiente per creare in modo condizionale risorse di stack specifiche per la produzione, lo sviluppo o il test, come mostrato nel seguente esempio:

Puoi specificare `prod`, `dev` o `test` per il parametro `EnvType`. Per ogni tipo di ambiente, il modello specifica un diverso tipo di istanza, che può variare da un tipo di istanza grande e ottimizzata per l’elaborazione a un tipo di istanza più ridotto, adatto a un uso generale. Per specificare in modo condizionale il tipo di istanza, il modello definisce due condizioni nella sezione `Conditions` del modello: `CreateProdResources`, che viene valutata true se il valore del parametro `EnvType` è uguale a `prod` e `CreateDevResources`, che viene valutata true se il valore del parametro è uguale a `dev`.

Nella proprietà `InstanceType`, il modello nidifica due funzioni intrinseche `Fn::If` per determinare il tipo di istanza da utilizzare. Se la condizione `CreateProdResources` è true, il tipo di istanza è `c5.xlarge`. Se la condizione è false, viene valutata la condizione `CreateDevResources`. Se la condizione `CreateDevResources` è true, il tipo di istanza è `t3.medium`, altrimenti è `t3.small`.

Oltre al tipo di istanza, l'ambiente di produzione crea e collega un EC2 volume Amazon all'istanza. Le risorse `MountPoint` e `NewVolume` sono associate alla condizione `CreateProdResources`: in questo modo, le risorse vengono create solo se la condizione viene valutata 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
```

**Nota**  
Per esempi più complessi riguardo all’utilizzo delle condizioni per creare risorse, consulta l’argomento [Attributo `Condition`](aws-attribute-condition.md).

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

La funzione intrinseca `Fn::FindInMap` restituisce i valori corrispondenti alle chiavi in una mappatura a due livelli dichiarata nella sezione `Mappings`.

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

**Nota**  
Non è possibile nidificare due istanze di due funzioni in forma breve.

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

MapName  <a name="MapName"></a>
Il nome logico di una mappatura dichiarata nella sezione Mappature che contiene le chiavi e i valori.

TopLevelKey  <a name="TopLevelKey"></a>
Il nome della chiave di livello superiore. Il valore è un elenco di coppie chiave-valore.

SecondLevelKey  <a name="SecondLevelKey"></a>
Il nome della chiave di secondo livello, che è impostato su una delle chiavi dall’elenco assegnato a `TopLevelKey`.

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

Il valore assegnato a `SecondLevelKey`.

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

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

**Topics**
+ [Utilizza Fn::FindInMap con valori specifici della regione](#intrinsic-function-reference-findinmap-region-example)
+ [Utilizza Fn::FindInMap per configurazioni specifiche dell’ambiente](#intrinsic-function-reference-findinmap-environment-example)

### Utilizza Fn::FindInMap con valori specifici della regione
<a name="intrinsic-function-reference-findinmap-region-example"></a>

L’esempio seguente mostra come utilizzare `Fn::FindInMap` in un modello che include due mappature: `AWSInstanceType2Arch` e `AWSRegionArch2AMI`. Include anche un parametro `InstanceType` che consente di scegliere tra `t3.micro` e `t4g.nano`. L’impostazione predefinita è `t3.micro`, ma può essere sovrascritta durante la creazione dello stack. 

`Fn::FindInMap` determina innanzitutto l’architettura (`HVM64` o `ARM64`) in base al tipo di istanza selezionato, quindi cerca l’ID AMI corretto per quell’architettura nella Regione AWS attuale. 

**Nota**  
Gli AMI IDs mostrati in questi esempi sono segnaposto a scopo dimostrativo. Quando possibile, prendi in considerazione l’utilizzo di riferimenti dinamici ai parametri AWS Systems Manager come alternativa alla sezione `Mappings`. Per evitare di aggiornare tutti i modelli con un nuovo ID ogni volta che l'AMI che desideri utilizzare cambia, utilizza un AWS Systems Manager parametro per recuperare l'ID AMI più recente quando lo stack viene creato o aggiornato. Le versioni più recenti di quelle comunemente utilizzate AMIs sono disponibili anche come parametri pubblici in Systems Manager. Per ulteriori informazioni, consulta [Get values stored in other services using dynamic references](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
```

### Utilizza Fn::FindInMap per configurazioni specifiche dell’ambiente
<a name="intrinsic-function-reference-findinmap-environment-example"></a>

L’esempio seguente mostra come usare `Fn::FindInMap` per un modello con una sezione `Mappings` che contiene una singola mappa, `SecurityGroups`. Contiene inoltre un parametro `EnvironmentType` che consente di specificare se l’ambiente è `Dev` o `Prod`. L’impostazione predefinita è `Dev` ma può essere sovrascritta durante la creazione dello stack.

`Fn::FindInMap`restituisce il valore appropriato in `SecurityGroupIds` base al `EnvironmentType` parametro. `Fn::Split`quindi divide la stringa separata da virgole del gruppo di sicurezza IDs in un elenco, che è il formato previsto per. [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)

Se implementi questo stack con il set `EnvironmentType` su `Dev`, `SecurityGroupIds` per `EC2Instance` sarà `sg-12345678`. Se imposti `EnvironmentType` su `Prod`, utilizzerà `sg-abcdef01` e `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 ]
```

## Funzioni supportate
<a name="w2aac24c25c13"></a>

È possibile utilizzare le funzioni seguenti in una funzione `Fn::FindInMap`.
+ `Fn::FindInMap`
+ `Ref`

## Risorse correlate
<a name="w2aac24c25c15"></a>

Per utilizzare altre funzioni intrinseche o un valore predefinito in una funzione `Fn::FindInMap`, è necessario dichiarare la trasformazione `AWS::LanguageExtensions` all’interno del modello. Per ulteriori informazioni, consulta [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md).

Questi argomenti correlati possono essere utili per sviluppare modelli che utilizzano la funzione `Fn::FindInMap`.
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [CloudFormationMappingssintassi del modello](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html) *nella Guida per l'utente AWS CloudFormation *

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

La funzione intrinseca `Fn::ForEach` prende una raccolta e un frammento e applica gli elementi della raccolta all’identificatore nel frammento fornito. `Fn::ForEach` può contenere altre funzioni intrinseche, inclusa `Fn::ForEach` stessa, ed essere utilizzata nelle sezioni `Conditions`, `Outputs` e `Resources` (incluse le proprietà delle risorse). Non può essere utilizzata in nessuna delle seguenti sezioni: `AWSTemplateFormatVersion`, `Description`, `Metadata`, `Transform`, `Parameters`, `Mappings`, `Rules` o `Hooks`.

Se utilizzi la funzione intrinseca `Fn::ForEach` nel modello, devi anche utilizzare [Trasformazione `AWS::LanguageExtensions`](transform-aws-languageextensions.md).

L’utilizzo della funzione intrinseca `Fn::ForEach` non modifica le quote, che si applicano al modello risultante. Le quote includono la dimensione massima di un modello e il numero massimo di risorse in un modello. Per ulteriori informazioni, consulta [Comprendere le CloudFormation quote](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html) nella *Guida per l'AWS CloudFormation utente*.

## Dichiarazione
<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>

*Nome logico del loop*  
Un ID logico per il loop. Il nome deve essere univoco all’interno del modello e non può essere in conflitto con alcun valore di ID logico nella sezione `Resources` del modello. Questo nome non è presente nell’output trasformato. Viene utilizzato come riferimento interno all'interno del CloudFormation modello stesso.

*Identificatore*  
Un identificatore per il segnaposto che viene sostituito nei parametri `OutputKey` e `OutputValue`. Tutte le istanze di `${Identifier}` o `&{Identifier}` nei parametri `OutputKey` e `OutputValue` verranno sostituite con i valori del parametro `Collection`.

*Raccolta*  
La raccolta di valori su cui iterare. Può essere una matrice in questo parametro oppure può essere un [`Ref`](intrinsic-function-reference-ref.md) su un `CommaDelimitedList`. Quando utilizzi `&{Identifier}`, è possibile che i caratteri non alfanumerici vengano trasferiti in `Collection`.

*Chiave di output*  
La chiave nel modello trasformato `${Identifier}` o `&{Identifier}` deve essere inclusa nel parametro `OutputKey`. Ad esempio, se `Fn::ForEach` viene utilizzato nella sezione `Resources` del modello, questo è l’ID logico di ogni risorsa.  
La sintassi `&{}` consente l’utilizzo dei caratteri non alfanumerici di `Collection` nel parametro `OutputKey`. Per un esempio, consulta [Passare caratteri non alfanumerici all’interno di `Collection` per `Fn::ForEach`](intrinsic-function-reference-foreach-example-resource.md#intrinsic-function-reference-foreach-example-non-alphanumeric).

*Valore di output*  
Il valore che viene replicato nel modello trasformato per ogni elemento del parametro `Collection`. Ad esempio, se `Fn::ForEach` viene utilizzato nella sezione `Resources` del modello, questo è il frammento del modello che viene ripetuto per configurare ogni risorsa.

## Valore restituito
<a name="intrinsic-function-reference-foreach-return-value"></a>

Un oggetto espanso che contiene il frammento dell’oggetto ripetuto una volta per ogni elemento della raccolta, in cui l’identificatore nel frammento viene sostituito con l’elemento della raccolta.

## Funzioni supportate
<a name="intrinsic-function-reference-foreach-nested-functions"></a>

È possibile utilizzare le funzioni seguenti in una funzione `Fn::ForEach`.
+ Funzioni di condizione:
  + [`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)

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

Puoi trovare esempi delle sezioni `Conditions`, `Outputs` e `Resources` in [Esempi](intrinsic-function-reference-foreach-examples.md).

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

**Topics**
+ [Esempi di `Fn::ForEach` nella sezione `Resources`](intrinsic-function-reference-foreach-example-resource.md)
+ [Esempi di `Fn::ForEach` nella sezione `Outputs`](intrinsic-function-reference-foreach-example-outputs.md)
+ [Esempi di `Fn::ForEach` nella sezione `Conditions`](intrinsic-function-reference-foreach-example-conditions.md)

# Esempi di `Fn::ForEach` nella sezione `Resources`
<a name="intrinsic-function-reference-foreach-example-resource"></a>

Questi esempi dimostrano l’utilizzo della funzione intrinseca `Fn::ForEach` nella sezione `Resources`. Per ulteriori informazioni su questa sezione, consulta [Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/resources-section-structure.html) nella *Guida per l’utente di AWS CloudFormation *.

**Topics**
+ [Replica di una risorsa Amazon SNS](#intrinsic-function-reference-foreach-example-replicate-resource)
+ [Replica di una risorsa Amazon DynamoDB](#intrinsic-function-reference-foreach-example-replicate-ddb-resource)
+ [Replica di risorse multiple](#intrinsic-function-reference-foreach-example-replicate-multiple-resources)
+ [Replica di più risorse utilizzando loop `Fn::ForEach` nidificati](#intrinsic-function-reference-foreach-example-nested-loop-resources)
+ [Proprietà replicate di riferimento per una risorsa Amazon EC2](#intrinsic-function-reference-foreach-example-reference-replicated-resource)
+ [Proprietà replicate per una risorsa Amazon EC2](#intrinsic-function-reference-foreach-example-replicate-resource-properties)
+ [Passare caratteri non alfanumerici all’interno di `Collection` per `Fn::ForEach`](#intrinsic-function-reference-foreach-example-non-alphanumeric)

## Replica di una risorsa Amazon SNS
<a name="intrinsic-function-reference-foreach-example-replicate-resource"></a>

Questo frammento di esempio restituisce un elenco di quattro argomenti di Amazon SNS, con l’ID logico corrispondente agli elementi della raccolta (`Success`, `Failure`, `Timeout`, `Unknown`), con un `TopicName` e `FifoTopic` corrispondenti impostati su `true`.

**Nota**  
Per i modelli che devono funzionare sia con argomenti FIFO che con argomenti standard, puoi utilizzare la proprietà `DisplayName` invece di `TopicName`. Ciò consente di CloudFormation generare automaticamente i nomi degli argomenti con il `.fifo` suffisso appropriato quando `FifoTopic` è`true`. Basta sostituire `TopicName` con `DisplayName: !Ref TopicName` nella sezione `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
```

Il modello trasformato sarà equivalente al modello seguente:

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

## Replica di una risorsa Amazon DynamoDB
<a name="intrinsic-function-reference-foreach-example-replicate-ddb-resource"></a>

Questo frammento di esempio crea quattro risorse [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-dynamodb-table.html) con nomi come `Points`, `Score` e così via.

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

Il modello trasformato sarà equivalente al modello seguente:

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

## Replica di risorse multiple
<a name="intrinsic-function-reference-foreach-example-replicate-multiple-resources"></a>

Questo esempio crea più istanze di [AWS::EC2::NatGateway](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-natgateway.html)e [AWS: :EC2: :EIP](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-eip.html) utilizzando una convenzione di denominazione di. `"{ResourceType}${Identifier}"` È possibile dichiarare più tipi di risorse in un unico loop `Fn::ForEach` in modo da sfruttare un singolo identificatore.

I valori univoci per ogni elemento della raccolta sono definiti nella sezione `Mappings`, in cui la funzione intrinseca [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md) viene utilizzata per fare riferimento al valore corrispondente. Se `Fn::FindInMap` non è in grado di trovare l’identificatore corrispondente, la proprietà `Condition` non verrà impostata su `!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
```

Il modello trasformato sarà equivalente al modello seguente:

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

## Replica di più risorse utilizzando loop `Fn::ForEach` nidificati
<a name="intrinsic-function-reference-foreach-example-nested-loop-resources"></a>

Questo esempio utilizza i loop `Fn::ForEach` nidificati per mappare tre risorse ([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) e [AWS::EC2::SubnetNetworkAclAssociation](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-subnetnetworkaclassociation.html)) l'una con l'altra.

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

Il modello trasformato sarà equivalente al modello seguente:

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

## Proprietà replicate di riferimento per una risorsa Amazon EC2
<a name="intrinsic-function-reference-foreach-example-reference-replicated-resource"></a>

Questo esempio utilizza la funzione intrinseca `Fn::ForEach` per fare riferimento alle risorse [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html) replicate.

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

Il modello trasformato sarà equivalente al modello seguente:

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

## Proprietà replicate per una risorsa Amazon EC2
<a name="intrinsic-function-reference-foreach-example-replicate-resource-properties"></a>

Questo esempio utilizza la funzione intrinseca `Fn::ForEach` per ripetere alcune proprietà come `ImageId`, `InstanceType` e `AvailabilityZone` su una risorsa [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'}
```

Il modello trasformato sarà equivalente al modello seguente:

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

## Passare caratteri non alfanumerici all’interno di `Collection` per `Fn::ForEach`
<a name="intrinsic-function-reference-foreach-example-non-alphanumeric"></a>

Questo esempio utilizza la sintassi `&{}`, che consente il passaggio dei caratteri non alfanumerici (`.` e `/`) negli indirizzi IP all’interno di `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
```

Il modello trasformato sarà equivalente al modello seguente:

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

# Esempi di `Fn::ForEach` nella sezione `Outputs`
<a name="intrinsic-function-reference-foreach-example-outputs"></a>

Questi esempi dimostrano l’utilizzo della funzione intrinseca `Fn::ForEach` nella sezione `Outputs`. Per ulteriori informazioni su questa sezione, consulta [Outputs](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html) nella *Guida per l’utente di AWS CloudFormation *.

**Topics**
+ [Risorse `AWS::S3::Bucket` replicate di riferimento](#intrinsic-function-reference-foreach-example-replicate-outputs)
+ [Risorse `AWS::EC2::Instance` replicate di riferimento](#intrinsic-function-reference-foreach-example-replicate-conditions)

## Risorse `AWS::S3::Bucket` replicate di riferimento
<a name="intrinsic-function-reference-foreach-example-replicate-outputs"></a>

Questo esempio utilizza loop `Fn::ForEach` nidificati nella sezione `Outputs` per ridurre la lunghezza del modello.

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

Il modello trasformato sarà equivalente al modello seguente:

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

## Risorse `AWS::EC2::Instance` replicate di riferimento
<a name="intrinsic-function-reference-foreach-example-replicate-conditions"></a>

Questo esempio fa riferimento alle risorse replicate nella `Resources` sezione utilizzando la logica IDs generata. 

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

Il modello trasformato sarà equivalente al modello seguente:

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

# Esempi di `Fn::ForEach` nella sezione `Conditions`
<a name="intrinsic-function-reference-foreach-example-conditions"></a>

Questi esempi dimostrano l’utilizzo della funzione intrinseca `Fn::ForEach` nella sezione `Conditions`. Per ulteriori informazioni su questa sezione, consulta [Conditions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html) nella *Guida per l’utente di AWS CloudFormation *.

**Importante**  
`Conditions` deve essere la seconda proprietà elencata o successiva. La creazione dello stack avrà esito negativo se `Conditions` è la prima proprietà elencata nel parametro del frammento di modello di `Fn::ForEach`.

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

`Conditions` deve essere aggiunta come seconda chiave (o successiva) affinché lo stack venga creato correttamente: 

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

**Topics**
+ [Replica di una singola condizione](#intrinsic-function-reference-foreach-example-replicated-single-condition)

## Replica di una singola condizione
<a name="intrinsic-function-reference-foreach-example-replicated-single-condition"></a>

Questo esempio utilizza la funzione intrinseca `Fn::ForEach` nella sezione `Conditions` per replicare più condizioni simili con proprietà diverse.

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

Il modello trasformato sarà equivalente al modello seguente:

```
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 funzione intrinseca `Fn::GetAtt` restituisce il valore di un attributo di una risorsa nel modello. 

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

```
!GetAtt logicalNameOfResource.attributeName
```

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

`logicalNameOfResource`  
Il nome logico (noto anche come *ID logico*) della risorsa che contiene l’attributo desiderato.

`attributeName`  
Il nome dell’attributo specifico della risorsa di cui desideri il valore. Consulta la pagina di riferimento della risorsa per i dettagli sugli attributi disponibili per quel tipo di risorsa.

## Valore restituito
<a name="intrinsic-function-reference-getatt-return"></a>

Il valore dell’attributo. Per informazioni sui valori `GetAtt` restituiti per le risorse, consulta la documentazione per le risorse in [Informazioni di riferimento su proprietà e risorse](aws-template-resource-type-ref.md).

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

### Restituire un valore dell’attributo
<a name="intrinsic-function-reference-getatt-example"></a>

L’esempio seguente restituisce una stringa contenente il nome DNS del bilanciatore del carico con il nome logico `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
```

#### Restituire più valori dell’attributo
<a name="intrinsic-function-reference-getatt-example2"></a>

Il seguente esempio restituisce `SourceSecurityGroup.OwnerAlias` e `SourceSecurityGroup.GroupName` del bilanciatore del carico con il nome logico `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
```

#### Usa `Fn::Sub` all’interno della funzione `Fn::GetAtt`
<a name="intrinsic-function-reference-getatt-foreach"></a>

**Nota**  
Quando usi la trasformazione `AWS::LanguageExtensions`, puoi utilizzare `Fn::GetAtt` in combinazione con altre funzioni intrinseche. Per le funzioni supportate, consulta [Funzioni supportate](#getatt-supported-functions).

Gli esempi seguenti mostrano come utilizzare `Fn::GetAtt` con [`Fn::Sub`](intrinsic-function-reference-sub.md), in combinazione con [`Fn::ForEach`](intrinsic-function-reference-foreach.md), nella sezione `Outputs` di un modello per ridurne la lunghezza e la verbosità. L’uso di `Fn::Sub` all’interno di `Fn::GetAtt` consente al modello di contenere una funzione intrinseca che può fare riferimento a un bucket diverso a ogni iterazione della chiamata `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
```

## Funzioni supportate
<a name="getatt-supported-functions"></a>

Quando usi la [trasformazione AWS::LanguageExtensions](transform-aws-languageextensions.md), puoi utilizzare le seguenti funzioni all’interno della funzione `Fn::GetAtt`. Questo vale sia per il nome della risorsa logica `Fn::GetAtt` che per il nome dell’attributo `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)

Quando la trasformazione `AWS::LanguageExtensions` non viene utilizzata:
+ Per il nome dell’attributo `Fn::GetAtt`, puoi utilizzare solo la funzione [`Ref`](intrinsic-function-reference-ref.md).
+ Per il nome logico della risorsa `Fn::GetAtt`, non puoi utilizzare funzioni. Devi specificare invece una stringa che è un ID logico della risorsa. 

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

La funzione intrinseca `Fn::GetAZs` restituisce una matrice in cui sono elencate le zone di disponibilità per una Regione specifica in ordine alfabetico. Poiché i clienti hanno accesso a diverse zone di disponibilità, la funzione intrinseca `Fn::GetAZs` consente ai creatori di modelli di scrivere modelli che si adattano al tipo di accesso degli utenti che effettuano la chiamata. In questo modo non è necessario effettuare la codifica fissa di un elenco completo di zone di disponibilità per una determinata Regione.

**Importante**  
La funzione `Fn::GetAZs` restituisce solo le zone di disponibilità con una sottorete predefinita, a meno che nessuna delle zone di disponibilità disponga di una sottorete predefinita. In questo caso, vengono restituite tutte le zone di disponibilità.  
Analogamente alla risposta del `describe-availability-zones` AWS CLI comando, l'ordine dei risultati della `Fn::GetAZs` funzione non è garantito e può cambiare quando vengono aggiunte nuove zone di disponibilità.

autorizzazioni IAM

Le autorizzazioni necessarie per utilizzare la funzione `Fn::GetAZs` dipendono dalla piattaforma in cui vengono avviate le istanze Amazon EC2. Per entrambe le piattaforme, hai bisogno delle autorizzazioni per le operazioni Amazon EC2 `DescribeAvailabilityZones` e `DescribeAccountAttributes`. Per EC2-VPC, devi disporre anche delle autorizzazioni per l'operazione Amazon EC2 `DescribeSubnets`.

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

```
!GetAZs region
```

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

region  <a name="region"></a>
Nome della Regione per la quale desideri ottenere le zone di disponibilità.  
Puoi utilizzare lo pseudoparametro `AWS::Region` per specificare la Regione in cui viene creato lo stack. La specifica di una stringa vuota equivale a specificare `AWS::Region`.

## Valore restituito
<a name="intrinsic-function-reference-getazs-return-value"></a>

Elenco delle zone di disponibilità per la Regione.

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

### Valutazione di una Regione
<a name="intrinsic-function-reference-getazs-examples-evaluate-region"></a>

Per questi esempi, CloudFormation restituisce la seguente `Fn::GetAZs` matrice, presupponendo che l'utente abbia creato lo stack nella regione: `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
```

 

### Specifica la zona di disponibilità di una sottorete
<a name="intrinsic-function-reference-getazs-examples-subnet-az"></a>

L'esempio seguente utilizza `Fn::GetAZs` per specificare la zona di disponibilità di una sottorete:

#### 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: ""
```

 

### Funzioni nidificate con YAML in formato breve
<a name="intrinsic-function-reference-getazs-examples-nested-functions"></a>

I seguenti esempi mostrano i modelli validi per l'utilizzo di funzioni intrinseche nidificate che utilizzano YAML in formato breve. Non è possibile nidificare funzioni in formato breve in modo consecutivo. Pertanto, un modello simile a `!GetAZs !Ref` non è valido.

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

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

Puoi utilizzare la funzione `Ref` nella funzione `Fn::GetAZs`.

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

La funzione intrinseca `Fn::ImportValue` restituisce il valore di un output esportato da un altro stack. In genere è possibile utilizzare questa funzione per creare riferimenti tra stack. *Per ulteriori informazioni, consultate [Procedura dettagliata: fate riferimento agli output di risorse in un altro stack nella](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html) Guida per l'utente. CloudFormation AWS CloudFormation *

Nei frammenti di modello di esempio seguenti Stack A esporta i valori del gruppo di sicurezza VPC e Stack B li importa.

**Nota**  
Ai riferimenti tra stack si applicano le seguenti limitazioni:  
Per ognuna di esse Account AWS, `Export` i nomi devono essere univoci all'interno di una regione.
Non puoi creare riferimenti tra stack tra Regioni. Puoi utilizzare la funzione intrinseca `Fn::ImportValue` per importare solo valori che sono stati esportati all’interno della stessa Regione.
Per gli output, il valore della proprietà `Name` di un `Export` non può utilizzare le funzioni `Ref` o `GetAtt` che dipendono da una risorsa.  
Allo stesso modo, la funzione `ImportValue` non può includere le funzioni `Ref` o `GetAtt` che dipendono da una risorsa.
Quando un altro stack importa un valore di output, non puoi eliminare lo stack che esporta il valore di output o modificare il valore di output esportato. Tutte le importazioni devono essere eliminate prima di poter eliminare lo stack di esportazione o di modificare il valore di output.

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

Esportazione di Stack 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>

Esportazione di Stack 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>

Importazione di Stack 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>

Importazione di Stack 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'
```

## Dichiarazione
<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>

È possibile utilizzare il nome completo della funzione:

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

In alternativa, si può utilizzare il formato breve:

```
!ImportValue sharedValueToImport
```

**Importante**  
Non è possibile utilizzare il formato breve di `!ImportValue` se contiene il formato breve di `!Sub`.   

```
# do not use
!ImportValue
  !Sub '${NetworkStack}-SubnetID'
```
È necessario utilizzare il nome di funzione completo, ad esempio:  

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

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

sharedValueToImporta  
Il valore di output dello stack che si desidera importare.

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

Il valore di output dello stack.

## Esempio
<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"
```

## Funzioni supportate
<a name="w2aac24c43c19"></a>

È possibile utilizzare le funzioni seguenti nella funzione `Fn::ImportValue`. Il valore di queste funzioni non può dipendere da una risorsa.
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`

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

La funzione intrinseca `Fn::Join` aggiunge un set di valori in un singolo valore, separato dal delimitatore specificato. Se un delimitatore è la stringa vuota, il set di valori sono concatenati senza alcun delimitatore.

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

delimitatore  
Il valore che desideri si verifichi tra frammenti. Il delimitatore si verificherà solo tra frammenti. Non terminerà il valore finale.

ListOfValues  
L'elenco dei valori che desideri siano combinati.

## Valore restituito
<a name="intrinsic-function-reference-join-returnvalues"></a>

La stringa combinata.

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

### Collegamento di un array di stringhe semplice
<a name="intrinsic-function-reference-join-example1"></a>

Il seguente esempio restituisce: `"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 ] ]
```

### Collegamento mediante la funzione Ref con parametri
<a name="intrinsic-function-reference-join-example2"></a>

L'esempio seguente utilizza `Fn::Join` per creare un valore di stringa. Utilizza la funzione `Ref` con il parametro `AWS::Partition` e lo pseudo parametro `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
```

**Nota**  
Inoltre, consulta la funzione [`Fn::Sub`](intrinsic-function-reference-sub.md) per funzionalità simili.

## Funzioni supportate
<a name="intrinsic-function-reference-join-supportedfunctions"></a>

Per il delimitatore `Fn::Join`, non è possibile utilizzare alcuna funzione. Devi specificare un valore di stringa.

Per l’elenco di valori `Fn::Join`, puoi utilizzare le seguenti funzioni:
+ `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 funzione intrinseca `Fn::Length` restituisce il numero di elementi all'interno di una matrice o di una funzione intrinseca che restituisce una matrice.

**Importante**  
È necessario utilizzare [Trasformazione `AWS::LanguageExtensions`](transform-aws-languageextensions.md) per utilizzare la funzione intrinseca `Fn::Length`.

## Dichiarazione
<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 funzione intrinseca che restituisce una matrice della quale desideri restituire il numero di elementi.

`Array`  
La matrice della quale desideri restituire il numero di elementi.

## Valore restituito
<a name="intrinsic-function-reference-length-return"></a>

Il numero di elementi all'interno di una funzione intrinseca che restituisce una matrice o di una matrice passata alla funzione intrinseca. 

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

### Restituire il numero di elementi in una funzione intrinseca che restituisce una matrice
<a name="intrinsic-function-reference-length-example-subsection"></a>

Questo frammento di esempio restituisce il numero di elementi in una funzione intrinseca che restituisce una matrice. La funzione restituisce 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"]
#...
```

### Restituire il numero di elementi in una funzione intrinseca Ref che si riferisce a un tipo di parametro di elenco
<a name="intrinsic-function-reference-length-example2"></a>

Questo frammento di esempio restituisce il numero di elementi in una funzione intrinseca `Ref` che si riferisce a un tipo di parametro di elenco. Se il parametro con il nome `ListParameter` è un elenco con 3 elementi, la funzione restituisce 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
#...
```

### Restituire il numero di elementi in una matrice
<a name="intrinsic-function-reference-length-example3"></a>

Questo frammento di esempio restituisce il numero di elementi nella matrice passata alla funzione intrinseca. La funzione restituisce 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
#...
```

## Funzioni supportate
<a name="length-supported-functions"></a>

Nella matrice o funzione intrinseca `Fn::Length` puoi utilizzare le funzioni seguenti:
+ `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 funzione `Fn::Select` intrinseca restituisce un singolo oggetto da un elenco di oggetti in base al relativo indice.

**Importante**  
`Fn::Select` non verifica la presenza di valori Null o se l'indice è fuori dai limiti della matrice. Entrambe le condizioni comporteranno un errore dello stack, per cui devi assicurarti che l'indice che scegli sia valido e che l'elenco non contenga valori Null.

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

indice  
Indice dell'oggetto da recuperare. Deve essere un valore compreso tra zero e N-1, dove N rappresenta il numero di elementi nella matrice.

listOfObjects  
L'elenco di oggetti tra cui è possibile scegliere. L'elenco non deve essere Null, né includere voci Null.

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

L'oggetto selezionato.

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

### Esempio di base
<a name="w2aac24c58c13b3"></a>

Il seguente esempio restituisce: `"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" ] ]
```

 

### Tipo di parametro CommaDelimitedList
<a name="w2aac24c58c13b5"></a>

Puoi utilizzare `Fn::Select` per selezionare un oggetto da un parametro `CommaDelimitedList`. Potresti utilizzare un parametro `CommaDelimitedList` per combinare i valori dei parametri correlati, il che riduce il numero totale di parametri nel modello. Ad esempio, il parametro seguente specifica un elenco di tre blocchi CIDR delimitati dalla virgola:

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

Per specificare uno dei tre blocchi CIDR, utilizza `Fn::Select` nella sezione Resources (Risorse) dello stesso modello, come mostrato nel seguente frammento di esempio:

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

 

### Funzioni nidificate con YAML in formato breve
<a name="w2aac24c58c13b7"></a>

I seguenti esempi mostrano i modelli validi per l'utilizzo di funzioni intrinseche nidificate con il formato breve `!Select`. Non è possibile nidificare funzioni in formato breve in modo consecutivo. Pertanto, un modello simile a `!GetAZs !Ref` non è valido.

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

## Funzioni supportate
<a name="w2aac24c58c15"></a>

Per il valore `Fn::Select` dell'indice, puoi utilizzare le funzioni `Ref` e `Fn::FindInMap`.

Per l'elenco di oggetti `Fn::Select`, puoi utilizzare le seguenti funzioni:
+ `Fn::FindInMap`
+ `Fn::GetAtt`
+ `Fn::GetAZs`
+ `Fn::If`
+ `Fn::Split`
+ `Ref`

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

Per dividere una stringa in un elenco di valori di stringa in modo che tu possa selezionare un elemento dall’elenco di stringhe risultante, utilizza la funzione `Fn::Split` intrinseca. Specifica la posizione delle divisioni con un delimitatore, ad esempio `,` (una virgola). Dopo la divisione di una stringa, utilizza la funzione [`Fn::Select`](intrinsic-function-reference-select.md) per scegliere un elemento specifico.

Ad esempio, se una stringa di sottorete delimitata da virgole IDs viene importata nel modello di stack, è possibile dividere la stringa in corrispondenza di ogni virgola. Dall'elenco delle sottoreti IDs, utilizzate la funzione `Fn::Select` intrinseca per specificare un ID di sottorete per una risorsa.

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

Devi specificare entrambi i parametri.

delimitatore  
Un valore di stringa che determina dove la stringa di origine viene suddivisa.

stringa di origine  
Il valore di stringa che desideri suddividere.

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

Un elenco di valori di stringa.

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

I seguenti esempi illustrano il comportamento della funzione `Fn::Split`.

### Elenco semplice
<a name="w2aac24c62c13b5"></a>

L’esempio seguente suddivide una stringa in corrispondenza di ciascuna barra verticale (`|`). La funzione restituisce `["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" ]
```

 

### Elenco con valori di stringa vuoti
<a name="w2aac24c62c13b7"></a>

Se suddividi una stringa con delimitatori consecutivi, l’elenco risultante includerà una stringa vuota. L’esempio seguente mostra come viene suddivisa una stringa con due delimitatori consecutivi e un delimitatore aggiunto. La funzione restituisce `["a", "", "c", ""]`.

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

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

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

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

 

### Suddivisione di un valore di output importato
<a name="w2aac24c62c13b9"></a>

L'esempio seguente divide un valore di output importato e quindi seleziona il terzo elemento dall'elenco di subnet IDs risultante, come specificato dalla funzione. `Fn::Select`

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

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

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

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

## Funzioni supportate
<a name="w2aac24c62c15"></a>

Per il delimitatore `Fn::Split`, non è possibile utilizzare alcuna funzione. Devi specificare un valore di stringa.

Per l’elenco di valori `Fn::Split`, puoi utilizzare le seguenti funzioni:
+ `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 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)

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

La funzione intrinseca `Fn::ToJsonString` converte un oggetto o una matrice nella stringa JSON corrispondente.

**Importante**  
È necessario utilizzare [Trasformazione `AWS::LanguageExtensions`](transform-aws-languageextensions.md) per utilizzare la funzione intrinseca `Fn::ToJsonString`.

## Dichiarazione
<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'oggetto che desideri convertire in una stringa JSON.

`Array`  
La matrice da convertire in una stringa JSON.

## Valore restituito
<a name="intrinsic-function-reference-tojsonstring-return"></a>

L'oggetto o la matrice convertito in una stringa JSON. 

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

### Conversione di un oggetto in una stringa JSON
<a name="intrinsic-function-reference-tojsonstring-example-subsection"></a>

Questo frammento di esempio converte l'oggetto passato alla funzione intrinseca in una stringa 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
#...
```

In entrambi questi esempi, se `Ref` per `ParameterName` restituisce `resolvedValue`, la funzione restituisce la seguente stringa JSON:

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

### Conversione di una matrice in una stringa JSON
<a name="intrinsic-function-reference-tojsonstring-example2"></a>

Questo frammento di esempio converte la matrice passata alla funzione intrinseca in una stringa 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
#...
```

In entrambi questi esempi, se `Ref` per `ParameterName` restituisce `resolvedValue`, la funzione restituisce la seguente stringa JSON:

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

## Funzioni supportate
<a name="tojsonstring-supported-functions"></a>

Nella matrice o funzione intrinseca `Fn::ToJsonString` puoi utilizzare le funzioni seguenti:
+ `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 funzione intrinseca `Fn::Transform` specifica una macro per eseguire un’elaborazione personalizzata di una parte di un modello di stack. Le macro consentono di eseguire elaborazioni personalizzate sui modelli, da azioni semplici come find-and-replace operazioni a trasformazioni estese di interi modelli. *Per ulteriori informazioni, vedere [Utilizzo delle CloudFormation macro per eseguire l'elaborazione personalizzata sui modelli](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) nella Guida per l'AWS CloudFormation utente.*

È inoltre possibile utilizzare `Fn::Transform` per chiamare la [Trasformazione `AWS::Include`](transform-aws-include.md) trasformazione, che è una macro ospitata da CloudFormation.

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

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

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

Sintassi per il nome completo della funzione:

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

Sintassi per la forma breve:

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

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

`Name`  
Il nome della macro che deve eseguire l’elaborazione.

`Parameters`  
I parametri di elenco, specificati come coppie chiave-valore, da passare alla macro.

## Valore restituito
<a name="intrinsic-function-reference-transform-returnvalue"></a>

Il frammento di modello elaborato da includere nel modello di stack elaborato.

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

L’esempio seguente chiama la trasformazione `AWS::Include`, specificando che la posizione da cui recuperare un frammento di modello viene passato nel parametro `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
```

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

Nessuna.

CloudFormation passa tutte le chiamate di funzione intrinseche incluse nella `Fn::Transform` macro specificata come stringhe letterali.

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

La funzione intrinseca `Ref` restituisce il valore di un parametro, di una risorsa o di un’altra funzione intrinseca. Questa funzione viene comunemente utilizzata per creare riferimenti tra risorse all'interno di un CloudFormation modello. 

## Dichiarazione
<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>

Sintassi per il nome completo della funzione:

```
Ref: logicalName
```

```
Ref:
   IntrinsicFunction
```

Sintassi per la forma breve:

```
!Ref logicalName
```

```
!Ref
   IntrinsicFunction
```

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

logicalName  
Il nome logico della risorsa o del parametro di riferimento desiderato.

IntrinsicFunction  
La funzione intrinseca che restituisce una stringa valida. Deve contenere riferimenti a parametri o identificatori e non deve contenere identificatori logici di risorse.

## Valore restituito
<a name="ref-return-value"></a>

Il valore restituito di `Ref` dipende dal tipo di entità a cui si fa riferimento:
+ Quando specifichi il nome logico di un parametro, viene restituito il valore del parametro. Per ulteriori informazioni, consultate la [Parameterssintassi CloudFormation del modello](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html).
+ Quando specifichi il nome logico di una risorsa, viene restituito un valore che usi per identificare quella risorsa. Di solito, è il nome della risorsa. Tuttavia, per alcune risorse, viene restituito un identificatore con un altro significato importante nel contesto della risorsa. Ad esempio, la risorsa `AWS::EC2::EIP` restituisce l’indirizzo IP e `AWS::EC2::Instance` restituisce l’ID dell’istanza. Per ulteriori informazioni sui valori `Ref` restituiti per una risorsa, consulta la documentazione per quella risorsa in [Informazioni di riferimento su proprietà e risorse](aws-template-resource-type-ref.md).
+ Quando si specifica una funzione intrinseca, viene restituito l’output di tale funzione.

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

### Crea riferimenti tra le risorse
<a name="intrinsic-function-reference-ref-example"></a>

La seguente dichiarazione di risorse per un indirizzo IP elastico richiede l’ID istanza di un’istanza EC2. Utilizza la funzione `Ref` per specificare l’ID di istanza della risorsa `MyEC2Instance` dichiarata altrove nel modello.

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

### Restituisce un identificatore di risorsa come output dello stack
<a name="intrinsic-function-reference-ref-example-2"></a>

Gli esempi seguenti mostrano come utilizzare la funzione `Ref` per restituire il nome di un bucket Amazon S3 con il nome logico `MyBucket` come output dello stack. 

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

### Usa la funzione intrinseca `Fn::Join` all’interno della funzione `Ref`
<a name="ref-example-intrinsic-functions-multiple-stages"></a>

**Nota**  
Quando usi la trasformazione `AWS::LanguageExtensions`, puoi utilizzare `Ref` in combinazione con altre funzioni intrinseche. Per le funzioni supportate, consulta [Funzioni supportate](#ref-supported-functions).

Gli esempi seguenti mostrano come impostare gli identificatori di risorse utilizzando la funzione intrinseca `Fn::Sub`, le condizioni e l’input per il parametro `Stage`. Le funzioni `Ref` e le `Fn::GetAtt` funzioni fanno quindi riferimento ai valori appropriati, in base allo stage. `Fn::Sub`viene utilizzato innanzitutto con `Fn::GetAtt` per ottenere l'ARN della coda Amazon SQS appropriata per impostare le dimensioni dell'allarme Amazon. CloudWatch Successivamente, [`Fn::Join`](intrinsic-function-reference-join.md) viene utilizzato con `Ref` per creare il nome dell’argomento SNS per la proprietà `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
```

## Funzioni supportate
<a name="ref-supported-functions"></a>

Quando usi la [trasformazione AWS::LanguageExtensions](transform-aws-languageextensions.md), puoi utilizzare le seguenti funzioni all’interno della funzione `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`

# Funzioni delle regole
<a name="intrinsic-function-reference-rules"></a>

Le funzioni delle regole sono funzioni speciali che funzionano solo nella `Rules` sezione di un CloudFormation modello. Queste funzioni ti consentono di convalidare i valori dei parametri utilizzando una logica personalizzata. Tutte le convalide vengono eseguite prima della CloudFormation creazione o dell'aggiornamento di qualsiasi risorsa.

Le regole sono utili quando i vincoli dei parametri standard sono insufficienti. Ad esempio, quando SSL è abilitato, devono essere forniti sia un certificato che un nome di dominio. Una regola può garantire il rispetto di queste dipendenze.

Nella condizione o nelle asserzioni di una regola, puoi utilizzare le funzioni intrinseche, ad esempio `Fn::Equals`, `Fn::Not` e `Fn::RefAll`. La proprietà condition determina se CloudFormation applica le asserzioni. Se la condizione restituisce a`true`, CloudFormation valuta le asserzioni per verificare se il valore di un parametro è valido quando uno stack viene creato o aggiornato. Se il valore di un parametro non è valido, CloudFormation non crea o aggiorna lo stack. Se la condizione restituisce un risultato positivo`false`, CloudFormation non verifica il valore del parametro e procede con l'operazione di stack.

*Se non conosci l'uso delle regole nei tuoi modelli, ti consigliamo di consultare prima l'argomento sulla [Rulessintassi dei CloudFormation modelli](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html) nella Guida per l'utente.AWS CloudFormation *

**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)
+ [Funzioni supportate](#supported-rule-functions)
+ [Attributi supportati](#rules-parameter-attributes)

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

Restituisce `true` se tutte le condizioni specificate vengono valutate `true`; restituisce `false` se una qualsiasi delle condizioni corrisponde a `false`. `Fn::And` agisce come operatore AND. Il numero minimo di condizioni che puoi includere è due, il numero massimo è dieci.

### Dichiarazione
<a name="fn-and-declaration"></a>

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

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

*condition*  
Una funzione intrinseca specifica delle regole che restituisce `true` o `false`.

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

L’esempio seguente restituisce `true` se il nome del gruppo di sicurezza a cui si fa riferimento è uguale a `sg-mysggroup` e se il valore di parametro `InstanceType` è `t3.large` o `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>

Restituisce `true` se una stringa specificata corrisponde ad almeno un valore in un elenco di stringhe.

### Dichiarazione
<a name="fn-contains-declaration"></a>

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

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

*list\$1of\$1strings*  
Un elenco di stringhe, ad esempio `"A", "B", "C"`.

*stringa*  
Una stringa, ad esempio `"A"`, che intendi confrontare con un elenco di stringhe.

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

La funzione seguente restituisce `true` se il valore di parametro `InstanceType` è incluso nell’elenco (`t3.large` o `t3.small`):

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

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

Restituisce `true` se una stringa specificata corrisponde a tutti i valori in un elenco.

### Dichiarazione
<a name="fn-eachmemberequals-declaration"></a>

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

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

*list\$1of\$1strings*  
Un elenco di stringhe, ad esempio `"A", "B", "C"`.

*stringa*  
Una stringa, ad esempio `"A"`, che intendi confrontare con un elenco di stringhe.

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

La funzione seguente restituisce `true` se il tag `Department` per tutti i parametri di tipo `AWS::EC2::VPC::Id` hanno valore `IT`:

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

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

Restituisce `true` se ogni membro in un elenco di stringhe corrisponde ad almeno un valore in un secondo elenco di stringhe.

### Dichiarazione
<a name="fn-eachmemberin-declaration"></a>

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

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

*strings\$1to\$1check*  
Un elenco di stringhe, ad esempio. `"A", "B", "C"` CloudFormation verifica se ogni membro del `strings_to_check` parametro si trova nel `strings_to_match` parametro.

*strings\$1to\$1match*  
Un elenco di stringhe, ad esempio `"A", "B", "C"`. Ogni membro nel parametro `strings_to_match` viene confrontato con i membri del parametro `strings_to_check`.

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

La funzione seguente verifica se gli utenti specificano una sottorete in un Virtual Private Cloud (VPC) valido. Il VPC deve essere nell’account e nella Regione in cui gli utenti utilizzano lo stack. La funzione si applica a tutti i parametri di tipo `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>

Confronta due valori per determinare se sono uguali. Restituisce `true` se i due valori sono uguali e `false` se non lo sono.

### Dichiarazione
<a name="fn-equals-declaration"></a>

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

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

*`value`*  
Un valore di qualsiasi tipo che intendi confrontare con un altro valore.

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

L’esempio seguente restituisce `true` se il valore per il parametro `EnvironmentType` è uguale a `prod`:

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

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

Restituisce `true` per una condizione che viene valutata `false` e restituisce `false` per una condizione che viene valutata `true`. `Fn::Not` agisce come operatore NOT.

### Dichiarazione
<a name="fn-not-declaration"></a>

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

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

*`condition`*  
Una funzione intrinseca specifica delle regole che restituisce `true` o `false`.

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

L’esempio seguente restituisce `true` se il valore per il parametro `EnvironmentType` non è uguale a `prod`:

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

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

Restituisce `true` se una delle condizioni specificate viene valutata `true`; restituisce `false` se tutte le condizioni corrispondono a `false`. `Fn::Or` agisce come operatore OR. Il numero minimo di condizioni che puoi includere è due, il numero massimo è dieci.

### Dichiarazione
<a name="fn-or-declaration"></a>

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

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

*`condition`*  
Una funzione intrinseca specifica delle regole che restituisce `true` o `false`.

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

L’esempio seguente restituisce `true` se il nome del gruppo di sicurezza a cui si fa riferimento è uguale a `sg-mysggroup` o se il valore di parametro `InstanceType` è `t3.large` o `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>

Restituisce tutti i valori per un tipo di parametro specificato.

### Dichiarazione
<a name="fn-refall-declaration"></a>

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

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

*parameter\$1type*  
Un tipo AWS di parametro specifico, ad esempio `AWS::EC2::SecurityGroup::Id` o`AWS::EC2::VPC::Id`. Per ulteriori informazioni, consulta [Tipi di parametri AWS specifici supportati nella Guida](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) per l'*AWS CloudFormation utente*.

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

La seguente funzione restituisce un elenco di tutti i VPC IDs per la regione e Account AWS in cui lo stack viene creato o aggiornato:

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

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

Restituisce un valore di attributo o un elenco di valori per un parametro e un attributo specifici.

### Dichiarazione
<a name="fn-valueof-declaration"></a>

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

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

*attributo*  
Il nome di un attributo da cui recuperare un valore. Per ulteriori informazioni sugli attributi, consulta [Attributi supportati](#rules-parameter-attributes).

*parameter\$1logical\$1id*  
Il nome di un parametro da cui recuperare un valore. Il parametro deve essere dichiarato nella sezione `Parameters` del modello.

### Esempi
<a name="fn-valueof-examples"></a>

L’esempio seguente restituisce il valore del tag `Department` per il VPC specificato dal parametro `ElbVpc`:

```
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
```

Se si specificano più valori per un parametro, la ValueOf funzione Fn:: può restituire un elenco. Ad esempio, se specifichi più sottoreti e ottieni un elenco di zone di disponibilità in cui ogni membro è la zona di disponibilità di una determinata sottorete:

```
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
```

## `Fn::ValueOfAll`
<a name="fn-valueofall"></a>

Restituisce un elenco di tutti i valori di attributo per un tipo di parametro e un attributo specifici.

### Dichiarazione
<a name="fn-valueofall-declaration"></a>

```
"Fn::ValueOfAll" : ["parameter_type", "attribute"]
```

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

*attributo*  
Il nome di un attributo a partire dal quale intendi recuperare un valore. Per ulteriori informazioni sugli attributi, consulta [Attributi supportati](#rules-parameter-attributes).

*parameter\$1type*  
Un tipo AWS di parametro specifico, ad esempio o. `AWS::EC2::SecurityGroup::Id` `AWS::EC2::VPC::Id` Per ulteriori informazioni, consulta [Tipi di parametri AWS specifici supportati nella Guida](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported) per l'*AWS CloudFormation utente*.

### Esempio
<a name="fn-valueofall-example"></a>

Nell'esempio seguente, la `Fn::ValueOfAll` funzione restituisce un elenco di valori, in cui ogni membro è il valore del `Department` tag VPCs associato a quel tag:

```
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
```

## Funzioni supportate
<a name="supported-rule-functions"></a>

Non puoi utilizzare un’altra funzione nelle funzioni `Fn::ValueOf` e `Fn::ValueOfAll`. Tuttavia, è consentito utilizzare le seguenti funzioni in tutte le altre funzioni intrinseche specifiche delle regole:
+ `Ref`
+ Altre funzioni intrinseche specifiche delle regole

## Attributi supportati
<a name="rules-parameter-attributes"></a>

Il seguente elenco descrive i valori di attributo che è possibile recuperare per determinati tipi di parametro e risorse:

Il tipo di `AWS::EC2::VPC::Id` parametro o VPC IDs.  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ Tags.*tag\$1key*

Il tipo di `AWS::EC2::Subnet::Id` parametro o la IDs sottorete,  
+ AvailabilityZone
+ Tags.*tag\$1key*
+ VpcId

Il tipo di `AWS::EC2::SecurityGroup::Id` parametro o il gruppo IDs di sicurezza.  
+ Tags.*tag\$1key*