

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 Resourcessintassi del modello
<a name="resources-section-structure"></a>

La `Resources` sezione è una sezione obbligatoria di primo livello in un CloudFormation modello. Dichiara le AWS risorse che desideri CloudFormation fornire e configurare come parte del tuo stack.

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

La sezione `Resources` utilizza la sintassi seguente:

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

```
"Resources" : {
    "LogicalResourceName1" : {
        "Type" : "AWS::ServiceName::ResourceType",
        "Properties" : {
            "PropertyName1" : "PropertyValue1",
            ...
        }
    },

    "LogicalResourceName2" : {
        "Type" : "AWS::ServiceName::ResourceType",
        "Properties" : {
            "PropertyName1" : "PropertyValue1",
            ...
        }
    }
}
```

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

```
Resources:
  LogicalResourceName1:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1
      ...

  LogicalResourceName2:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1
      ...
```

## ID logico (chiamato anche *nome logico*)
<a name="resources-section-logical-id"></a>

All'interno di un CloudFormation modello, le risorse sono identificate in base ai rispettivi nomi di risorse logiche. Questi nomi devono essere un valore alfanumerico (A-Z, a-z, 0-9) univoco all’interno del modello. I nomi logici vengono utilizzati per fare riferimento alle risorse di altre sezioni del modello. 

## Tipo di risorsa
<a name="resources-section-resource-type"></a>

Ogni risorsa deve avere un attributo `Type` che definisce il tipo di risorsa AWS . L’attributo `Type` ha il formato `AWS::ServiceName::ResourceType`. Ad esempio, l’attributo `Type` per un bucket Amazon S3 è `AWS::S3::Bucket`. 

Per un elenco completo dei tipi di risorse supportati, consulta [le informazioni di riferimento sui tipi di proprietà e di risorse AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html).

## Proprietà delle risorse
<a name="resources-section-resource-properties"></a>

Le proprietà delle risorse sono opzioni aggiuntive che puoi specificare per definire i dettagli di configurazione per il tipo di risorsa specifico. Alcune proprietà sono obbligatorie, mentre altre sono opzionali. Alcune proprietà hanno valori predefiniti, pertanto la loro specificazione è facoltativa.

Per i dettagli sulle proprietà supportate per ogni tipo di risorsa, consulta gli argomenti nella [documentazione di riferimento dei tipi di proprietà e risorse AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html).

I valori delle proprietà possono essere stringhe letterali, elenchi di stringhe, valori booleani, riferimenti dinamici, riferimenti a parametri, pseudoriferimenti oppure il valore restituito da una funzione. Gli esempi seguenti mostrano come dichiarare diversi tipi di valori di proprietà:

### JSON
<a name="resource-properties-example.json"></a>

```
"Properties" : {
    "String" : "A string value",
    "Number" : 123,
    "LiteralList" : [ "first-value", "second-value" ],
    "Boolean" : true
}
```

### YAML
<a name="resource-properties-example.yaml"></a>

```
Properties:
  String: A string value 
  Number: 123
  LiteralList:
    - first-value
    - second-value
  Boolean: true
```

## ID fisico
<a name="resources-section-physical-id"></a>

Oltre agli ID logici, alcune risorse dispongono anche di un ID fisico, che è l'effettivo nome assegnato alla risorsa, ad esempio un ID dell'istanza EC2 o un nome di bucket S3. Utilizza gli ID fisici per identificare le risorse esterne ai CloudFormation modelli, ma solo dopo che le risorse sono state create. Ad esempio, supponiamo di assegnare l'ID logico `MyEC2Instance` a una risorsa dell'istanza EC2. Quando CloudFormation crea l'istanza, genera e assegna CloudFormation automaticamente un ID fisico (ad esempio`i-1234567890abcdef0`) all'istanza. Puoi usare questo ID fisico per identificare l'istanza e visualizzare le relative proprietà (ad esempio, il nome DNS) tramite la console Amazon EC2. 

Per i bucket Amazon S3 e molte altre risorse, genera CloudFormation automaticamente un nome fisico univoco per la risorsa se non ne specifichi uno esplicitamente. Questo nome fisico si basa su una combinazione del nome dello CloudFormation stack, del nome logico della risorsa specificato nel CloudFormation modello e di un ID univoco. Ad esempio, se hai un bucket Amazon S3 con il nome logico `MyBucket` in uno stack denominato`MyStack`, CloudFormation potresti denominare il bucket con il seguente nome fisico. `MyStack-MyBucket-abcdefghijk1`

Per le risorse che supportano nomi personalizzati, puoi assegnare i nomi fisici per semplificare e velocizzare l’individuazione delle risorse. Ad esempio, puoi denominare un bucket S3 che memorizza i log con il nome `MyPerformanceLogs`. Per ulteriori informazioni, consulta [Tipo di nome](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-name.html).

## Riferimento delle risorse
<a name="using-cross-resource-references"></a>

Spesso, è necessario impostare le proprietà su una risorsa in base al nome o alla proprietà di un’altra risorsa. Ad esempio, potresti creare un'istanza EC2 che utilizza gruppi di sicurezza EC2 o una CloudFront distribuzione supportata da un bucket S3. Tutte queste risorse possono essere create nello stesso modello. CloudFormation 

CloudFormation fornisce funzioni intrinseche che è possibile utilizzare per fare riferimento ad altre risorse e alle relative proprietà. Queste funzioni consentono di creare dipendenze tra le risorse e di passare valori da una risorsa all’altra.

### La funzione `Ref`
<a name="resource-properties-ref"></a>

La `Ref` funzione viene comunemente utilizzata per recuperare una proprietà identificativa delle risorse definite all'interno dello stesso modello. CloudFormation Quello che restituisce dipende dal tipo di risorsa. Per la maggior parte delle risorse, restituisce il nome fisico della risorsa. Tuttavia, per alcuni tipi di risorse, può restituire un valore diverso, ad esempio un indirizzo IP per una risorsa `AWS::EC2::EIP` o un nome della risorsa Amazon (ARN) per un argomento Amazon SNS. 

I seguenti esempi illustrano come utilizzare la funzione `Ref` nelle proprietà. In ognuno di questi esempi, la funzione `Ref` restituirà il nome effettivo della risorsa `LogicalResourceName` dichiarata altrove nel modello. L’esempio di sintassi `!Ref` nell’esempio YAML è solo un modo più breve per scrivere la funzione `Ref`.

#### JSON
<a name="resource-properties-ref-example.json"></a>

```
"Properties" : {
    "PropertyName" : { "Ref" : "LogicalResourceName" }
}
```

#### YAML
<a name="resource-properties-ref-example.yaml"></a>

```
Properties:
  PropertyName1:
    Ref: LogicalResourceName
  PropertyName2: !Ref LogicalResourceName
```

Per ulteriori informazioni dettagliate sulla funzione `Ref`, consulta [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html). 

### La funzione `Fn::GetAtt`
<a name="resource-properties-getatt"></a>

La funzione `Ref` è utile se il parametro o il valore restituito per una risorsa è esattamente quello che desideri. Tuttavia, possono essere necessari altri attributi di una risorsa. Ad esempio, se desideri creare una CloudFront distribuzione con un'origine S3, devi specificare la posizione del bucket utilizzando un indirizzo in stile DNS. Una serie di risorse dispongono di attributi aggiuntivi i cui valori possono essere utilizzati nel modello. Per ottenere questi attributi, utilizza la funzione `Fn::GetAtt`.

I seguenti esempi illustrano come utilizzare la funzione `GetAtt` nelle proprietà. La funzione `Fn::GetAtt` utilizza due parametri, il nome logico della risorsa e il nome dell’attributo da recuperare. L’esempio di sintassi `!GetAtt` nell’esempio YAML è solo un modo più breve per scrivere la funzione `GetAtt`.

#### JSON
<a name="resource-properties-getatt-example.json"></a>

```
"Properties" : {
    "PropertyName" : {
        "Fn::GetAtt" : [ "LogicalResourceName", "AttributeName" ]
    }
}
```

#### YAML
<a name="resource-properties-getatt-example.yaml"></a>

```
Properties:
  PropertyName1:
    Fn::GetAtt:
      - LogicalResourceName
      - AttributeName
  PropertyName2: !GetAtt LogicalResourceName.AttributeName
```

Per ulteriori informazioni dettagliate sulla funzione `GetAtt`, consulta [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-getatt.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-getatt.html).

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

Gli esempi seguenti illustrano come dichiarare le risorse e come i CloudFormation modelli possono fare riferimento ad altre risorse definite all'interno dello stesso modello e delle risorse esistenti. AWS 

**Topics**
+ [Dichiarazione di una singola risorsa con un nome personalizzato](#resources-section-structure-examples-single-resource)
+ [Riferimento ad altre risorse con la funzione `Ref`](#resources-section-structure-examples-ref)
+ [Riferimento agli attributi delle risorse utilizzando la funzione `Fn::GetAtt`](#resources-section-structure-examples-getatt)

### Dichiarazione di una singola risorsa con un nome personalizzato
<a name="resources-section-structure-examples-single-resource"></a>

Gli esempi seguenti dichiarano una singola risorsa di tipo `AWS::S3::Bucket` con il nome logico `MyBucket`. La proprietà `BucketName` è impostata su *amzn-s3-demo-bucket*, che deve essere sostituita con il nome desiderato per il bucket S3.

Se utilizzi questa dichiarazione di risorse per creare uno stack, CloudFormation creerà un bucket Amazon S3 con impostazioni predefinite. Per altre risorse, come un'istanza Amazon EC2 o un gruppo Auto Scaling CloudFormation , sono necessarie ulteriori informazioni.

#### JSON
<a name="resources-section-structure-examples-single-resource.json"></a>

```
{
    "Resources": {
        "MyBucket": {
            "Type": "AWS::S3::Bucket",
            "Properties": {
                "BucketName": "amzn-s3-demo-bucket"
            }
        }
    }
}
```

#### YAML
<a name="resources-section-structure-examples-single-resource.yaml"></a>

```
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: amzn-s3-demo-bucket
```

### Riferimento ad altre risorse con la funzione `Ref`
<a name="resources-section-structure-examples-ref"></a>

Gli esempi seguenti mostrano una dichiarazione di risorse che definisce un’istanza EC2 e un gruppo di sicurezza. La risorsa `Ec2Instance` fa riferimento alla risorsa `InstanceSecurityGroup` come parte della proprietà `SecurityGroupIds` utilizzando la funzione `Ref`. Include anche un gruppo di sicurezza esistente (`sg-12a4c434`) che non è dichiarato nel modello. Utilizza stringhe letterali per fare riferimento alle risorse AWS esistenti.

#### JSON
<a name="resources-section-structure-examples-ref.json"></a>

```
{
    "Resources": {
        "Ec2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "SecurityGroupIds": [
                    {
                        "Ref": "InstanceSecurityGroup"
                    },
                    "sg-12a4c434"
                ],
                "KeyName": "MyKey",
                "ImageId": "ami-1234567890abcdef0"
            }
        },
        "InstanceSecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "Enable SSH access via port 22",
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": 22,
                        "ToPort": 22,
                        "CidrIp": "0.0.0.0/0"
                    }
                ]
            }
        }
    }
}
```

#### YAML
<a name="resources-section-structure-examples-ref.yaml"></a>

```
Resources:
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup
        - sg-12a4c434
      KeyName: MyKey
      ImageId: ami-1234567890abcdef0
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
```

### Riferimento agli attributi delle risorse utilizzando la funzione `Fn::GetAtt`
<a name="resources-section-structure-examples-getatt"></a>

Gli esempi seguenti mostrano una dichiarazione di risorsa che definisce una risorsa di CloudFront distribuzione e un bucket S3. La risorsa `MyDistribution` specifica il nome DNS della risorsa `MyBucket` utilizzando la funzione `Fn::GetAtt` per ottenere l’attributo del bucket `DomainName`. Noterai che la funzione `Fn::GetAtt` elenca i suoi due parametri in un array. Per le funzioni che richiedono più parametri, puoi utilizzare un array per specificare i parametri.

#### JSON
<a name="resources-section-structure-examples-getatt.json"></a>

```
{
  "Resources": {
    "MyBucket": {
      "Type": "AWS::S3::Bucket"
    },
    "MyDistribution": {
      "Type": "AWS::CloudFront::Distribution",
      "Properties": {
        "DistributionConfig": {
          "Origins": [
            {
              "DomainName": {
                "Fn::GetAtt": [
                  "MyBucket",
                  "DomainName"
                ]
              },
              "Id": "MyS3Origin",
              "S3OriginConfig": {}
            }
          ],
          "Enabled": "true",
          "DefaultCacheBehavior": {
            "TargetOriginId": "MyS3Origin",
            "ForwardedValues": {
              "QueryString": "false"
            },
            "ViewerProtocolPolicy": "allow-all"
          }
        }
      }
    }
  }
}
```

#### YAML
<a name="resources-section-structure-examples-getatt.yaml"></a>

```
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
  MyDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Origins:
          - DomainName: !GetAtt 
              - MyBucket
              - DomainName
            Id: MyS3Origin
            S3OriginConfig: {}
        Enabled: 'true'
        DefaultCacheBehavior:
          TargetOriginId: MyS3Origin
          ForwardedValues:
            QueryString: 'false'
          ViewerProtocolPolicy: allow-all
```