Exemplarische Änderungssätze - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Exemplarische Änderungssätze

Dieser Abschnitt enthält Beispiele für die Änderungssets, die für allgemeine Stack-Änderungen erstellt werden CloudFormation könnten. Sie zeigen, wie Sie eine Vorlage direkt bearbeiten, ein einzelnes Eingabeparameter modifizieren, Ressourcenantworten planen (Austausch), um zu verhindern, dass Sie Daten verlieren, die nicht gesichert wurden, oder dass Anwendungen unterbrochen werden, die in Ihrem Stapel ausgeführt werden, und wie Sie Ressourcen hinzufügen oder entfernen. Um zu veranschaulichen, wie Änderungssätze funktionieren, führen wir Sie schrittweise durch die eingereichten Änderungen und besprechen den Änderungssatz, der sich daraus ergibt. Da jedes Beispiel auf dem vorherigen Beispiel aufbaut und voraussetzt, dass Sie das vorherige Beispiel verstanden haben, empfehlen wir Ihnen, die Beispiele der Reihe nach zu lesen. Eine Beschreibung der einzelnen Felder in einem Änderungssatz finden Sie unter Datentyp ändern im AWS CloudFormation APIReferenz.

Sie können die Konsole benutzen, AWS CLI, oder CloudFormation DescribeChangeSetAPIVorgang zum Anzeigen von Änderungssatzdetails.

Wir haben die folgenden Änderungssätze mit folgender Beispielvorlage aus einem Stack generiert:

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

Direktes Bearbeiten einer Vorlage

Wenn Sie Ressourcen in der Vorlage des Stacks direkt ändern, um einen Änderungssatz zu generieren, CloudFormation wird die Änderung als direkte Änderung klassifiziert und nicht als Änderungen, die durch einen aktualisierten Parameterwert ausgelöst werden. Der folgende Änderungssatz, durch den der i-1abc23d4 Instance ein neuer Tag hinzugefügt wurde, ist ein Beispiel für eine direkte Änderung. Alle anderen Eingabewerte, wie die Parameterwerte und Fähigkeiten, bleiben unverändert, sodass wir uns auf die Changes-Struktur konzentrieren.

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

In der Changes-Struktur gibt es nur eine ResourceChange-Struktur. Diese Struktur beschreibt Informationen wie den Typ der Ressource, die geändert CloudFormation wird, die auszuführende Aktion, die ID der Ressource, den Umfang der Änderung und ob die Änderung ersetzt CloudFormation werden muss (wobei eine neue Ressource CloudFormation erstellt und dann die alte gelöscht wird). In diesem Beispiel gibt der Änderungssatz an, dass das Tags Attribut der i-1abc23d4 EC2 Instanz geändert CloudFormation wird und dass die Instanz nicht ersetzt werden muss.

CloudFormation Kennzeichnet diese Änderung in der Details Struktur als direkte Änderung, bei der die Instanz niemals neu erstellt (ersetzt) werden muss. Sie können diese Änderung getrost ausführen, da Sie wissen, dass dadurch die CloudFormation Instanz nicht ersetzt wird.

CloudFormation zeigt diese Änderung als Static Evaluierung an. Eine statische Auswertung bedeutet, dass der Wert des Tags bestimmt werden CloudFormation kann, bevor der Änderungssatz ausgeführt wird. In einigen Fällen CloudFormation kann ein Wert erst bestimmt werden, nachdem Sie einen Änderungssatz ausgeführt haben. CloudFormationkennzeichnet diese Änderungen als Dynamic Bewertungen. Wenn Sie beispielsweise auf eine aktualisierte Ressource verweisen, die unter bestimmten Bedingungen ersetzt wurde, CloudFormation können Sie nicht feststellen, ob sich der Verweis auf die aktualisierte Ressource ändern wird.

Einen Eingabeparameterwert ändern

Wenn Sie einen Eingabeparameterwert ändern, CloudFormation generiert zwei Änderungen für jede Ressource, die den aktualisierten Parameterwert verwendet. In diesem Beispiel heben wir hervor, wie diese Änderungen aussehen und auf welche Informationen Sie sich konzentrieren sollten. Das folgende Beispiel wurde nur durch Änderung des Werts des Purpose-Eingabeparameters erzeugt.

Der Purpose Parameter gibt einen Tag-Schlüsselwert für die EC2 Instanz an. In diesem Beispiel wurde der Parameterwert von testing in production geändert. Der neue Wert wird in der Parameters-Struktur angezeigt.

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

Die Changes Struktur funktioniert ähnlich wie im Direktes Bearbeiten einer Vorlage Beispiel. Es gibt nur eine ResourceChange Struktur; sie beschreibt eine Änderung des Tags Attributs der i-1abc23d4 EC2 Instanz.

Doch in der Details-Struktur zeigt der Änderungssatz zwei Änderungen für das Tags-Attribut, auch wenn nur ein einzelner Parameterwert geändert wurde. Ressourcen, die auf einen geänderten Parameterwert verweisen (mithilfe der intrinsischen Ref-Funktion) führen immer zu zwei Änderungen: eine mit einer Dynamic-Bewertung und eine andere mit einer Static-Bewertung. Sie können diese Arten von Änderungen sehen, indem Sie die folgenden Felder anzeigen:

  • Die Änderung der Static-Bewertung sehen Sie im Feld ChangeSource. In diesem Beispiel entspricht das ChangeSource-Feld der ParameterReference. Das bedeutet, dass diese Änderung das Ergebnis eines aktualisierten Parameterreferenzwerts ist. Der Änderungssatz muss eine ähnliche Dynamic-Bewertungsänderung enthalten.

  • Sie finden die passende Dynamic-Bewertung, indem Sie die Target-Struktur für beide Änderungen vergleichen, die dieselben Informationen enthalten wird. In diesem Beispiel enthalten die Target-Strukturen für beide Änderungen dieselben Werte für die Felder Attribute und RequireRecreation.

Konzentrieren Sie sich für diese Art von Änderungen auf die statische Bewertung, die Ihnen die genauesten Informationen zur Änderung liefert. In diesem Beispiel zeigt die statische Bewertung, dass die Änderung das Ergebnis der Änderung eines Parameterreferenzwerts (ParameterReference) ist. Der exakte Parameter, der geändert wurde, wird im Feld CauseEntity (der Purpose-Parameter) angezeigt.

Ermitteln des Werts des Ersatzfelds

Das Replacement Feld in einer ResourceChange Struktur gibt an, ob CloudFormation die Ressource neu erstellt werden soll. Die Planung einer Ressourcen-Neuerstellung (Ersatz) verhindert den Verlust von Daten, die nicht gesichert wurden, oder die Unterbrechung von Anwendungen, die in Ihrem Stack ausgeführt werden.

Der Wert im Feld Replacement hängt davon ab, ob eine Änderung einen Ersatz erfordert. Dies wird durch das Feld RequiresRecreation in der Target-Struktur einer Änderung angezeigt. Wenn beispielsweise der Wert des RequiresRecreation-Felds Never ist, wird der Wert des Replacement-Felds False. Wenn es jedoch mehrere Änderungen an einer einzelnen Ressource gibt und jede Änderung einen anderen Wert für das RequiresRecreation Feld hat, wird die Ressource CloudFormation aktualisiert, wobei das aufdringlichste Verhalten angewendet wird. Mit anderen Worten, wenn nur eine der vielen Änderungen ersetzt CloudFormation werden muss, muss die Ressource ersetzt werden und setzt das Replacement Feld daher aufTrue.

Der folgende Änderungssatz wurde generiert, indem die Werte für jeden Parameter (PurposeInstanceType, undKeyPairName) geändert wurden, die alle von der EC2 Instanz verwendet werden. Aufgrund dieser Änderungen muss die Instanz ersetzt CloudFormation werden, da das Replacement Feld gleich istTrue.

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

Identifizieren Sie die Änderung, durch welche die Ressource ersetzt werden muss, indem Sie jede einzelne Änderung (die statischen Bewertungen in der Details-Struktur) anzeigen. In diesem Beispiel hat jede Änderung einen anderen Wert für das RequireRecreation Feld, aber die Änderung an der KeyName Eigenschaft hat das aufdringlichste Aktualisierungsverhalten und erfordert immer eine Neuerstellung. CloudFormation ersetzt die Instanz, weil der Schlüsselname geändert wurde.

Wäre der Schlüsselname unverändert geblieben, hätte die Änderung an der Eigenschaft InstanceType das Aktualisierungsverhalten mit den größten Auswirkungen gehabt (Conditionally), und das Feld Replacement wäre Conditionally. Informationen zu den Bedingungen, unter denen die Instanz CloudFormation ersetzt wird, finden Sie im Aktualisierungsverhalten der InstanceType Eigenschaft AWS::EC2::Instance-Ressourcentyp.

Hinzufügen und Entfernen von Ressourcen

Das folgende Beispiel wurde generiert, indem eine geänderte Vorlage eingereicht wurde, mit der die EC2 Instanz entfernt und eine Auto Scaling Scaling-Gruppe sowie eine Startkonfiguration hinzugefügt wurden.

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

In der Struktur Changes gibt es drei ResourceChange-Strukturen, eine für jede Ressource. Für jede Ressource gibt das Action Feld an, ob die Ressource CloudFormation hinzugefügt oder entfernt wird. Die Felder Scope und Details sind leer, da sie nur für geänderte Ressourcen gelten.

Bei neuen Ressourcen CloudFormation kann der Wert einiger Felder erst bestimmt werden, wenn Sie den Änderungssatz ausgeführt haben. Stellt beispielsweise CloudFormation nicht die physischen Daten IDs der Auto Scaling Scaling-Gruppe und der Startkonfiguration bereit, da sie noch nicht existieren. CloudFormation erstellt die neuen Ressourcen, wenn Sie den Änderungssatz ausführen.

Änderungen auf Eigenschaftsebene anzeigen

Das folgende Beispiel zeigt Änderungen auf Eigenschaftsebene an der Tag Eigenschaft einer EC2 Amazon-Instance. Das Tag Value und Key wird geändert zu. 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\"}]}}" } } ]

Die Details Struktur zeigt die Werte für Key und Value vor der Ausführung des Änderungssatzes und ihre Werte nach der Ausführung des Änderungssatzes.