

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

# 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\_name  <a name="condition_name"></a>
Un riferimento a una condizione nella sezione Conditions (Condizioni). Utilizza il nome della condizione per farvi riferimento.

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

value\_if\_false  <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).