Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Rifattorizzazione degli stack
Con il refactoring dello stack, puoi riorganizzare le risorse negli stack preservando le proprietà e i dati delle risorse esistenti. CloudFormation Puoi spostare risorse tra pile, dividere pile di grandi dimensioni in pile più piccole o combinare più pile in una pila.
Argomenti
Come funziona lo stack refactoring
Il refactoring degli stack prevede le seguenti fasi:
-
Valuta la tua infrastruttura attuale: esamina gli CloudFormation stack e le risorse esistenti per identificare le opportunità di refactoring degli stack.
-
Pianifica il refactoring: definisci come devono essere organizzate le risorse. Considerate le vostre dipendenze, le convenzioni di denominazione e i limiti operativi. Questi possono influire sulla convalida successiva CloudFormation .
-
Determina gli stack di destinazione: decidi in quali pile rifattorizzare le risorse. Puoi spostare le risorse tra almeno 2 pile e un massimo di 5 pile. Le risorse possono essere spostate tra pile annidate.
-
Aggiorna i modelli: modifica i CloudFormation modelli in base alla modifica pianificata, ad esempio spostando le definizioni delle risorse tra i modelli. È possibile rinominare il file logico IDs durante questo processo.
-
Crea il refactor dello stack: fornisci un elenco di nomi e modelli dello stack che desideri rifattorizzare.
-
Esamina l'impatto del refactor e risolvi eventuali conflitti: CloudFormation convalida i modelli forniti e verifica le dipendenze tra stack, i tipi di risorse con problemi di aggiornamento dei tag e i conflitti tra gli ID logici delle risorse.
Se la convalida ha esito positivo, CloudFormation genererà un'anteprima delle azioni di rifattore che si verificheranno durante l'esecuzione.
Se la convalida fallisce, risolvi i problemi identificati e riprova. In caso di conflitti, fornite una mappatura degli ID logici delle risorse che mostri l'origine e la destinazione delle risorse in conflitto.
-
Esegui il refactoring: dopo aver verificato che le modifiche siano in linea con gli obiettivi di refactoring, completa lo stack refactor.
-
Monitoraggio: monitora lo stato di esecuzione per garantire che l'operazione venga completata correttamente.
Considerazioni sul refactoring dello stack
Quando rifattorizzate gli stack, tenete presente quanto segue:
-
Le operazioni di rifattorizzazione non consentono la creazione di nuove risorse, l'eliminazione di risorse o la modifica delle configurazioni delle risorse.
-
Non è possibile modificare o aggiungere nuovi parametri, condizioni o mappature durante un refactoring dello stack. Una possibile soluzione alternativa consiste nell'aggiornare lo stack prima di eseguire il refactoring.
-
Non puoi rifattorizzare la stessa risorsa in più stack.
-
Non è possibile rifattorizzare risorse che fanno riferimento a pseudo parametri i cui valori differiscono tra gli stack di origine e di destinazione, ad esempio.
AWS::StackName -
CloudFormation non supporta pile vuote. Se il refactoring lascia uno stack senza risorse, devi prima aggiungere almeno una risorsa a quello stack prima di iniziare. create-stack-refactor Può trattarsi di una risorsa semplice come o.
AWS::SNS::TopicAWS::CloudFormation::WaitConditionAd esempio:Resources: MySimpleSNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: MySimpleTopic -
Stack refactor non supporta gli stack a cui sono associate policy di stack, indipendentemente da ciò che le politiche consentono o negano.
AWS CLI comandi per il refactoring dello stack
I AWS CLI comandi per il refactoring dello stack includono:
-
create-stack-refactorper convalidare e generare un'anteprima delle modifiche pianificate.
-
describe-stack-refactorper recuperare lo stato e i dettagli di un'operazione di refactoring dello stack.
-
execute-stack-refactorper completare l'operazione convalidata di rifattorizzazione dello stack.
-
get-template per recuperare il modello per uno stack esistente.
-
list-stack-refactorsper elencare tutte le operazioni di refactoring dello stack presenti nel tuo account con il loro stato attuale e le informazioni di base.
-
list-stack-refactor-actionsper mostrare un'anteprima delle azioni specifiche che CloudFormation verranno eseguite su ogni stack e risorsa durante l'esecuzione del refactor.
Rifattorizza uno stack usando il AWS CLI
Utilizzare la procedura seguente per rifattorizzare uno stack utilizzando. AWS CLI
-
Utilizzate il comando get-template per recuperare i CloudFormation modelli per gli stack che desiderate rifattorizzare.
aws cloudformation get-template --stack-nameStack1Quando disponi dei modelli, utilizza l'ambiente di sviluppo integrato (IDE) di tua scelta per aggiornarli in modo da utilizzare la struttura e l'organizzazione delle risorse desiderate.
-
Usa il create-stack-refactorcomando e fornisci i nomi degli stack e i modelli aggiornati per gli stack da rifattorizzare. Includi l'
--enable-stack-creationopzione CloudFormation per consentire la creazione di nuovi stack se non esistono già.aws cloudformation create-stack-refactor \ --stack-definitions \ StackName=Stack1,TemplateBody@=file://template1-updated.yaml\ StackName=Stack2,TemplateBody@=file://template2-updated.yaml\ --enable-stack-creationIl comando restituisce un comando
StackRefactorIdche utilizzerai nei passaggi successivi.{ "StackRefactorId": "9c384f70-4e07-4ed7-a65d-fee5eb430841" }Se vengono rilevati conflitti durante la convalida del modello (che puoi confermare nel passaggio successivo), utilizza il create-stack-refactorcomando con l'
--resource-mappingsopzione.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.jsonDi seguito è riportato un esempio del file
resource-mapping.json.[ { "Source": { "StackName": "Stack1", "LogicalResourceId": "MySNSTopic" }, "Destination": { "StackName": "Stack2", "LogicalResourceId": "MyLambdaSNSTopic" } } ] -
Usa il describe-stack-refactorcomando per assicurarti che
StatussiaCREATE_COMPLETE. Ciò verifica che la convalida sia completa.aws cloudformation describe-stack-refactor \ --stack-refactor-id9c384f70-4e07-4ed7-a65d-fee5eb430841Output di esempio:
{ "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" } -
Utilizzate il list-stack-refactor-actionscomando per visualizzare in anteprima le azioni specifiche che verranno eseguite.
aws cloudformation list-stack-refactor-actions \ --stack-refactor-id9c384f70-4e07-4ed7-a65d-fee5eb430841Output di esempio:
{ "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" } } } ] } -
Dopo aver esaminato e confermato le modifiche, utilizzate il execute-stack-refactorcomando per completare l'operazione di refactoring dello stack.
aws cloudformation execute-stack-refactor \ --stack-refactor-id9c384f70-4e07-4ed7-a65d-fee5eb430841 -
Utilizzate il describe-stack-refactorcomando per monitorare lo stato di esecuzione.
aws cloudformation describe-stack-refactor \ --stack-refactor-id9c384f70-4e07-4ed7-a65d-fee5eb430841Output di esempio:
{ "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" }
Limitazioni delle risorse
-
CloudFormation convaliderà l'idoneità delle risorse durante la creazione del refactor e riporterà tutte le risorse non supportate nell'output del comando. describe-stack-refactor
-
Le seguenti risorse non sono supportate per il refactoring dello stack:
AWS::ACMPCA::CertificateAWS::ACMPCA::CertificateAuthorityAWS::ACMPCA::CertificateAuthorityActivationAWS::ApiGateway::BasePathMappingAWS::ApiGateway::MethodAWS::AppConfig::ConfigurationProfileAWS::AppConfig::DeploymentAWS::AppConfig::EnvironmentAWS::AppConfig::ExtensionAWS::AppConfig::ExtensionAssociationAWS::AppStream::DirectoryConfigAWS::AppStream::StackFleetAssociationAWS::AppStream::StackUserAssociationAWS::AppStream::UserAWS::BackupGateway::HypervisorAWS::CertificateManager::CertificateAWS::CloudFormation::CustomResourceAWS::CloudFormation::MacroAWS::CloudFormation::WaitConditionAWS::CloudFormation::WaitConditionHandleAWS::CodeDeploy::DeploymentGroupAWS::CodePipeline::CustomActionTypeAWS::Cognito::UserPoolRiskConfigurationAttachmentAWS::Cognito::UserPoolUICustomizationAttachmentAWS::Cognito::UserPoolUserToGroupAttachmentAWS::Config::ConfigRuleAWS::Config::ConfigurationRecorderAWS::Config::DeliveryChannelAWS::DataBrew::DatasetAWS::DataBrew::JobAWS::DataBrew::ProjectAWS::DataBrew::RecipeAWS::DataBrew::RulesetAWS::DataBrew::ScheduleAWS::DataZone::DataSourceAWS::DataZone::EnvironmentAWS::DataZone::EnvironmentBlueprintConfigurationAWS::DataZone::EnvironmentProfileAWS::DataZone::ProjectAWS::DataZone::SubscriptionTargetAWS::DirectoryService::MicrosoftADAWS::DynamoDB::GlobalTableAWS::EC2::LaunchTemplateAWS::EC2::NetworkInterfacePermissionAWS::EC2::SpotFleetAWS::EC2::VPCDHCPOptionsAssociationAWS::EC2::VolumeAttachmentAWS::EMR::ClusterAWS::EMR::InstanceFleetConfigAWS::EMR::InstanceGroupConfigAWS::ElastiCache::CacheClusterAWS::ElastiCache::ReplicationGroupAWS::ElastiCache::SecurityGroupAWS::ElastiCache::SecurityGroupIngressAWS::ElasticBeanstalk::ConfigurationTemplateAWS::ElasticLoadBalancing::LoadBalancerAWS::ElasticLoadBalancingV2::ListenerCertificateAWS::Elasticsearch::DomainAWS::FIS::ExperimentTemplateAWS::Glue::SchemaAWS::GuardDuty::IPSetAWS::GuardDuty::PublishingDestinationAWS::GuardDuty::ThreatIntelSetAWS::IAM::AccessKeyAWS::IAM::UserToGroupAdditionAWS::ImageBuilder::ComponentAWS::IoT::PolicyPrincipalAttachmentAWS::IoT::ThingPrincipalAttachmentAWS::IoTFleetWise::CampaignAWS::IoTWireless::WirelessDeviceImportTaskAWS::Lambda::EventInvokeConfigAWS::Lex::BotVersionAWS::M2::ApplicationAWS::MSK::ConfigurationAWS::MSK::ServerlessClusterAWS::Maester::DocumentTypeAWS::MediaTailor::ChannelAWS::NeptuneGraph::PrivateGraphEndpointAWS::Omics::AnnotationStoreAWS::Omics::ReferenceStoreAWS::Omics::SequenceStoreAWS::OpenSearchServerless::CollectionAWS::OpsWorks::AppAWS::OpsWorks::ElasticLoadBalancerAttachmentAWS::OpsWorks::InstanceAWS::OpsWorks::LayerAWS::OpsWorks::StackAWS::OpsWorks::UserProfileAWS::OpsWorks::VolumeAWS::PCAConnectorAD::ConnectorAWS::PCAConnectorAD::DirectoryRegistrationAWS::PCAConnectorAD::TemplateAWS::PCAConnectorAD::TemplateGroupAccessControlEntryAWS::Panorama::PackageVersionAWS::QuickSight::ThemeAWS::RDS::DBSecurityGroupAWS::RDS::DBSecurityGroupIngressAWS::Redshift::ClusterSecurityGroupAWS::Redshift::ClusterSecurityGroupIngressAWS::RefactorSpaces::EnvironmentAWS::RefactorSpaces::RouteAWS::RefactorSpaces::ServiceAWS::RoboMaker::RobotApplicationAWS::RoboMaker::SimulationApplicationAWS::Route53::RecordSetAWS::Route53::RecordSetGroupAWS::SDB::DomainAWS::SageMaker::InferenceComponenAWS::ServiceCatalog::PortfolioPrincipalAssociationAWS::ServiceCatalog::PortfolioProductAssociationAWS::ServiceCatalog::PortfolioShareAWS::ServiceCatalog::TagOptionAssociationAWS::ServiceCatalogAppRegistry::AttributeGroupAssociationAWS::ServiceCatalogAppRegistry::ResourceAssociationAWS::StepFunctions::StateMachineVersionAWS::Synthetics::CanaryAWS::VoiceID::DomainAWS::WAF::ByteMatchSetAWS::WAF::IPSetAWS::WAF::RuleAWS::WAF::SizeConstraintSetAWS::WAF::SqlInjectionMatchSetAWS::WAF::WebACLAWS::WAF::XssMatchSetAWS::WAFv2::IPSetAWS::WAFv2::RegexPatternSetAWS::WAFv2::RuleGroupAWS::WAFv2::WebACLAWS::WorkSpaces::Workspace