Verschachteln eines vorhandenen Stacks - 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.

Verschachteln eines vorhandenen Stacks

Verwenden Sie das resource import-Feature, um einen vorhandenen Stack in einem anderen vorhandenen Stack zu verschachteln. Verschachtelte Stacks sind gängige Komponenten, die Sie in anderen Vorlagen deklarieren und referenzieren. Auf diese Weise können Sie das Kopieren und Einfügen derselben Konfigurationen in Ihre Vorlagen vermeiden und Stack-Aktualisierungen vereinfachen. Wenn Sie über eine Vorlage für eine gängige Komponente verfügen, können Sie die AWS::CloudFormation::Stack-Ressource verwenden, um aus einer anderen Vorlage auf diese Vorlage zu verweisen. Weitere Hinweise zu verschachtelten Stacks finden Sie unter Aufteilung einer Vorlage in wiederverwendbare Teile mit verschachtelten Stapeln.

CloudFormation unterstützt nur eine Ebene der Verschachtelung mit resource import. Dies bedeutet, dass Sie keinen Stack in einen untergeordneten Stack importieren oder einen Stack importieren können, der untergeordnete Stacks enthält.

Wenn Sie mit dem Importieren noch nicht vertraut sind, empfehlen wir Ihnen, zunächst die einführenden Informationen im Thema Importieren Sie AWS-Ressourcen manuell in einen CloudFormation-Stapel durchzulesen.

Validierung des Imports von verschachtelten Stacks

CloudFormation führt während eines Importvorgangs für verschachtelte Stacks die folgenden Validierungen durch.

  • Die verschachtelte AWS::CloudFormation::Stack-Definition in der übergeordneten Stack-Vorlage entspricht der tatsächlichen geschachtelten Stack-Vorlage.

  • Die Tags für die verschachtelte AWS::CloudFormation::Stack-Definition in der übergeordneten Stack-Vorlage entsprechen den Tags für die tatsächliche verschachtelte Stack-Ressource.

Verschachteln eines vorhandenen Stacks mithilfe der AWS-Managementkonsole

  1. Fügen Sie die AWS::CloudFormation::Stack-Ressource der übergeordneten Stack-Vorlage mit einer Retain-DeletionPolicy hinzu. Im folgenden Beispiel ist die übergeordnete Stapelvorlage MyNestedStack das Ziel des Imports.

    JSON

    { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "MyNestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template", "Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey" } } } } }

    YAML

    AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 MyNestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >- https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template Parameters: InstanceType: t1.micro KeyName: mykey
  2. Öffnen Sie die CloudFormation-Konsole.

  3. Wählen Sie auf der Seite Stacks mit ausgewähltem übergeordneten Stack Stack-Aktionen und dann Ressourcen in Stack importieren aus.

    Die Option „Ressourcen in Stack importieren“ in der Konsole.
  4. 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.

  5. Geben Sie auf der Seite Vorlage angeben die aktualisierte übergeordnete Vorlage mit einer der folgenden Methoden an und wählen Sie dann Weiter aus.

    • Wählen Sie Amazon S3-URL aus und geben Sie dann die URL für Ihre Vorlage im Textfeld an.

    • Wählen Sie Vorlagendatei hochladen aus und suchen Sie dann nach Ihrer Vorlage.

  6. Identifizieren Sie auf der Seite Ressourcen identifizieren die AWS::CloudFormation::Stack-Ressource.

    1. Wählen Sie unter Bezeichnereigenschaft den Typ des Ressourcenbezeichners aus. Beispielsweise kann eine AWS::CloudFormation::Stack-Ressource mit der StackId-Eigenschaft identifiziert werden.

    2. Geben Sie unter Identifikatorwertden ARN des Stapels ein, den Sie importieren. Beispiel, arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10.

      Die Seite „Ressourcen identifizieren“ in der Konsole.
    3. Wählen Sie Weiter aus.

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

  8. Bestätigen Sie auf der Seite Überprüfen MeinParentStack, dass die richtige Ressource importiert wird, und wählen Sie dann Ressourcen importieren. Dadurch wird der im letzten Schritt erstellte Änderungssatz automatisch ausgeführt. Alle Tags auf Stack-Ebene werden zu diesem Zeitpunkt auf importierte Ressourcen angewendet.

  9. Der Bereich Ereignisse der Seite Stack-Details für Ihren übergeordneten Stack wird angezeigt.

    Die Registerkarte „Ereignisse“ in der Konsole.
    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 CloudFormation verwaltet wurde.

Verschachteln eines vorhandenen Stacks mithilfe der AWS CLI

  1. Fügen Sie die AWS::CloudFormation::Stack-Ressource der übergeordneten Stack-Vorlage mit einer Retain-DeletionPolicy hinzu. Im folgenden Beispiel einer übergeordneten Vorlage ist MyNestedStack das Ziel des Imports.

    JSON

    { "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "ServiceTable":{ "Type":"AWS::DynamoDB::Table", "Properties":{ "TableName":"Service", "AttributeDefinitions":[ { "AttributeName":"key", "AttributeType":"S" } ], "KeySchema":[ { "AttributeName":"key", "KeyType":"HASH" } ], "ProvisionedThroughput":{ "ReadCapacityUnits":5, "WriteCapacityUnits":1 } } }, "MyNestedStack" : { "Type" : "AWS::CloudFormation::Stack", "DeletionPolicy": "Retain", "Properties" : { "TemplateURL" : "https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template", "Parameters" : { "InstanceType" : "t1.micro", "KeyName" : "mykey" } } } } }

    YAML

    AWSTemplateFormatVersion: 2010-09-09 Resources: ServiceTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: Service AttributeDefinitions: - AttributeName: key AttributeType: S KeySchema: - AttributeName: key KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 5 WriteCapacityUnits: 1 MyNestedStack: Type: 'AWS::CloudFormation::Stack' DeletionPolicy: Retain Properties: TemplateURL: >- https://s3.amazonaws.com/cloudformation-templates-us-east-2/EC2ChooseAMI.template Parameters: InstanceType: t1.micro KeyName: mykey
  2. Stellen Sie eine JSON-Zeichenkette wie im folgenden Beispiel zusammen, mit diesen Änderungen:

    • Ersetzen Sie MyNestedStack durch die logische ID der Zielressource, wie in der Vorlage angegeben.

    • Ersetzen Sie arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10 durch den ARN des Stacks, den Sie importieren möchten.

    [{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-east-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]

    Alternativ können Sie die Parameter auch in einer Konfigurationsdatei angeben.

    Um zum Beispiel MyNestedStackzu importieren, könnten Sie eine ResourcesToImport.txt-Datei erstellen, die die folgende Konfiguration enthält.

    JSON

    [ { "ResourceType":"AWS::CloudFormation::Stack", "LogicalResourceId":"MyNestedStack", "ResourceIdentifier": { "StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10" } } ]

    YAML

    ResourceType: 'AWS::CloudFormation::Stack' LogicalResourceId: MyNestedStack ResourceIdentifier: StackId: >- arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10
  3. Um einen Änderungssatz zu erstellen, verwenden Sie den folgenden Befehl create-change-set und ersetzen den Platzhaltertext. Geben Sie für die Option --change-set-type einen Wert von IMPORT an. Ersetzen Sie bei der Option --resources-to-import die Beispiel-JSON-Zeichenfolge durch die tatsächliche JSON-Zeichenfolge, die Sie gerade erstellt haben.

    aws cloudformation create-change-set \ --stack-name MyParentStack --change-set-name ImportChangeSet \ --change-set-type IMPORT \ --template-body file://TemplateToImport.json \ --resources-to-import '[{"ResourceType":"AWS::CloudFormation::Stack","LogicalResourceId":"MyNestedStack","ResourceIdentifier":{"StackId":"arn:aws:cloudformation:us-west-2:12345678910:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10"}}]'
    Anmerkung

    --resources-to-import unterstützt kein Inline-YAML. Die Anforderungen für das Escapen von Anführungszeichen in der JSON-Zeichenfolge variieren je nach Ihrem Terminal. Weitere Informationen finden Sie unter Anführungszeichen in Zeichenketten verwenden im AWS Command Line Interface Benutzerhandbuch.

    Alternativ können Sie auch eine Datei-URL als Eingabe für die Option --resources-to-import verwenden, wie im folgenden Beispiel gezeigt.

    --resources-to-import file://ResourcesToImport.txt

    Wenn dieser Befehl erfolgreich ist, erhalten Sie die folgende Beispielausgabe.

    { "Id": "arn:aws:cloudformation:us-west-2:12345678910:changeSet/ImportChangeSet/8ad75b3f-665f-46f6-a200-0b4727a9442e", "StackId": "arn:aws:cloudformation:us-west-2:12345678910:stack/MyParentStack/4e345b70-1281-11ef-b027-027366d8e82b" }
  4. Überprüfen Sie den Änderungssatz, um sicherzustellen, dass der richtige Stack importiert wird.

    aws cloudformation describe-change-set --change-set-name ImportChangeSet
  5. Um den Änderungssatz zu initiieren und den Stapel in den übergeordneten Quellstapel zu importieren, verwenden Sie den folgenden execute-change-set-Befehl und ersetzen den Platzhaltertext. Alle Tags auf Stack-Ebene werden zu diesem Zeitpunkt auf importierte Ressourcen angewendet. Nach erfolgreichem Abschluss des Importvorgangs (IMPORT_COMPLETE) ist der Stack erfolgreich verschachtelt.

    aws cloudformation execute-change-set --change-set-name ImportChangeSet
    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 CloudFormation verwaltet wird.