Stapel-Refactoring - 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.

Stapel-Refactoring

Mit Stack-Refactoring können Sie Ressourcen in Ihren CloudFormation Stacks reorganisieren und gleichzeitig die vorhandenen Ressourceneigenschaften und -daten beibehalten. Sie können Ressourcen zwischen Stapeln verschieben, große Stapel in kleinere aufteilen oder mehrere Stapel zu einem kombinieren.

So funktioniert das Stack-Refactoring

Das Refactoring von Stacks umfasst diese Phasen:

  1. Beurteilen Sie Ihre aktuelle Infrastruktur — Überprüfen Sie Ihre vorhandenen CloudFormation Stacks und Ressourcen, um Möglichkeiten für das Stack-Refactoring zu identifizieren.

  2. Planen Sie Ihren Refactor- Definieren Sie, wie die Ressourcen organisiert werden sollen. Berücksichtigen Sie Ihre Abhängigkeiten, Namenskonventionen und operativen Grenzen. Diese können sich auf die spätere Validierung auswirken. CloudFormation

  3. Bestimmen Sie die Zielstapel- Entscheiden Sie, in welche Stapel Sie die Ressourcen umstrukturieren wollen. Sie können Ressourcen zwischen mindestens 2 Stacks (mithilfe der Konsole) und maximal 5 Stacks (mithilfe der AWS CLI) verschieben. Ressourcen können zwischen verschachtelten Stapeln verschoben werden.

  4. Aktualisieren Sie Ihre Vorlagen — Passen Sie Ihre CloudFormation Vorlagen an die geplante Änderung an, z. B. das Verschieben von Ressourcendefinitionen zwischen Vorlagen. IDs Während dieses Vorgangs können Sie Logical umbenennen.

  5. Erstellen Sie den Stack-Refactor- Geben Sie eine Liste von Stack-Namen und-Vorlagen an, die Sie refactorieren möchten.

  6. Überprüfen Sie die Auswirkungen des Refactorings und lösen Sie etwaige Konflikte — CloudFormation validiert die von Ihnen bereitgestellten Vorlagen und prüft stapelübergreifende Abhängigkeiten, Ressourcentypen mit Tag-Aktualisierungsproblemen und Konflikte bei logischen IDs von Ressourcen.

    Wenn die Validierung erfolgreich ist, CloudFormation wird eine Vorschau der Refactor-Aktionen generiert, die während der Ausführung ausgeführt werden.

    Wenn die Validierung fehlschlägt, beheben Sie die festgestellten Probleme und versuchen Sie es erneut. Bei Konflikten stellen Sie eine logische ID-Zuordnung der Ressource bereit, die die Quelle und das Ziel der konfligierenden Ressourcen angibt.

  7. Führen Sie den Refactor aus- Nachdem Sie sich vergewissert haben, dass die Änderungen mit Ihren Refactoring-Zielen übereinstimmen, schließen Sie den Stack-Refactor ab.

  8. Monitor- Verfolgen Sie den Ausführungsstatus, um sicherzustellen, dass der Vorgang erfolgreich abgeschlossen wird.

Überlegungen zum Stack-Refactoring

Wenn Sie Ihre Stacks umstrukturieren, sollten Sie Folgendes beachten:

  • Das Stack-Refactoring beschränkt sich auf die Reorganisation vorhandener Ressourcen. Während des Refactorings können Sie keine Ressourcen erstellen oder löschen, Ressourcenkonfigurationen ändern oder neue Parameter, Bedingungen oder Zuordnungen ändern oder hinzufügen. Um diese Änderungen vorzunehmen, aktualisieren Sie zuerst Ihre Stacks und führen Sie dann den Stack-Refactor durch.

  • Sie können die gleiche Ressource nicht in mehrere Stapel umwandeln.

  • Sie können keine Ressourcen refaktorisieren, die sich auf Pseudoparameter beziehen, deren Werte sich zwischen Quell- und Zielstapel unterscheiden, wie beispielsweise AWS::StackName.

  • CloudFormation unterstützt keine leeren Stacks. Wenn das Refactoring dazu führen würde, dass ein Stack keine Ressourcen mehr hat, müssen Sie diesem Stack zunächst mindestens eine Ressource hinzufügen, bevor Sie ihn ausführen. create-stack-refactor Dies kann eine einfache Ressource wie AWS::SNS::Topic oder AWS::CloudFormation::WaitConditionsein. Zum Beispiel:

    Resources: MySimpleSNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: MySimpleTopic
  • Stack Refactor unterstützt keine Stacks, die mit Stack-Richtlinien verknüpft sind, unabhängig davon, was die Richtlinien erlauben oder verbieten.

Voraussetzungen

Um Stacks umzugestalten, müssen Sie die überarbeiteten Vorlagen bereits erstellt haben.

Verwenden Sie den Befehl get-template, um die CloudFormation Vorlagen für die Stacks abzurufen, die Sie umgestalten möchten.

aws cloudformation get-template --stack-name Stack1

Wenn Sie die Vorlagen haben, verwenden Sie die integrierte Entwicklungsumgebung (IDE) Ihrer Wahl, um sie zu aktualisieren und die gewünschte Struktur und Ressourcenorganisation zu verwenden.

Stacks umgestalten (Konsole)

Gehen Sie wie folgt vor, um Stacks mithilfe der Konsole umzugestalten.

Um Stacks umzugestalten
  1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die CloudFormation Konsole unter https://console.aws.amazon.com /cloudformation.

  2. Wählen Sie in der Navigationsleiste oben auf dem Bildschirm aus, AWS-Region wo sich Ihre Stacks befinden.

  3. Wählen Sie im Navigationsbereich auf der linken Seite Stack Refactors aus.

  4. Wählen Sie auf der Seite Stack-Refactors die Option Stack-Refactor starten aus.

  5. Geben Sie unter Beschreibung eine Beschreibung ein, die Ihnen bei der Identifizierung Ihres Stack-Refaktors hilft. Wählen Sie anschließend Weiter.

  6. Gehen Sie für Stack 1 wie folgt vor:

    1. Wählen Sie entweder Vorlage für einen vorhandenen Stack aktualisieren oder Neuen Stack erstellen aus.

      Wenn Sie Vorlage für einen vorhandenen Stack aktualisieren ausgewählt haben, wählen Sie einen vorhandenen Stack aus der Liste aus. Oder wählen Sie Enter a stack ARN, um den ARN eines vorhandenen Stacks einzugeben.

      Wenn Sie Neuen Stack erstellen ausgewählt haben, geben Sie für Stackname einen Namen für den neuen Stack ein.

    2. Wählen Sie unter Bestehende Vorlage durch überarbeitete Vorlage ersetzen die Option Amazon S3 S3-URL oder Eine Vorlagendatei hochladen aus, um die gewünschte Vorlage für Stack 1 hochzuladen.

    3. Wählen Sie Weiter aus.

  7. Gehen Sie für Stack 2 wie folgt vor:

    1. Wählen Sie entweder Vorlage für einen vorhandenen Stack aktualisieren oder Neuen Stack erstellen aus.

      Wenn Sie Vorlage für einen vorhandenen Stack aktualisieren ausgewählt haben, wählen Sie einen vorhandenen Stack aus der Liste aus. Oder wählen Sie Enter a stack ARN, um den ARN eines vorhandenen Stacks einzugeben.

      Wenn Sie Neuen Stack erstellen ausgewählt haben, geben Sie für Stackname einen Namen für den neuen Stack ein.

    2. Wählen Sie unter Bestehende Vorlage durch überarbeitete Vorlage ersetzen die Option Amazon S3 S3-URL oder Vorlagendatei hochladen aus, um die gewünschte Vorlage für Stack 2 hochzuladen.

    3. Wählen Sie Weiter aus.

  8. Vergewissern Sie sich auf der Seite „Logische Ressourcen-ID-Umbenennungen angeben“, dass Sie CloudFormation wissen, wie Stacks umgestaltet werden, indem Sie alle angezeigten Ressourcen der richtigen logischen Zuordnung zuordnen. IDs Wenn die Logik IDs einer Ressource geändert wurde, müssen Sie im Rahmen des Stack-Refactorings angeben, wie sie umbenannt wurde, indem Sie den Quell-Stack-Namen, die ursprüngliche logische ID, den Ziel-Stack-Namen und die umbenannte logische ID angeben. In einigen Fällen erkennt die CloudFormation Konsole die Ressourcenzuordnung möglicherweise automatisch, und Sie können einfach überprüfen, ob die vorab ausgefüllte Ressourcenzuordnung korrekt ist, bevor Sie fortfahren.

  9. Wählen Sie Weiter aus.

  10. Überprüfen Sie auf der Seite Überprüfen und ausführen alle Ihre Auswahlen aus den vorherigen Schritten und stellen Sie sicher, dass alles korrekt eingerichtet ist.

  11. Wenn Sie bereit sind, die Stacks umzugestalten, wählen Sie Stack-Refactor ausführen.

Stacks umgestalten ()AWS CLI

Zu den AWS CLI Befehlen für das Stack-Refactoring gehören:

  • create-stack-refactorum geplante Änderungen zu validieren und eine Vorschau zu generieren.

  • describe-stack-refactorum den Status und die Details eines Stack-Refactoring-Vorgangs abzurufen.

  • execute-stack-refactorum den validierten Stack-Refactoring-Vorgang abzuschließen.

  • list-stack-refactorsum alle Stack-Refactoring-Operationen in Ihrem Konto mit ihrem aktuellen Status und grundlegenden Informationen aufzulisten.

  • list-stack-refactor-actionsum eine Vorschau der spezifischen Aktionen anzuzeigen, die während der Refactor-Ausführung auf jedem Stack und jeder Ressource ausgeführt CloudFormation werden.

Verwenden Sie die folgende Prozedur, um einen Stapel unter Verwendung des AWS CLI zu refaktorisieren.

Um Stacks umzustrukturieren
  1. Verwenden Sie den create-stack-refactorBefehl und geben Sie die Stack-Namen und die aktualisierten Vorlagen für die Stacks an, die umgestaltet werden sollen. Fügen Sie die --enable-stack-creation Option hinzu, mit der neue Stapel erstellt werden können CloudFormation , falls diese noch nicht existieren.

    aws cloudformation create-stack-refactor \ --stack-definitions \ StackName=Stack1,TemplateBody@=file://template1-updated.yaml \ StackName=Stack2,TemplateBody@=file://template2-updated.yaml \ --enable-stack-creation

    Der Befehl gibt ein StackRefactorId zurück, das Sie in späteren Schritten verwenden werden.

    { "StackRefactorId": "9c384f70-4e07-4ed7-a65d-fee5eb430841" }

    Wenn bei der Vorlagenvalidierung Konflikte festgestellt werden (was Sie im nächsten Schritt bestätigen können), verwenden Sie den create-stack-refactorBefehl mit der --resource-mappings Option.

    aws cloudformation create-stack-refactor \ --stack-definitions \ StackName=Stack1,TemplateBody@=file://template1-updated.yaml \ StackName=Stack2,TemplateBody@=file://template2-updated.yaml \ --enable-stack-creation \ --resource-mappings file://resource-mapping.json

    Im Folgenden sehen Sie ein Beispiel für eine resource-mapping.json-Datei.

    [ { "Source": { "StackName": "Stack1", "LogicalResourceId": "MySNSTopic" }, "Destination": { "StackName": "Stack2", "LogicalResourceId": "MyLambdaSNSTopic" } } ]
  2. Verwenden Sie den describe-stack-refactorBefehl, um sicherzustellen, dass dies der Fall Status istCREATE_COMPLETE. Damit wird überprüft, ob die Validierung vollständig ist.

    aws cloudformation describe-stack-refactor \ --stack-refactor-id 9c384f70-4e07-4ed7-a65d-fee5eb430841

    Beispielausgabe:

    { "StackRefactorId": "9c384f70-4e07-4ed7-a65d-fee5eb430841", "StackIds": [ "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack1/3e6a1ff0-94b1-11f0-aa6f-0a88d2e03acf", "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack2/5da91650-94b1-11f0-81cf-0a23500e151b" ], "ExecutionStatus": "AVAILABLE", "Status": "CREATE_COMPLETE" }
  3. Verwenden Sie den list-stack-refactor-actionsBefehl, um eine Vorschau der spezifischen Aktionen anzuzeigen, die ausgeführt werden.

    aws cloudformation list-stack-refactor-actions \ --stack-refactor-id 9c384f70-4e07-4ed7-a65d-fee5eb430841

    Beispielausgabe:

    { "StackRefactorActions": [ { "Action": "MOVE", "Entity": "RESOURCE", "PhysicalResourceId": "MyTestLambdaRole", "Description": "No configuration changes detected.", "Detection": "AUTO", "TagResources": [], "UntagResources": [], "ResourceMapping": { "Source": { "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack1/3e6a1ff0-94b1-11f0-aa6f-0a88d2e03acf", "LogicalResourceId": "MyLambdaRole" }, "Destination": { "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack2/5da91650-94b1-11f0-81cf-0a23500e151b", "LogicalResourceId": "MyLambdaRole" } } }, { "Action": "MOVE", "Entity": "RESOURCE", "PhysicalResourceId": "MyTestFunction", "Description": "Resource configuration changes will be validated during refactor execution.", "Detection": "AUTO", "TagResources": [ { "Key": "aws:cloudformation:stack-name", "Value": "Stack2" }, { "Key": "aws:cloudformation:logical-id", "Value": "MyFunction" }, { "Key": "aws:cloudformation:stack-id", "Value": "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack2/5da91650-94b1-11f0-81cf-0a23500e151b" } ], "UntagResources": [ "aws:cloudformation:stack-name", "aws:cloudformation:logical-id", "aws:cloudformation:stack-id" ], "ResourceMapping": { "Source": { "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack1/3e6a1ff0-94b1-11f0-aa6f-0a88d2e03acf", "LogicalResourceId": "MyFunction" }, "Destination": { "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack2/5da91650-94b1-11f0-81cf-0a23500e151b", "LogicalResourceId": "MyFunction" } } } ] }
  4. Nachdem Sie Ihre Änderungen überprüft und bestätigt haben, verwenden Sie den execute-stack-refactorBefehl, um den Stack-Refactoring-Vorgang abzuschließen.

    aws cloudformation execute-stack-refactor \ --stack-refactor-id 9c384f70-4e07-4ed7-a65d-fee5eb430841
  5. Verwenden Sie den describe-stack-refactorBefehl, um den Ausführungsstatus zu überwachen.

    aws cloudformation describe-stack-refactor \ --stack-refactor-id 9c384f70-4e07-4ed7-a65d-fee5eb430841

    Beispielausgabe:

    { "StackRefactorId": "9c384f70-4e07-4ed7-a65d-fee5eb430841", "StackIds": [ "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack1/3e6a1ff0-94b1-11f0-aa6f-0a88d2e03acf", "arn:aws:cloudformation:us-east-1:123456789012:stack/Stack2/5da91650-94b1-11f0-81cf-0a23500e151b" ], "ExecutionStatus": "SUCCEEDED", "Status": "COMPLETE" }

Begrenzte Ressourcen

  • Stack Refactoring unterstützt nur Ressourcentypen mit einem provisioningType von,FULLY_MUTABLE was Sie mit dem Befehl describe-type überprüfen können.

  • CloudFormation überprüft bei der Erstellung des Refactorings die Eignung von Ressourcen und meldet alle nicht unterstützten Ressourcen in der Ausgabe des Befehls. describe-stack-refactor

  • Die folgenden Ressourcen werden für das Stack-Refactoring nicht unterstützt:

    • AWS::ACMPCA::Certificate

    • AWS::ACMPCA::CertificateAuthority

    • AWS::ACMPCA::CertificateAuthorityActivation

    • AWS::ApiGateway::BasePathMapping

    • AWS::ApiGateway::Method

    • AWS::AppConfig::ConfigurationProfile

    • AWS::AppConfig::Deployment

    • AWS::AppConfig::Environment

    • AWS::AppConfig::Extension

    • AWS::AppConfig::ExtensionAssociation

    • AWS::AppStream::DirectoryConfig

    • AWS::AppStream::StackFleetAssociation

    • AWS::AppStream::StackUserAssociation

    • AWS::AppStream::User

    • AWS::BackupGateway::Hypervisor

    • AWS::CertificateManager::Certificate

    • AWS::CloudFormation::CustomResource

    • AWS::CloudFormation::Macro

    • AWS::CloudFormation::WaitCondition

    • AWS::CloudFormation::WaitConditionHandle

    • AWS::CodeDeploy::DeploymentGroup

    • AWS::CodePipeline::CustomActionType

    • AWS::Cognito::UserPoolRiskConfigurationAttachment

    • AWS::Cognito::UserPoolUICustomizationAttachment

    • AWS::Cognito::UserPoolUserToGroupAttachment

    • AWS::Config::ConfigRule

    • AWS::Config::ConfigurationRecorder

    • AWS::Config::DeliveryChannel

    • AWS::DataBrew::Dataset

    • AWS::DataBrew::Job

    • AWS::DataBrew::Project

    • AWS::DataBrew::Recipe

    • AWS::DataBrew::Ruleset

    • AWS::DataBrew::Schedule

    • AWS::DataZone::DataSource

    • AWS::DataZone::Environment

    • AWS::DataZone::EnvironmentBlueprintConfiguration

    • AWS::DataZone::EnvironmentProfile

    • AWS::DataZone::Project

    • AWS::DataZone::SubscriptionTarget

    • AWS::DirectoryService::MicrosoftAD

    • AWS::DynamoDB::GlobalTable

    • AWS::EC2::LaunchTemplate

    • AWS::EC2::NetworkInterfacePermission

    • AWS::EC2::SpotFleet

    • AWS::EC2::VPCDHCPOptionsAssociation

    • AWS::EC2::VolumeAttachment

    • AWS::EMR::Cluster

    • AWS::EMR::InstanceFleetConfig

    • AWS::EMR::InstanceGroupConfig

    • AWS::ElastiCache::CacheCluster

    • AWS::ElastiCache::ReplicationGroup

    • AWS::ElastiCache::SecurityGroup

    • AWS::ElastiCache::SecurityGroupIngress

    • AWS::ElasticBeanstalk::ConfigurationTemplate

    • AWS::ElasticLoadBalancing::LoadBalancer

    • AWS::ElasticLoadBalancingV2::ListenerCertificate

    • AWS::Elasticsearch::Domain

    • AWS::FIS::ExperimentTemplate

    • AWS::Glue::Schema

    • AWS::GuardDuty::IPSet

    • AWS::GuardDuty::PublishingDestination

    • AWS::GuardDuty::ThreatIntelSet

    • AWS::IAM::AccessKey

    • AWS::IAM::UserToGroupAddition

    • AWS::ImageBuilder::Component

    • AWS::IoT::PolicyPrincipalAttachment

    • AWS::IoT::ThingPrincipalAttachment

    • AWS::IoTFleetWise::Campaign

    • AWS::IoTWireless::WirelessDeviceImportTask

    • AWS::Lambda::EventInvokeConfig

    • AWS::Lex::BotVersion

    • AWS::M2::Application

    • AWS::MSK::Configuration

    • AWS::MSK::ServerlessCluster

    • AWS::Maester::DocumentType

    • AWS::MediaTailor::Channel

    • AWS::NeptuneGraph::PrivateGraphEndpoint

    • AWS::Omics::AnnotationStore

    • AWS::Omics::ReferenceStore

    • AWS::Omics::SequenceStore

    • AWS::OpenSearchServerless::Collection

    • AWS::OpsWorks::App

    • AWS::OpsWorks::ElasticLoadBalancerAttachment

    • AWS::OpsWorks::Instance

    • AWS::OpsWorks::Layer

    • AWS::OpsWorks::Stack

    • AWS::OpsWorks::UserProfile

    • AWS::OpsWorks::Volume

    • AWS::PCAConnectorAD::Connector

    • AWS::PCAConnectorAD::DirectoryRegistration

    • AWS::PCAConnectorAD::Template

    • AWS::PCAConnectorAD::TemplateGroupAccessControlEntry

    • AWS::Panorama::PackageVersion

    • AWS::QuickSight::Theme

    • AWS::RDS::DBSecurityGroup

    • AWS::RDS::DBSecurityGroupIngress

    • AWS::Redshift::ClusterSecurityGroup

    • AWS::Redshift::ClusterSecurityGroupIngress

    • AWS::RefactorSpaces::Environment

    • AWS::RefactorSpaces::Route

    • AWS::RefactorSpaces::Service

    • AWS::RoboMaker::RobotApplication

    • AWS::RoboMaker::SimulationApplication

    • AWS::Route53::RecordSet

    • AWS::Route53::RecordSetGroup

    • AWS::SDB::Domain

    • AWS::SageMaker::InferenceComponen

    • AWS::ServiceCatalog::PortfolioPrincipalAssociation

    • AWS::ServiceCatalog::PortfolioProductAssociation

    • AWS::ServiceCatalog::PortfolioShare

    • AWS::ServiceCatalog::TagOptionAssociation

    • AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation

    • AWS::ServiceCatalogAppRegistry::ResourceAssociation

    • AWS::StepFunctions::StateMachineVersion

    • AWS::Synthetics::Canary

    • AWS::VoiceID::Domain

    • AWS::WAF::ByteMatchSet

    • AWS::WAF::IPSet

    • AWS::WAF::Rule

    • AWS::WAF::SizeConstraintSet

    • AWS::WAF::SqlInjectionMatchSet

    • AWS::WAF::WebACL

    • AWS::WAF::XssMatchSet

    • AWS::WAFv2::IPSet

    • AWS::WAFv2::RegexPatternSet

    • AWS::WAFv2::RuleGroup

    • AWS::WAFv2::WebACL

    • AWS::WorkSpaces::Workspace