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

Stack-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 Stapel kombinieren.

So funktioniert das Stack-Refactoring

Das Refactoring von Stacks umfasst die folgenden 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 Ihr Refactoring — Definieren Sie, wie Ressourcen organisiert werden sollen. Berücksichtigen Sie Ihre Abhängigkeiten, Benennungskonventionen und betrieblichen Beschränkungen. Diese können sich später auf die CloudFormation Validierung auswirken.

  3. Ermitteln Sie die Ziel-Stacks — Entscheiden Sie, in welche Stacks Sie Ressourcen umstrukturieren möchten. Sie können Ressourcen zwischen mindestens 2 Stapel und maximal 5 Stapeln 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. Den Stack-Refactor erstellen — Geben Sie eine Liste der Stack-Namen und Vorlagen an, die Sie umgestalten 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 Problemen bei der Tag-Aktualisierung und Konflikte mit 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 identifizierten Probleme und versuchen Sie es erneut. Geben Sie bei Konflikten eine Zuordnung der logischen Ressourcen-ID an, aus der Quelle und Ziel der widersprüchlichen Ressourcen hervorgehen.

  7. Refactor ausführen — Nachdem Sie sich vergewissert haben, dass die Änderungen Ihren Refactoring-Zielen entsprechen, schließen Sie den Stack-Refactor ab.

  8. Überwachen — Verfolgen Sie den Ausführungsstatus, um sicherzustellen, dass der Vorgang erfolgreich abgeschlossen wird.

Überlegungen zum Stack-Refactoring

Beachten Sie bei der Umgestaltung Ihrer Stacks Folgendes:

  • Refactoring-Operationen erlauben keine Erstellung neuer Ressourcen, das Löschen von Ressourcen oder Änderungen an Ressourcenkonfigurationen.

  • Sie können während eines Stack-Refactorings keine Parameter, Bedingungen oder Zuordnungen ändern oder neue hinzufügen. Eine mögliche Problemumgehung besteht darin, Ihren Stack zu aktualisieren, bevor Sie den Refactor durchführen.

  • Sie können dieselbe Ressource nicht in mehrere Stacks umstrukturieren.

  • Sie können Ressourcen nicht umgestalten, die sich auf Pseudo-Parameter beziehen, deren Werte sich zwischen den Quell- und Zielstapeln unterscheiden, wie z. AWS::StackName

  • CloudFormation unterstützt keine leeren Stapel. 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 sein. AWS::CloudFormation::WaitCondition Zum Beispiel:

    Resources: MySimpleSNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: MySimpleTopic
  • Stack Refactor unterstützt keine Stacks, denen Stack-Richtlinien angehängt sind, unabhängig davon, was die Richtlinien zulassen oder verweigern.

AWS CLI Befehle für das Stack-Refactoring

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.

  • get-template, um die Vorlage für einen vorhandenen Stack abzurufen.

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

Refaktorieren Sie einen Stack mit dem AWS CLI

Gehen Sie wie folgt vor, um einen Stack mithilfe von umzugestalten. AWS CLI

  1. 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 über die Vorlagen verfügen, verwenden Sie die integrierte Entwicklungsumgebung (IDE) Ihrer Wahl, um sie so zu aktualisieren, dass sie die gewünschte Struktur und Ressourcenorganisation verwenden.

  2. 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 a zurückStackRefactorId, das Sie in späteren Schritten verwenden werden.

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

    Wenn bei der Vorlagenüberprüfung 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" } } ]
  3. Verwenden Sie den describe-stack-refactorBefehl, um sicherzustellen, dass dies der Fall Status istCREATE_COMPLETE. Dadurch wird bestätigt, dass die Validierung abgeschlossen 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" }
  4. 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" } } } ] }
  5. 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
  6. 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" }

Einschränkungen der Ressourcen

  • Das Stack-Refactoring unterstützt nur Ressourcentypen mit einem provisioningType ofFULLY_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::InferenceComponent

    • 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