

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

# Dividi un modello in pezzi riutilizzabili usando stack nidificati
<a name="using-cfn-nested-stacks"></a>

Man mano che la tua infrastruttura cresce, potresti ritrovarti a creare ripetutamente configurazioni di risorse identiche su più modelli. Per evitare questa ridondanza, puoi separare queste configurazioni comuni in modelli dedicati. Poi, puoi utilizzare la risorsa [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html) negli altri modelli per fare riferimento a questi modelli dedicati, creando così degli stack nidificati.

Ad esempio, immagina di avere una configurazione del bilanciatore del carico che utilizzi per la maggior parte dei tuoi stack. Invece di copiare e incollare le stesse configurazioni nei modelli, puoi creare un modello dedicato per il sistema di load balancer. Così, puoi fare riferimento a questo modello dall’interno di altri modelli che richiedono la stessa configurazione del bilanciatore del carico.

Gli stack nidificati possono a loro volta contenere altri stack nidificati, generando una gerarchia di stack, come mostrato nel diagramma di seguito. Lo *stack radice* è lo stack di primo livello al quale sostanzialmente appartengono tutti gli stack nidificati. Ciascuno stack nidificato ha un proprio stack padre. Per il primo livello di stack nidificati, lo stack radice è anche lo stack padre. 
+ Lo stack A è lo stack padre per tutti gli altri stack nidificati della gerarchia.
+ Per lo stack B, lo stack A è sia lo stack padre che lo stack radice.
+ Per lo stack D, lo stack C è lo stack padre; mentre per lo stack C, lo stack padre è lo stack B.

![\[Gli stack nidificati creati come parte di un altro stack hanno uno stack padre immediatamente superiore, e uno stack radice di primo livello.\]](http://docs.aws.amazon.com/it_it/AWSCloudFormation/latest/UserGuide/images/cfn-console-nested-stacks.png)


**Topics**
+ [Esempio del prima e dopo della suddivisione di un modello](#create-nested-stack-template)
+ [Esempio di architettura degli stack nidificati](#nested-stack-examples)
+ [Esecuzione di operazioni di stack su stack nidificati](#perform-stack-operations-on-nested-stacks)
+ [Informazioni correlate](#nested-stacks-related-information)

## Esempio del prima e dopo della suddivisione di un modello
<a name="create-nested-stack-template"></a>

Questo esempio dimostra come è possibile prendere un unico CloudFormation modello di grandi dimensioni e riorganizzarlo in un design più strutturato e riutilizzabile utilizzando modelli annidati. Inizialmente, il modello “Before nesting stacks” mostra tutte le risorse definite in un unico file. Questo può diventare complicato e difficile da gestire man mano che il numero di risorse aumenta. Il modello “After nesting stacks” suddivide le risorse in modelli più piccoli e separati. Ogni stack nidificato gestisce un insieme specifico di risorse correlate, rendendo la struttura generale più organizzata e facile da gestire.


| Prima degli stack nidificati | Dopo gli stack nidificati | 
| --- | --- | 
| <pre>AWSTemplateFormatVersion: 2010-09-09<br />Parameters:<br />  InstanceType:<br />    Type: String<br />    Default: t2.micro<br />    Description: The EC2 instance type<br />  <br />  Environment:<br />    Type: String<br />    Default: Production<br />    Description: The deployment environment<br /><br />Resources:<br />  MyEC2Instance:<br />    Type: AWS::EC2::Instance<br />    Properties:<br />      ImageId: ami-1234567890abcdef0<br />      InstanceType: !Ref InstanceType<br /><br />  MyS3Bucket:<br />    Type: AWS::S3::Bucket</pre> | <pre>AWSTemplateFormatVersion: 2010-09-09<br />Resources:<br />  MyFirstNestedStack:<br />    Type: AWS::CloudFormation::Stack<br />    Properties:<br />      TemplateURL: https://s3.amazonaws.com/amzn-s3-demo-bucket/first-nested-stack.yaml<br />      Parameters:<br />        # Pass parameters to the nested stack if needed<br />        InstanceType: t3.micro<br /><br />  MySecondNestedStack:<br />    Type: AWS::CloudFormation::Stack<br />    Properties:<br />      TemplateURL: https://s3.amazonaws.com/amzn-s3-demo-bucket/second-nested-stack.yaml<br />      Parameters:<br />        # Pass parameters to the nested stack if needed<br />        Environment: Testing<br />    DependsOn: MyFirstNestedStack</pre> | 

## Esempio di architettura degli stack nidificati
<a name="nested-stack-examples"></a>

Questa sezione dimostra un’architettura di stack nidificata costituita da uno stack di primo livello che fa riferimento a uno stack nidificato. Lo stack nidificato implementa una funzione Lambda Node.js, riceve il valore di un parametro dallo stack di primo livello e restituisce un output esposto attraverso lo stack di primo livello.

**Topics**
+ [Passaggio 1: crea un modello per lo stack nidificato sul sistema locale](#create-a-nested-stack-template)
+ [Passaggio 2: crea un modello per lo stack di primo livello sul sistema locale](#create-a-nested-stack-parent-template)
+ [Passaggio 3: stack e implementazione dei modelli](#create-a-nested-stack-parent-template)

### Passaggio 1: crea un modello per lo stack nidificato sul sistema locale
<a name="create-a-nested-stack-template"></a>

L’esempio seguente mostra il formato per il modello dello stack nidificato.

#### YAML
<a name="nested-stack-child-example.yaml"></a>

```
 1. AWSTemplateFormatVersion: 2010-09-09
 2. Description: Nested stack template for Lambda function deployment
 3. Parameters:
 4.   MemorySize:
 5.     Type: Number
 6.     Default: 128
 7.     MinValue: 128
 8.     MaxValue: 10240
 9.     Description: Lambda function memory allocation (128-10240 MB)
10. Resources:
11.   LambdaFunction:
12.     Type: AWS::Lambda::Function
13.     Properties:
14.       FunctionName: !Sub "${AWS::StackName}-Function"
15.       Runtime: nodejs18.x
16.       Handler: index.handler
17.       Role: !GetAtt LambdaExecutionRole.Arn
18.       Code:
19.         ZipFile: |
20.           exports.handler = async (event) => {
21.             return {
22.               statusCode: 200,
23.               body: JSON.stringify('Hello from Lambda!')
24.             };
25.           };
26.       MemorySize: !Ref MemorySize
27.   LambdaExecutionRole:
28.     Type: AWS::IAM::Role
29.     Properties:
30.       AssumeRolePolicyDocument:
31.         Version: '2012-10-17'
32.         Statement:
33.           - Effect: Allow
34.             Principal:
35.               Service: lambda.amazonaws.com
36.             Action: sts:AssumeRole
37.       ManagedPolicyArns:
38.         - 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
39. Outputs:
40.   LambdaArn:
41.     Description: ARN of the created Lambda function
42.     Value: !GetAtt LambdaFunction.Arn
```

### Passaggio 2: crea un modello per lo stack di primo livello sul sistema locale
<a name="create-a-nested-stack-parent-template"></a>

L’esempio seguente mostra il formato del modello di stack di primo livello e la risorsa [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-stack.html) che fa riferimento allo stack creato nel passaggio precedente.

#### YAML
<a name="nested-stack-parent-example.yaml"></a>

```
 1. AWSTemplateFormatVersion: 2010-09-09
 2. Description: Top-level stack template that deploys a nested stack
 3. Resources:
 4.   NestedStack:
 5.     Type: AWS::CloudFormation::Stack
 6.     Properties:
 7.       TemplateURL: /path_to_template/nested-template.yaml
 8.       Parameters:
 9.         MemorySize: 256
10. Outputs:
11.   NestedStackLambdaArn:
12.     Description: ARN of the Lambda function from nested stack
13.     Value: !GetAtt NestedStack.Outputs.LambdaArn
```

### Passaggio 3: stack e implementazione dei modelli
<a name="create-a-nested-stack-parent-template"></a>

**Nota**  
Quando lavorate con i modelli a livello locale, il AWS CLI **package** comando può aiutarvi a preparare i modelli per la distribuzione. Infatti, gestisce automaticamente il caricamento di artefatti locali su Amazon S3 (`TemplateURL` incluso) e genera un nuovo file del modello con riferimenti aggiornati a queste posizioni S3. Per ulteriori informazioni, consulta [Carica gli artefatti locali in un bucket S3 con AWS CLI](using-cfn-cli-package.md). 

Successivamente, puoi utilizzare il comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) per caricare il modello nidificato su un bucket Amazon S3.

```
aws cloudformation package \
  --s3-bucket amzn-s3-demo-bucket \
  --template /path_to_template/top-level-template.yaml \
  --output-template-file packaged-template.yaml \
  --output json
```

Il comando genera un nuovo modello nel percorso specificato da `--output-template-file`. Sostituisce il riferimento a `TemplateURL` con la posizione di Amazon S3, come di seguito.

**Modello risultante**

```
AWSTemplateFormatVersion: 2010-09-09
Description: Top-level stack template that deploys a nested stack
Resources:
  NestedStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: https://s3.us-west-2.amazonaws.com/amzn-s3-demo-bucket/8b3bb7aa7abfc6e37e2d06b869484bed.template
      Parameters:
        MemorySize: 256
Outputs:
  NestedStackLambdaArn:
    Description: ARN of the Lambda function from nested stack
    Value:
      Fn::GetAtt:
      - NestedStack
      - Outputs.LambdaArn
```

Dopo aver eseguito il comando **package**, puoi distribuire il modello elaborato utilizzando il comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/). Devi confermare le funzionalità di IAM per gli stack nidificati contenenti le risorse IAM includendo l’opzione `--capabilities`.

```
aws cloudformation deploy \
  --template-file packaged-template.yaml \
  --stack-name stack-name \
  --capabilities CAPABILITY_NAMED_IAM
```

## Esecuzione di operazioni di stack su stack nidificati
<a name="perform-stack-operations-on-nested-stacks"></a>

Quando lavori con stack nidificati, devi gestirli con attenzione durante le operazioni. Alcune operazioni relative agli stack, ad esempio gli aggiornamenti, devono essere avviati dallo stack radice anziché effettuati direttamente sugli stack nidificati. Quando aggiorni uno stack radice, vengono aggiornati solo gli stack nidificati con modifiche al modello. 

Inoltre, la presenza degli stack nidificati può influire sulle operazioni sullo stack radice. Ad esempio, se uno stack nidificato rimane bloccato nello stato `UPDATE_ROLLBACK_IN_PROGRESS`, lo stack radice aspetterà che lo stack nidificato completi il suo rollback prima di continuare. Prima di procedere con le operazioni di aggiornamento, assicurati di disporre delle autorizzazioni IAM per annullare un aggiornamento dello stack in caso di rollback. Per ulteriori informazioni, consulta [Controlla CloudFormation l'accesso con AWS Identity and Access Management](control-access-with-iam.md).

Utilizza le seguenti procedure per trovare lo stack radice e gli stack nidificati.

**Per visualizzare lo stack radice di uno stack nidificato**

1. Accedi Console di gestione AWS e apri la CloudFormation console all'indirizzo [https://console.aws.amazon.com/cloudformazione.](https://console.aws.amazon.com/cloudformation/)

1. Nella pagina **Stack**, seleziona il nome dello stack nidificato di cui desideri visualizzare lo stack radice.

   Gli stack nidificati sono contrassegnati dalla dicitura **NESTED** accanto al nome.

1. Nel riquadro **Informazioni stack**, nella sezione **Panoramica**, seleziona il nome dello stack presente in elenco come **Stack radice**.

**Per visualizzare gli stack nidificati che appartengono a uno stack radice**

1. Dallo stack radice di cui desideri visualizzare gli stack nidificati, seleziona la scheda **Risorse**.

1. Nella colonna **Tipo**, cerca le risorse di tipo. **AWS::CloudFormation::Stack**

## Informazioni correlate
<a name="nested-stacks-related-information"></a>
+ [Nidificazione di uno stack esistente](resource-import-nested-stacks.md)
+ [Comprendere l’aggiornamento dei comportamenti delle risorse stack](using-cfn-updating-stacks-update-behaviors.md)
+ [Continuare il rollback da aggiornamenti non riusciti di stack nidificati](using-cfn-updating-stacks-continueupdaterollback.md#nested-stacks)
+ [Errore di rollback degli stack nidificati](troubleshooting.md#troubleshooting-errors-nested-stacks-are-stuck)