

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

# CloudFormation Conditionssintassi del modello
<a name="conditions-section-structure"></a>

La sezione `Conditions` facoltativa contiene istruzioni che definiscono le circostanze nelle quali le entità vengono create o configurate. Ad esempio, è possibile creare una condizione e associarla a una risorsa o a un output in modo da CloudFormation creare la risorsa o l'output solo se la condizione è vera. Analogamente, è possibile associare una condizione a una proprietà in modo da CloudFormation impostare la proprietà su un valore specifico solo se la condizione è vera. Se la condizione è falsa, CloudFormation imposta la proprietà su un valore alternativo specificato dall'utente.

Puoi utilizzare le condizioni quando vuoi riutilizzare un modello per creare risorse in diversi contesti, ad esempio ambienti di test rispetto ad ambienti di produzione. Ad esempio, nel modello puoi aggiungere un parametro di input `EnvironmentType`, che accetta `prod` o `test` come input. Per l’ambiente di `prod`, puoi includere istanze EC2 con alcune funzionalità, mentre per l’ambiente di `test`, puoi utilizzare le funzionalità ridotte per risparmiare denaro. Questa definizione della condizione ti permette di definire quali risorse vengono create e come vengono configurate per ciascun tipo di ambiente.

## Sintassi
<a name="conditions-section-structure-syntax"></a>

La sezione `Conditions` è composta dal nome di chiave `Conditions`. Ogni dichiarazione della condizione include un ID logico e una o più funzioni intrinseche. 

### JSON
<a name="conditions-section-structure-syntax.json"></a>

```
"Conditions": {
  "LogicalConditionName1": {
    "Intrinsic function": ...[
  },

  "LogicalConditionName2": {
    "Intrinsic function": ...
  }
}
```

### YAML
<a name="conditions-section-structure-syntax.yaml"></a>

```
Conditions:
  LogicalConditionName1:
    Intrinsic function:
      ...

  LogicalConditionName2:
    Intrinsic function:
      ...
```

## Come funzionano le condizioni
<a name="conditions-section-structure-overview"></a>

Per utilizzare le condizioni, procedi come segue:

1. **Aggiungi una definizione di parametro**: definisci gli input che le tue condizioni valuteranno nella sezione `Parameters` del modello. Le condizioni restituiscono true o false in base ai valori di questi parametri di input. Tieni presente che gli pseudo parametri sono disponibili automaticamente e non richiedono una definizione esplicita nella sezione `Parameters`. Per ulteriori informazioni sugli pseudoparametri, consulta [Ottieni AWS valori usando pseudo parametri](pseudo-parameter-reference.md).

1. **Aggiungi una definizione della condizione**: definisci le condizioni nella sezione `Conditions` utilizzando funzioni intrinseche come `Fn::If` o `Fn::Equals`. Queste condizioni determinano quando vengono CloudFormation create le risorse associate. Le condizioni possono essere basate su:
   + Valori di input o pseudo parametri
   + Altre condizioni:
   + Valori di mappatura

   Tuttavia, non è possibile fare riferimento alla logica delle risorse IDs o ai relativi attributi nelle condizioni.

1. **Associa le condizioni a risorse o output**: fai riferimento alle condizioni nelle risorse o negli output utilizzando la chiave `Condition` e l’ID logico di una condizione. Facoltativamente, utilizza `Fn::If` in altre parti del modello (come i valori delle proprietà) per impostare i valori in base a una condizione. Per ulteriori informazioni, consulta [Utilizzo della chiave `Condition`](#using-conditions-in-templates).

CloudFormation valuta le condizioni durante la creazione o l'aggiornamento di uno stack. CloudFormation crea entità associate a una condizione vera e ignora le entità associate a una condizione falsa. CloudFormation rivaluta inoltre queste condizioni durante ogni aggiornamento dello stack prima di modificare qualsiasi risorsa. Le entità che rimangono associate a una condizione true vengono aggiornate, mentre quelle che vengono associate a una condizione false vengono eliminate.

**Importante**  
Durante l’aggiornamento di uno stack non puoi aggiornare solo le condizioni. Le condizioni possono essere aggiornate solo se si includono modifiche che comportano l’aggiunta, la modifica o l’eliminazione di risorse.

## Funzioni intrinseche delle condizioni
<a name="conditions-section-structure-functions"></a>

Puoi utilizzare le seguenti funzioni intrinseche per definire le condizioni:
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-and)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-equals)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-foreach.html)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-not)
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-or)

**Nota**  
`Fn::If` è supportata solo nell’attributo di metadati, nell’attributo delle policy di aggiornamento e nei valori di proprietà della sezione`Resources` e nelle sezioni `Outputs` di un modello.

## Utilizzo della chiave `Condition`
<a name="using-conditions-in-templates"></a>

Una volta definita una condizione, è possibile applicarla in diversi punti del modello, ad esempio `Resources` e `Outputs`, utilizzando la chiave `Condition`. La chiave `Condition` fa riferimento al nome logico di una condizione e restituisce il risultato valutato della condizione specificata.

**Topics**
+ [Associa le condizioni alle risorse](#associate-conditions-with-resources)
+ [Associa le condizioni agli output](#associate-conditions-with-outputs)
+ [Condizioni di riferimento in altre condizioni](#reference-conditions-in-other-conditions)
+ [Restituisce in modo condizionale i valori delle proprietà utilizzando `Fn::If`](#conditional-return-property-values-using-fn-if)

### Associa le condizioni alle risorse
<a name="associate-conditions-with-resources"></a>

Per creare risorse in modo condizionale, aggiungi la `Condition` chiave e l'ID logico della condizione come attributo alla risorsa. CloudFormation crea la risorsa solo quando la condizione risulta vera.

#### JSON
<a name="associate-conditions-with-resources.json"></a>

```
"NewVolume" : {
  "Type" : "AWS::EC2::Volume",
  "Condition" : "IsProduction",
  "Properties" : {
     "Size" : "100",
     "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]}
  }
}
```

#### YAML
<a name="associate-conditions-with-resources.yaml"></a>

```
NewVolume:
  Type: AWS::EC2::Volume
  Condition: IsProduction
  Properties:
    Size: 100
    AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
```

### Associa le condizioni agli output
<a name="associate-conditions-with-outputs"></a>

È inoltre possibile associare condizioni agli output. CloudFormation crea l'output solo quando la condizione associata risulta vera.

#### JSON
<a name="associate-conditions-with-outputs.json"></a>

```
"Outputs" : {
  "VolumeId" : {
    "Condition" : "IsProduction",
    "Value" : { "Ref" : "NewVolume" }
  }
}
```

#### YAML
<a name="associate-conditions-with-outputs.yaml"></a>

```
Outputs:
  VolumeId:
    Condition: IsProduction
    Value: !Ref NewVolume
```

### Condizioni di riferimento in altre condizioni
<a name="reference-conditions-in-other-conditions"></a>

Quando si definiscono le condizioni nella sezione `Conditions`, è possibile fare riferimento ad altre condizioni utilizzando la chiave `Condition`. Ciò ti consente di creare una logica condizionale più complessa combinando più condizioni.

Nell’esempio seguente, la condizione `IsProdAndFeatureEnabled` viene valutata come true solo se le condizioni `IsProduction` e `IsFeatureEnabled` restituiscono true.

#### JSON
<a name="reference-conditions-in-other-conditions.json"></a>

```
"Conditions": {
  "IsProduction" : {"Fn::Equals" : [{"Ref" : "Environment"}, "prod"]},
  "IsFeatureEnabled" : { "Fn::Equals" : [{"Ref" : "FeatureFlag"}, "enabled"]},
  "IsProdAndFeatureEnabled" : {
    "Fn::And" : [
      {"Condition" : "IsProduction"},
      {"Condition" : "IsFeatureEnabled"}
    ]
  }
}
```

#### YAML
<a name="reference-conditions-in-other-conditions.yaml"></a>

```
Conditions:
  IsProduction:
    !Equals [!Ref Environment, "prod"]
  IsFeatureEnabled:
    !Equals [!Ref FeatureFlag, "enabled"]
  IsProdAndFeatureEnabled: !And
    - !Condition IsProduction
    - !Condition IsFeatureEnabled
```

### Restituisce in modo condizionale i valori delle proprietà utilizzando `Fn::If`
<a name="conditional-return-property-values-using-fn-if"></a>

Per un controllo più granulare, è possibile utilizzare la funzione intrinseca `Fn::If` per restituire in modo condizionale uno dei due valori di proprietà all’interno delle risorse o degli output. Questa funzione valuta una condizione e restituisce un valore se la condizione risulta true e un altro valore se la condizione risulta false.

#### Valori della proprietà condizionale
<a name="using-fn-if-for-conditional-values"></a>

L’esempio seguente dimostra l’impostazione di un tipo di istanza EC2 in base a una condizione ambientale. Se la condizione `IsProduction` risulta true, il tipo di istanza viene impostato su `c5.xlarge`. In caso contrario, viene impostato su `t3.small`.

##### JSON
<a name="using-fn-if-for-conditional-values.json"></a>

```
"Properties" : {
  "InstanceType" : {
    "Fn::If" : [
      "IsProduction",
      "c5.xlarge",
      "t3.small"
    ]
  }
}
```

##### YAML
<a name="using-fn-if-for-conditional-values.yaml"></a>

```
Properties:
  InstanceType: !If
    - IsProduction
    - c5.xlarge
    - t3.small
```

#### Rimozione della proprietà condizionale
<a name="using-fn-if-with-novalue"></a>

Puoi anche utilizzare lo pseudo parametro `AWS::NoValue` come valore restituito per rimuovere la proprietà corrispondente quando la condizione risulta false.

##### JSON
<a name="using-fn-if-with-novalue.json"></a>

```
"DBSnapshotIdentifier" : {
  "Fn::If" : [
    "UseDBSnapshot",
    {"Ref" : "DBSnapshotName"},
    {"Ref" : "AWS::NoValue"}
  ]
}
```

##### YAML
<a name="using-fn-if-with-novalue.yaml"></a>

```
DBSnapshotIdentifier: !If
  - UseDBSnapshot
  - !Ref DBSnapshotName
  - !Ref "AWS::NoValue"
```

## Esempi
<a name="conditions-section-structure-examples"></a>

**Topics**
+ [Creazione di risorsa basata sull’ambiente](#environment-based-resource-creation)
+ [Provisioning di risorse a più condizioni](#multi-condition-resource-provisioning)

### Creazione di risorsa basata sull’ambiente
<a name="environment-based-resource-creation"></a>

Gli esempi seguenti forniscono un’istanza EC2 e creano e collegano in modo condizionale un nuovo volume EBS solo se il tipo di ambiente è `prod`. Se l’ambiente è `test`, creano semplicemente l’istanza EC2 senza il volume aggiuntivo.

#### JSON
<a name="conditions-section-example-resource-creation.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "EnvType": {
            "Description": "Environment type",
            "Default": "test",
            "Type": "String",
            "AllowedValues": [
                "prod",
                "test"
            ],
            "ConstraintDescription": "must specify prod or test"
        }
    },
    "Conditions": {
        "IsProduction": {
            "Fn::Equals": [
                {
                    "Ref": "EnvType"
                },
                "prod"
            ]
        }
    },
    "Resources": {
        "EC2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "ami-1234567890abcdef0",
                "InstanceType": "c5.xlarge"
            }
        },
        "MountPoint": {
            "Type": "AWS::EC2::VolumeAttachment",
            "Condition": "IsProduction",
            "Properties": {
                "InstanceId": {
                    "Ref": "EC2Instance"
                },
                "VolumeId": {
                    "Ref": "NewVolume"
                },
                "Device": "/dev/sdh"
            }
        },
        "NewVolume": {
            "Type": "AWS::EC2::Volume",
            "Condition": "IsProduction",
            "Properties": {
                "Size": 100,
                "AvailabilityZone": {
                    "Fn::GetAtt": [
                        "EC2Instance",
                        "AvailabilityZone"
                    ]
                }
            }
        }
    }
}
```

#### YAML
<a name="conditions-section-example-resource-creation.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvType:
    Description: Environment type
    Default: test
    Type: String
    AllowedValues:
      - prod
      - test
    ConstraintDescription: must specify prod or test
Conditions:
  IsProduction: !Equals
    - !Ref EnvType
    - prod
Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-1234567890abcdef0
      InstanceType: c5.xlarge
  MountPoint:
    Type: AWS::EC2::VolumeAttachment
    Condition: IsProduction
    Properties:
      InstanceId: !Ref EC2Instance
      VolumeId: !Ref NewVolume
      Device: /dev/sdh
  NewVolume:
    Type: AWS::EC2::Volume
    Condition: IsProduction
    Properties:
      Size: 100
      AvailabilityZone: !GetAtt
        - EC2Instance
        - AvailabilityZone
```

### Provisioning di risorse a più condizioni
<a name="multi-condition-resource-provisioning"></a>

Gli esempi seguenti creano in modo condizionale un bucket S3 se viene fornito un nome del bucket e allegano una policy di bucket solo quando l’ambiente è impostato su `prod`. Se non viene fornito un nome del bucket o se l’ambiente è `test` , non viene creata alcuna risorsa.

#### JSON
<a name="conditions-section-example-multi-condition.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "EnvType": {
            "Type": "String",
            "AllowedValues": [
                "prod",
                "test"
            ]
        },
        "BucketName": {
            "Default": "",
            "Type": "String"
        }
    },
    "Conditions": {
        "IsProduction": {
            "Fn::Equals": [
                {
                    "Ref": "EnvType"
                },
                "prod"
            ]
        },
        "CreateBucket": {
            "Fn::Not": [
                {
                    "Fn::Equals": [
                        {
                            "Ref": "BucketName"
                        },
                        ""
                    ]
                }
            ]
        },
        "CreateBucketPolicy": {
            "Fn::And": [
                {
                    "Condition": "IsProduction"
                },
                {
                    "Condition": "CreateBucket"
                }
            ]
        }
    },
    "Resources": {
        "Bucket": {
            "Type": "AWS::S3::Bucket",
            "Condition": "CreateBucket",
            "Properties": {
                "BucketName": {
                    "Ref": "BucketName"
                }
            }
        },
        "Policy": {
            "Type": "AWS::S3::BucketPolicy",
            "Condition": "CreateBucketPolicy",
            "Properties": {
                "Bucket": {
                    "Ref": "Bucket"
                },
                "PolicyDocument": { ... }
            }
        }
    }
}
```

#### YAML
<a name="conditions-section-example-multi-condition.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  EnvType:
    Type: String
    AllowedValues:
      - prod
      - test
  BucketName:
    Default: ''
    Type: String
Conditions:
  IsProduction: !Equals
    - !Ref EnvType
    - prod
  CreateBucket: !Not
    - !Equals
      - !Ref BucketName
      - ''
  CreateBucketPolicy: !And
    - !Condition IsProduction
    - !Condition CreateBucket
Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Condition: CreateBucket
    Properties:
      BucketName: !Ref BucketName
  Policy:
    Type: AWS::S3::BucketPolicy
    Condition: CreateBucketPolicy
    Properties:
      Bucket: !Ref Bucket
      PolicyDocument: ...
```

In questo esempio, la condizione `CreateBucketPolicy` dimostra come fare riferimento ad altre condizioni utilizzando la chiave `Condition`. La policy viene creata solo quando entrambe le condizioni `IsProduction` e `CreateBucket` risultano true.

**Nota**  
Per esempi più complessi sull’utilizzo delle condizioni, consulta l’argomento [Condition attribute](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-condition.html) in *CloudFormation Template Reference Guide*.