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.
Verschieben von Ressourcen zwischen Stacks
Mithilfe der resource import
-Funktion können Sie Ressourcen zwischen Stacks verschieben oder Stacks umgestalten. Sie müssen zuerst eine Retain
-Löschrichtlinie zu der Ressource hinzufügen, die Sie verschieben möchten, um sicherzustellen, dass die Ressource erhalten bleibt, wenn Sie sie aus dem Quell-Stack entfernen und in den Ziel-Stack importieren.
Wenn Sie mit dem Importieren noch nicht vertraut sind, empfehlen wir Ihnen, zunächst die einführenden Informationen im Einbindung vorhandener Ressourcen in das CloudFormation Management Thema zu lesen.
Wichtig
Nicht alle Ressourcen unterstützen Importvorgänge. Weitere Informationen finden Sie unter Ressourcen, die Importvorgänge unterstützen bevor Sie eine Ressource aus dem Stack entfernen. Wenn Sie eine Ressource entfernen, die keine Importvorgänge aus dem Stack unterstützt, können Sie die Ressource nicht in einen anderen Stack importieren oder sie wieder in den Quell-Stack bringen.
Refaktorieren Sie einen Stack mit dem AWS Management Console
-
Geben Sie in der Quellvorlage a
Retain
DeletionPolicyfür die Ressource an, die Sie verschieben möchten.In der folgenden Beispiel-Quellvorlage ist
Games
das Ziel dieser Umgestaltung.Beispiel JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "GamesTable": { "Type": "AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties": { "TableName": "Games", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }
-
Öffnen Sie die AWS CloudFormation Konsole, um ein Stack-Update durchzuführen und die Löschrichtlinie anzuwenden.
-
Wählen Sie auf der Seite Stacks (Stapel) bei ausgewähltem Stack Update (Aktualisieren) aus.
-
Wählen Sie unter Vorlage vorbereiten die Option Aktuelle Vorlage ersetzen aus.
-
Geben Sie unter Vorlage angeben die aktualisierte Quellvorlage mit dem
DeletionPolicy
-Attribut fürGamesTable
ein und wählen Sie dann Weiter aus.-
Wählen Sie Amazon S3-URL aus und geben Sie dann im Textfeld die URL zur aktualisierten Quellvorlage an.
-
Wählen Sie Vorlagendatei hochladen aus und suchen Sie dann nach der aktualisierten Quellvorlagendatei.
-
-
Auf der Seite Stack-Details angeben sind keine Änderungen erforderlich. Wählen Sie Weiter aus.
-
Auf der Seite Stack-Optionen konfigurieren sind keine Änderungen erforderlich. Wählen Sie Weiter aus.
-
Überprüfen Sie auf der
SourceStackName
Seite „Überprüfen“ Ihre Änderungen. Wenn Ihre Vorlage IAM-Ressourcen enthält, wählen Sie I acknowledge that this template may create IAM resources, um anzugeben, dass Sie IAM-Ressourcen in der Vorlage verwenden möchten. Weitere Informationen zum Verwenden von IAM-Ressourcen in Vorlagen finden Sie unter Steuerung des Zugriffs mit AWS Identity and Access Management. Aktualisieren Sie dann entweder Ihren Quell-Stack, indem Sie einen Änderungssatz erstellen, oder aktualisieren Sie Ihren Quell-Stack direkt.
-
-
Entfernen Sie die Ressource, die zugehörigen Parameter und Ausgaben aus der Quellvorlage und fügen Sie sie dann der Zielvorlage hinzu.
Die Quellvorlage sieht nun wie folgt aus.
Beispiel JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } } } }
Die folgende Beispiel-Zielvorlage enthält derzeit die
PlayersTable
-Ressource und enthält nun auchGamesTable
.Beispiel JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "PlayersTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "TableName": "Players", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } }, "GamesTable": { "Type": "AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties": { "TableName": "Games", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }
-
Wiederholen Sie die Schritte 2–3, um den Quell-Stack erneut zu aktualisieren, um dieses Mal die Zielressource aus dem Stack zu löschen.
-
Führen Sie einen Importvorgang aus, der
GamesTable
dem Ziel-Stack hinzufügt.-
Wählen Sie auf der Seite Stacks mit ausgewähltem übergeordneten Stack Stack-Aktionen und dann Ressourcen in Stack importieren aus.
-
Auf der Seite Importübersicht finden Sie eine Liste der Dinge, die Sie während dieses Vorgangs angeben müssen. Wählen Sie anschließend Weiter.
-
Führen Sie auf der Seite Vorlage angeben eine der folgenden Aktionen aus und wählen Sie dann Weiter.
-
Wählen Sie Amazon S3-URL aus und geben Sie dann im Textfeld eine URL an.
-
Wählen Sie Vorlagendatei hochladen aus und suchen Sie dann nach einer Datei, die hochgeladen werden soll.
-
-
Identifizieren Sie auf der Seite Ressourcen identifizieren die Ressource, die Sie verschieben möchten (in diesem Beispiel
GamesTable
). Weitere Informationen finden Sie unter Ressourcen-Identifikatoren.-
Wählen Sie unter Bezeichnereigenschaft den Typ des Ressourcenbezeichners aus. Beispielsweise kann eine
AWS::DynamoDB::Table
-Ressource mit derTableName
-Eigenschaft identifiziert werden. -
Geben Sie unter Bezeichnerwert den tatsächlichen Eigenschaftswert ein. z. B.
.GamesTables
-
Wählen Sie Weiter aus.
-
-
Ändern Sie auf der Seite Stack-Details angeben alle Parameter und wählen Sie dann Weiter aus. Dadurch wird automatisch ein Änderungssatz erstellt.
Wichtig
Der Importvorgang schlägt fehl, wenn Sie vorhandene Parameter ändern, die einen Erstellungs-, Aktualisierungs- oder Löschvorgang initiieren.
-
Vergewissern Sie sich auf der
TargetStackName
Seite Überprüfen, dass die richtige Ressource importiert wurde, und wählen Sie dann Ressourcen importieren aus. Dadurch wird der im letzten Schritt erstellte Änderungssatz automatisch ausgeführt. Alle Tags auf Stack-Ebene werden zu diesem Zeitpunkt auf importierte Ressourcen angewendet. -
Der Bereich Ereignisse der Seite Stack-Details für Ihren übergeordneten Stack wird angezeigt.
Anmerkung
Es ist nicht erforderlich, die Abweichungserkennung für den übergeordneten Stack nach diesem Importvorgang auszuführen, da die
AWS::CloudFormation::Stack
-Ressource bereits von AWS CloudFormation verwaltet wird.
-
Refaktorieren Sie einen Stack mit dem AWS CLI
-
Geben Sie in der Quellvorlage a
Retain
DeletionPolicyfür die Ressource an, die Sie verschieben möchten.In der folgenden Beispiel-Quellvorlage ist
GamesTable
das Ziel dieser Umgestaltung.Beispiel JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "GamesTable": { "Type": "AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties": { "TableName": "Games", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }
-
Aktualisieren Sie den Quell-Stack, um die Löschrichtlinie auf die Ressource anzuwenden.
$
aws cloudformation update-stack --stack-nameSourceStackName
-
Entfernen Sie die Ressource, die zugehörigen Parameter und Ausgaben aus der Quellvorlage und fügen Sie sie dann der Zielvorlage hinzu.
Die Quellvorlage sieht nun wie folgt aus.
Beispiel JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } } } }
Die folgende Beispiel-Zielvorlage enthält derzeit die
PlayersTable
-Ressource und enthält nun auchGamesTable
.Beispiel JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Import test", "Resources": { "PlayersTable": { "Type": "AWS::DynamoDB::Table", "Properties": { "TableName": "Players", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } }, "GamesTable": { "Type": "AWS::DynamoDB::Table", "DeletionPolicy": "Retain", "Properties": { "TableName": "Games", "AttributeDefinitions": [ { "AttributeName": "key", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "key", "KeyType": "HASH" } ], "ProvisionedThroughput": { "ReadCapacityUnits": 5, "WriteCapacityUnits": 1 } } } } }
-
Aktualisieren Sie den Quell-Stack, um die
GamesTable
-Ressource und die zugehörigen Parameter und Ausgaben aus dem Stack zu löschen.$
aws cloudformation update-stack --stack-nameSourceStackName
-
Stellen Sie eine Liste der tatsächlich zu importierenden Ressourcen und ihrer eindeutigen Bezeichner im folgenden JSON-Zeichenfolgenformat zusammen. Weitere Informationen finden Sie unter Ressourcen-Identifikatoren.
[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
Alternativ können Sie die JSON-formatierten Parameter in einer Konfigurationsdatei angeben.
Um beispielsweise zu importieren
GamesTable
, könnten Sie eineResourcesToImportTXT-Datei
erstellen, die die folgende Konfiguration enthält.[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
-
Um einen Änderungssatz zu erstellen, verwenden Sie den folgenden create-change-set Befehl und ersetzen Sie den Platzhaltertext. Geben Sie für die Option
--change-set-type
einen Wert vonIMPORT
an. Ersetzen Sie für--resources-to-import
diese Option die JSON-Beispielzeichenfolge durch die tatsächliche JSON-Zeichenfolge, die Sie gerade erstellt haben.$
aws cloudformation create-change-set \ --stack-nameTargetStackName
--change-set-nameImportChangeSet
\ --change-set-typeIMPORT
\ --template-bodyfile://TemplateToImport.json
\ --resources-to-import "'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'
"Anmerkung
--resources-to-import
unterstützt Inline-YAML nicht. Die Anforderungen für das Umgehen von Anführungszeichen in der JSON-Zeichenfolge variieren je nach Terminal. Weitere Informationen finden Sie im Benutzerhandbuch unter Verwenden von Anführungszeichen innerhalb von Zeichenketten.AWS Command Line InterfaceAlternativ können Sie eine Datei-URL als Eingabe für die
--resources-to-import
Option verwenden, wie im folgenden Beispiel gezeigt.--resources-to-import
file://ResourcesToImport.txt
-
Überprüfen Sie den Änderungssatz, um sicherzustellen, dass die richtige Ressource in den Ziel-Stack importiert wird.
$
aws cloudformation describe-change-set \ --change-set-nameImportChangeSet
-
Verwenden Sie den folgenden execute-change-set Befehl und ersetzen Sie den Platzhaltertext, um den Änderungssatz zu initiieren und die Ressource zu importieren. Alle Tags auf Stack-Ebene werden zu diesem Zeitpunkt auf importierte Ressourcen angewendet. Nach erfolgreichem Abschluss des Vorgangs
(IMPORT_COMPLETE)
wird die Ressource erfolgreich importiert.$
aws cloudformation execute-change-set \ --change-set-nameImportChangeSet
--stack-nameTargetStackName
Anmerkung
Es ist nicht erforderlich, die Abweichungserkennung für den Ziel-Stack nach diesem Importvorgang auszuführen, da die Ressource bereits von AWS CloudFormation verwaltet wird.