

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

# Esempi di set di modifiche per le CloudFormation pile
<a name="using-cfn-updating-stacks-changesets-samples"></a>

Questa sezione fornisce esempi dei set di modifiche che si CloudFormation potrebbero creare per le modifiche più comuni allo stack. Mostrano come modificare un modello direttamente, modificare un parametro di input singolo. pianificare per la ricreazione di risorse (sostituzioni), che impedisce di perdere i dati per i quali non è stato eseguito il backup o interrompere le applicazioni che sono in esecuzione nello stack;, nonché aggiungere e rimuovere le risorse. Per illustrare il modo in cui funzionano i set di modifiche, ti mostreremo le modifiche inviate e parleremo dei set di modifiche risultanti. Poiché ogni esempio si basa su e presuppone che l'esempio precedente sia stato compreso, ti consigliamo di leggerli in ordine. Per una descrizione di ogni campo in un set di modifiche, consulta il tipo di dati [Change](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Change.html) (Modifica) nella *Documentazione di riferimento all'API di AWS CloudFormation *.

È possibile utilizzare la [console](using-cfn-updating-stacks-changesets-view.md) o il AWS CLI funzionamento dell' CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeChangeSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeChangeSet.html)API per visualizzare i dettagli dei set di modifiche.

Abbiamo generato ciascuno dei seguenti set di modifiche da uno stack con il seguente [modello di esempio](https://s3.amazonaws.com/cloudformation-examples/user-guide/changesets/ec2-instance.txt):

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "A sample EC2 instance template for testing change sets.",
  "Parameters" : {
    "Purpose" : {
      "Type" : "String",
      "Default" : "testing",
      "AllowedValues" : ["testing", "production"],
      "Description" : "The purpose of this instance."
    },
    "KeyPairName" : {
      "Type": "AWS::EC2::KeyPair::KeyName",
      "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance"
    },
    "InstanceType" : {
      "Type" : "String",
      "Default" : "t2.micro",
      "AllowedValues" : ["t2.micro", "t2.small", "t2.medium"],
      "Description" : "The EC2 instance type."
    }
  },
  "Resources" : {
    "MyEC2Instance" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "KeyName" : { "Ref" : "KeyPairName" },
        "InstanceType" : { "Ref" : "InstanceType" },
        "ImageId" : "ami-8fcee4e5",
        "Tags" : [
          {
            "Key" : "Purpose",
            "Value" : { "Ref" : "Purpose" }
          }
        ]
      }
    }
  }
}
```

## Modifica diretta di un modello
<a name="using-cfn-updating-stacks-changesets-samples-directly-editing-a-template"></a>

Quando si modificano direttamente le risorse nel modello dello stack per generare un set di modifiche, CloudFormation classifica la modifica come diretta, anziché come modifica iniziata da un valore di parametro aggiornato. I seguenti set di modifiche, che hanno aggiunto un nuovo tag all'istanza `i-1abc23d4`, è un esempio di modifica diretta. Tutti gli altri valori di input, ad esempio i valori dei parametri e le capacità, sono invariati, perciò ci concentreremo sulla struttura `Changes`.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet-direct",
    "Parameters": [
        {
            "ParameterValue": "testing",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.micro",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-1abc23d4",
                "Details": [
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    }
                ],
                "Action": "Modify",
                "Scope": [
                    "Tags"
                ],
                "LogicalResourceId": "MyEC2Instance",
                "Replacement": "False"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T23:35:25.813Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-direct/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

Nella struttura `Changes`, c'è solo una struttura `ResourceChange`. Questa struttura descrive informazioni come il tipo di risorsa che CloudFormation verrà modificato, l'azione che CloudFormation verrà intrapresa, l'ID della risorsa, l'ambito della modifica e se la modifica richiede una sostituzione (dove CloudFormation crea una nuova risorsa e quindi elimina quella precedente). Nell'esempio, il set di modifiche indica che CloudFormation modificherà l'`Tags`attributo dell'`i-1abc23d4` EC2 istanza e non richiede la sostituzione dell'istanza.

Nella `Details` struttura, CloudFormation etichetta questa modifica come una modifica diretta che non richiederà mai la ricreazione (sostituzione) dell'istanza. Puoi eseguire questa modifica con sicurezza, sapendo che CloudFormation non sostituirà l'istanza.

CloudFormation mostra questa modifica come `Static` valutazione. Una valutazione statica significa che CloudFormation può determinare il valore del tag prima di eseguire il set di modifiche. In alcuni casi, CloudFormation può determinare un valore solo dopo aver eseguito un set di modifiche. CloudFormationetichetta tali modifiche come `Dynamic` valutazioni. Ad esempio, se si fa riferimento a una risorsa aggiornata sostituita in modo condizionale, non è CloudFormation possibile determinare se il riferimento alla risorsa aggiornata cambierà.

## Modifica del valore di un parametro di input.
<a name="using-cfn-updating-stacks-changesets-samples-modifying-a-single-input-parameter-value"></a>

Quando modificate il valore di un parametro di input, CloudFormation genera due modifiche per ogni risorsa che utilizza il valore del parametro aggiornato. In questo esempio, desideriamo evidenziare come appariranno tali modifiche e su quali informazioni dovresti concentrarti. L'esempio seguente è stato generato modificando solo il valore del parametro di input `Purpose`.

Il `Purpose` parametro specifica un valore chiave del tag per l' EC2 istanza. In questo esempio, il valore di parametro è stato modificato da `testing` a `production`. Il nuovo valore viene illustrato nella struttura `Parameters`.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet",
    "Parameters": [
        {
            "ParameterValue": "production",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.micro",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-1abc23d4",
                "Details": [
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    },
                    {
                        "CausingEntity": "Purpose",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    }
                ],
                "Action": "Modify",
                "Scope": [
                    "Tags"
                ],
                "LogicalResourceId": "MyEC2Instance",
                "Replacement": "False"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T23:59:18.447Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

Il funzionamento della struttura `Changes` è simile a quello descritto nell’esempio [Modifica diretta di un modello](#using-cfn-updating-stacks-changesets-samples-directly-editing-a-template). Esiste solo una `ResourceChange` struttura, che descrive una modifica all'`Tags`attributo dell'`i-1abc23d4` EC2 istanza.

Tuttavia, nella struttura `Details`, il set di modifiche mostra due modifiche per l'attributo `Tags`, anche se solo un singolo valore di parametro è stato modificato. Le risorse che referenziano un valore di parametro modificato (tramite la funzione intrinseca `Ref`) risultano sempre in due modifiche: una con una valutazione `Dynamic` e un'altra con una valutazione `Static`. Puoi visualizzare questi tipi di modifiche visualizzando i campi riportati di seguito:
+ Per la modifica della valutazione `Static`, visualizza il campo `ChangeSource`. In questo esempio, il campo `ChangeSource` equivale a `ParameterReference`, il che significa che questa modifica è il risultato del valore di riferimento di un parametro aggiornato. Il set di modifiche deve contenere una modifica di valutazione `Dynamic` simile.
+ Puoi trovare la valutazione `Dynamic` corrispondente confrontando la struttura `Target` per entrambe le modifiche, che conterranno le stesse informazioni. In questo esempio, le strutture `Target` per entrambe le modifiche contengono gli stessi valori per i campi `Attribute` e `RequireRecreation`.

Per questi tipi di modifiche, concentrarsi sulla valutazione statica, che offre le informazioni più dettagliate sulla modifica. In questo esempio, la valutazione statica mostra che la modifica è il risultato di una modifica del valore di riferimento di un parametro (`ParameterReference`). L'esatto parametro che è stato modificato è indicato dal campo `CauseEntity` (il parametro `Purpose`).

## Determinazione del valore del campo sostitutivo
<a name="using-cfn-updating-stacks-changesets-samples-determining-the-value-of-the-replacement-field"></a>

Il `Replacement` campo in una `ResourceChange` struttura indica se CloudFormation ricreerà la risorsa. La pianificazione per la ricreazione di risorse (sostituzioni) impedisce di perdere i dati per i quali non è stato eseguito il backup o interrompere le applicazioni che sono in esecuzione nello stack.

Il valore nel campo `Replacement` varia a seconda che una modifica richieda una sostituzione o meno, come indicato dal campo `RequiresRecreation` nella struttura `Target` di una modifica. Ad esempio, se il campo `RequiresRecreation` è `Never`, il campo `Replacement` è `False`. Tuttavia, se sono presenti più modifiche su una singola risorsa e ogni modifica ha un valore diverso per il `RequiresRecreation` campo, CloudFormation aggiorna la risorsa utilizzando il comportamento più intrusivo. In altre parole, se solo una delle molte modifiche richiede una sostituzione, CloudFormation deve sostituire la risorsa e, di conseguenza, impostare il campo `Replacement` su `True`.

Il seguente set di modifiche è stato generato modificando i valori di ogni parametro (`Purpose``InstanceType`, e`KeyPairName`), tutti utilizzati dall' EC2 istanza. Con queste modifiche, CloudFormation sarà necessario sostituire l'istanza perché il `Replacement` campo è uguale a`True`.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet-multiple",
    "Parameters": [
        {
            "ParameterValue": "production",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyNewKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.small",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-7bef86f8",
                "Details": [
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "KeyName",
                            "RequiresRecreation": "Always"
                        }
                    },
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "InstanceType",
                            "RequiresRecreation": "Conditionally"
                        }
                    },
                    {
                        "ChangeSource": "DirectModification",
                        "Evaluation": "Dynamic",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    },
                    {
                        "CausingEntity": "KeyPairName",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "KeyName",
                            "RequiresRecreation": "Always"
                        }
                    },
                    {
                        "CausingEntity": "InstanceType",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Properties",
                            "Name": "InstanceType",
                            "RequiresRecreation": "Conditionally"
                        }
                    },
                    {
                        "CausingEntity": "Purpose",
                        "ChangeSource": "ParameterReference",
                        "Evaluation": "Static",
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never"
                        }
                    }
                ],
                "Action": "Modify",
                "Scope": [
                    "Tags",
                    "Properties"
                ],
                "LogicalResourceId": "MyEC2Instance",
                "Replacement": "True"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T00:39:35.974Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-multiple/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

Identificare la modifica che richiede che la risorsa venga sostituita visualizzando ogni modifica (le valutazioni statiche nella struttura `Details`). In questo esempio, ogni modifica ha un valore diverso per il `RequireRecreation` campo, ma la modifica alla `KeyName` proprietà ha il comportamento di aggiornamento più intrusivo, che richiede sempre una ricreazione. CloudFormation sostituirà l'istanza perché il nome della chiave è stato modificato.

Se il nome della chiave è invariato, la modifica alla proprietà `InstanceType` comporterebbe l'aggiornamento più intrusivo (`Conditionally`), in modo che il campo `Replacement` sia `Conditionally`. Per trovare le condizioni in cui CloudFormation sostituisce l'istanza, visualizza il comportamento di aggiornamento per la `InstanceType` proprietà del tipo di [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html)risorsa.

## Aggiunta e rimozione di risorse
<a name="using-cfn-updating-stacks-changesets-samples-adding-and-removing-resources"></a>

L'esempio seguente è stato generato inviando un modello modificato che rimuove l' EC2 istanza e aggiunge un gruppo Auto Scaling e una configurazione di avvio.

```
{
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000",
    "Status": "CREATE_COMPLETE",
    "ChangeSetName": "SampleChangeSet-addremove",
    "Parameters": [
        {
            "ParameterValue": "testing",
            "ParameterKey": "Purpose"
        },
        {
            "ParameterValue": "MyKeyName",
            "ParameterKey": "KeyPairName"
        },
        {
            "ParameterValue": "t2.micro",
            "ParameterKey": "InstanceType"
        }
    ],
    "Changes": [
        {
            "ResourceChange": {
                "Action": "Add",
                "ResourceType": "AWS::AutoScaling::AutoScalingGroup",
                "Scope": [],
                "Details": [],
                "LogicalResourceId": "AutoScalingGroup"
            },
            "Type": "Resource"
        },
        {
            "ResourceChange": {
                "Action": "Add",
                "ResourceType": "AWS::AutoScaling::LaunchConfiguration",
                "Scope": [],
                "Details": [],
                "LogicalResourceId": "LaunchConfig"
            },
            "Type": "Resource"
        },
        {
            "ResourceChange": {
                "ResourceType": "AWS::EC2::Instance",
                "PhysicalResourceId": "i-1abc23d4",
                "Details": [],
                "Action": "Remove",
                "Scope": [],
                "LogicalResourceId": "MyEC2Instance"
            },
            "Type": "Resource"
        }
    ],
    "CreationTime": "2020-11-18T01:44:08.444Z",
    "Capabilities": [],
    "StackName": "MyStack",
    "NotificationARNs": [],
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet-addremove/1a2345b6-0000-00a0-a123-00abc0abc000"
}
```

Nella struttura `Changes`, ci sono tre strutture `ResourceChange`, una per ciascuna risorsa. Per ogni risorsa, il `Action` campo indica se CloudFormation aggiunge o rimuove la risorsa. I campi `Scope` e `Details` sono vuoti perché si applicano solo alle risorse modificate.

Per le nuove risorse, non è CloudFormation possibile determinare il valore di alcuni campi finché non si esegue il set di modifiche. Ad esempio, CloudFormation non fornisce la configurazione fisica IDs del gruppo Auto Scaling e avvia perché non esistono ancora. CloudFormation crea le nuove risorse quando si esegue il set di modifiche.

## Visualizzare le modifiche a livello di proprietà
<a name="using-cfn-updating-stacks-changesets-samples-property-level-change-set"></a>

L'esempio seguente mostra le modifiche a livello di `Tag` proprietà alla proprietà di un'istanza Amazon EC2 . I tag `Value` e `Key` saranno modificati in `Test`.

```
"ChangeSetName": "SampleChangeSet",
    "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/38d91d27-798d-4736-9bf1-fb7c46207807",
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleEc2Template/68edcdc0-f6b6-11ee-966c-126d572cdd11",
    "StackName": "SampleEc2Template",
    "Description": "A sample EC2 instance template for testing change sets.",
    "Parameters": [
        {
            "ParameterKey": "KeyPairName",
            "ParameterValue": "BatchTest"
        },
        {
            "ParameterKey": "Purpose",
            "ParameterValue": "testing"
        },
        {
            "ParameterKey": "InstanceType",
            "ParameterValue": "t2.micro"
        }
    ],
    "CreationTime": "2024-04-09T21:29:10.759000+00:00",
    "ExecutionStatus": "AVAILABLE",
    "Status": "CREATE_COMPLETE",
    "StatusReason": null,
    "NotificationARNs": [],
    "RollbackConfiguration": {
:...skipping...
{
    "Changes": [
        {
            "Type": "Resource",
            "ResourceChange": {
                "Action": "Modify",
                "LogicalResourceId": "MyEC2Instance",
                "PhysicalResourceId": "i-0cc7856a36315e62b",
                "ResourceType": "AWS::EC2::Instance",
                "Replacement": "False",
                "Scope": [
                    "Tags"
                ],
                "Details": [
                    {
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never",
                            "Path": "/Properties/Tags/0/Value",
                            "BeforeValue": "testing",
                            "AfterValue": "Test",
                            "AttributeChangeType": "Modify"
                        },
                        "Evaluation": "Static",
                        "ChangeSource": "DirectModification"
                    },
                    {
                        "Target": {
                            "Attribute": "Tags",
                            "RequiresRecreation": "Never",
                            "Path": "/Properties/Tags/0/Key",
                            "BeforeValue": "Purpose",
                            "AfterValue": "Test",
                            "AttributeChangeType": "Modify"
                        },
                        "Evaluation": "Static",
                        "ChangeSource": "DirectModification"
                    }
                ],
                "BeforeContext": "{\"Properties\":{\"KeyName\":\"BatchTest\",\"ImageId\":\"ami-8fcee4e5\",\"InstanceType\":\"t2.micro\",\"Tags\":[{\"Value\":\"testing\",\"Key\":\"Purpose\"}]}}",
                "AfterContext": "{\"Properties\":{\"KeyName\":\"BatchTest\",\"ImageId\":\"ami-8fcee4e5\",\"InstanceType\":\"t2.micro\",\"Tags\":[{\"Value\":\"Test\",\"Key\":\"Test\"}]}}"
            }
        }
    ]
```

La struttura `Details` mostra i valori di `Key` e `Value` prima dell’esecuzione del set di modifiche e quali saranno i nuovi valori dopo l’esecuzione.