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.
Themen
So funktioniert das Stack-Refactoring
Das Refactoring von Stacks umfasst die folgenden Phasen:
-
Beurteilen Sie Ihre aktuelle Infrastruktur — Überprüfen Sie Ihre vorhandenen CloudFormation Stacks und Ressourcen, um Möglichkeiten für das Stack-Refactoring zu identifizieren.
-
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.
-
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.
-
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.
-
Den Stack-Refactor erstellen — Geben Sie eine Liste der Stack-Namen und Vorlagen an, die Sie umgestalten möchten.
-
Ü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.
-
Refactor ausführen — Nachdem Sie sich vergewissert haben, dass die Änderungen Ihren Refactoring-Zielen entsprechen, schließen Sie den Stack-Refactor ab.
-
Ü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
-
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.
-
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-creationDer Befehl gibt a zurück
StackRefactorId
, 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-mappingsfile://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
" } } ] -
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" }
-
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" } } } ] }
-
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
-
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