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
{
"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 FeldChangeSource
. In diesem Beispiel entspricht dasChangeSource
-Feld derParameterReference
. Das bedeutet, dass diese Änderung das Ergebnis eines aktualisierten Parameterreferenzwerts ist. Der Änderungssatz muss eine ähnlicheDynamic
-Bewertungsänderung enthalten. -
Sie finden die passende
Dynamic
-Bewertung, indem Sie dieTarget
-Struktur für beide Änderungen vergleichen, die dieselben Informationen enthalten wird. In diesem Beispiel enthalten dieTarget
-Strukturen für beide Änderungen dieselben Werte für die FelderAttribute
undRequireRecreation
.
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 (Purpose
InstanceType
, 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.