Esempio di set di modifiche - AWS CloudFormation

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

Esempio di set di modifiche

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 la sezione Modifica del tipo di dati nel AWS CloudFormation APIriferimento.

È possibile utilizzare la console o l' AWS CLI CloudFormation DescribeChangeSetAPIoperazione per visualizzare i dettagli del set di modifiche.

Abbiamo generato ciascuno dei seguenti set di modifiche da uno stack con il seguente modello di esempio:

{ "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

Quando modifichi direttamente le risorse nel modello dello stack per generare un set di modifiche, CloudFormation classifica la modifica come modifica diretta, anziché come modifiche avviate 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/SampleStack/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": "SampleStack", "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à modificata, 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'Tagsattributo dell'i-1abc23d4EC2istanza 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.

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'EC2istanza. 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/SampleStack/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": "SampleStack", "NotificationARNs": [], "ChangeSetId": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000" }

La Changes struttura funziona in modo simile a quello illustrato nell'Modifica diretta di un modelloesempio. Esiste solo una ResourceChange struttura, che descrive una modifica all'Tagsattributo dell'i-1abc23d4EC2istanza.

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

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 tante modifiche richiede una sostituzione, CloudFormation deve sostituire la risorsa e, quindi, imposta il Replacement campo suTrue.

Il seguente set di modifiche è stato generato modificando i valori di ogni parametro (PurposeInstanceType, eKeyPairName), tutti utilizzati dall'EC2istanza. Con queste modifiche, CloudFormation sarà necessario sostituire l'istanza perché il Replacement campo è uguale aTrue.

{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/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": "SampleStack", "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 InstanceTypeproprietà del tipo di AWS::EC2::Instancerisorsa.

Aggiunta e rimozione di risorse

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

{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/SampleStack/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": "SampleStack", "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.

Visualizzazione delle modifiche a livello di proprietà

L'esempio seguente mostra le modifiche a livello di Tag proprietà alla proprietà di un'istanza AmazonEC2. Il tag Value e Key verrà modificato 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 Details struttura mostra i valori per Key e Value prima dell'esecuzione del set di modifiche e quali saranno dopo l'esecuzione del set di modifiche.