Rifattorizzazione degli stack - AWS CloudFormation

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 CloudFormation stack preservando le proprietà e i dati delle risorse esistenti. Puoi spostare risorse tra pile, dividere pile di grandi dimensioni in pile più piccole o combinare più pile in una sola.

Come funziona la rifattorizzazione degli stack

La rifattorizzazione degli stack prevede le seguenti fasi:

  1. Valuta la tua infrastruttura attuale: esamina gli CloudFormation stack e le risorse esistenti per identificare le opportunità di refactoring degli stack.

  2. Pianificazione della rifattorizzazione: definisci come devono essere organizzate le risorse. Tieni in considerazione le dipendenze, le convenzioni di denominazione e i limiti operativi. Questi possono influire sulla convalida successiva. CloudFormation

  3. Determinazione degli stack di destinazione: decidi in quali stack rifattorizzare le risorse. È possibile spostare risorse tra almeno 2 pile (utilizzando la console) e un massimo di 5 pile (utilizzando la). AWS CLI Le risorse possono essere spostate tra stack nidificati.

  4. Aggiorna i modelli: modifica i CloudFormation modelli in base alle modifiche pianificate, ad esempio spostando le definizioni delle risorse tra i modelli. È possibile rinominare il file logico IDs durante questo processo.

  5. Creazione della rifattorizzazione degli stack: fornisci un elenco di nomi e modelli dello stack che desideri rifattorizzare.

  6. 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, devi risolvere i problemi identificati e poi riprovare. In caso di conflitti, fornisci una mappatura degli ID logici delle risorse che mostri l’origine e la destinazione delle risorse in conflitto.

  7. Esecuzione della rifattorizzazione: dopo aver verificato che le modifiche siano in linea con gli obiettivi di rifattorizzazione, completa la rifattorizzazione degli stack.

  8. Monitoraggio: monitora lo stato di esecuzione per assicurarti che l’operazione venga eseguita correttamente.

Considerazioni sulla rifattorizzazione degli stack

Quando rifattorizzi i tuoi stack, tieni presente quanto segue:

  • Il refactoring dello stack si limita alla riorganizzazione delle risorse esistenti. Non è possibile creare o eliminare risorse, modificare le configurazioni delle risorse o modificare o aggiungere nuovi parametri, condizioni o mappature durante il refactoring. Per apportare queste modifiche, aggiorna prima gli stack, quindi esegui il refactoring dello stack.

  • Non è possibile rifattorizzare la stessa risorsa in più stack.

  • Non è possibile rifattorizzare risorse che si riferiscono a pseudo parametri i cui valori differiscono tra lo stack di origine e quello di destinazione, ad esempio AWS::StackName.

  • CloudFormation non supporta pile vuote. Se il refactoring lascerebbe uno stack senza risorse, devi prima aggiungere almeno una risorsa a quello stack prima di iniziare. create-stack-refactor La risorsa può anche essere molto semplice, come AWS::SNS::Topic o AWS::CloudFormation::WaitCondition. Ad esempio:

    Resources: MySimpleSNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: MySimpleTopic
  • La rifattorizzazione degli stack non supporta gli stack a cui sono associate policy di stack, indipendentemente da ciò che queste policy consentono o negano.

Prerequisiti

Per rifattorizzare gli stack, è necessario aver già creato i modelli rivisti.

Utilizzate il comando get-template per recuperare i CloudFormation modelli per gli stack che desiderate rifattorizzare.

aws cloudformation get-template --stack-name Stack1

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

Refactor stacks (console)

Usa la seguente procedura per rifattorizzare gli stack utilizzando la console.

Per rifattorizzare le pile
  1. Accedi Console di gestione AWS e apri la CloudFormation console all'indirizzo https://console.aws.amazon.com /cloudformazione.

  2. Nella barra di navigazione nella parte superiore dello schermo, scegli Regione AWS dove si trovano gli stack.

  3. Nel riquadro di navigazione a sinistra, scegli Stack refactors.

  4. Nella pagina Stack refactor, scegli Avvia stack refactor.

  5. Per Descrizione, fornisci una descrizione per aiutarti a identificare il tuo stack refactor. Quindi, seleziona Successivo.

  6. Per Stack 1, procedi come segue:

    1. Scegliete Aggiorna il modello per uno stack esistente o Crea nuovo stack.

      Se hai scelto Aggiorna il modello per uno stack esistente, seleziona uno stack esistente dall'elenco. Oppure scegli Inserisci un ARN dello stack per inserire l'ARN di uno stack esistente.

      Se hai scelto Crea nuovo stack, per Nome dello stack, fornisci un nome per il nuovo stack.

    2. In Sostituisci modello esistente con modello refattorizzato, scegli URL Amazon S3 o Carica un file modello per caricare il modello desiderato per lo Stack 1.

    3. Scegli Next (Successivo).

  7. Per Stack 2, procedi come segue:

    1. Scegliete Aggiorna il modello per uno stack esistente o Crea nuovo stack.

      Se hai scelto Aggiorna il modello per uno stack esistente, seleziona uno stack esistente dall'elenco. Oppure scegli Inserisci un ARN dello stack per inserire l'ARN di uno stack esistente.

      Se hai scelto Crea nuovo stack, per Nome dello stack, fornisci un nome per il nuovo stack.

    2. In Sostituisci modello esistente con modello refattorizzato, scegli URL Amazon S3 o Carica file modello per caricare il modello desiderato per Stack 2.

    3. Scegli Next (Successivo).

  8. Nella pagina Specificare le ridenominazioni degli ID delle risorse logiche, assicurati di CloudFormation sapere come rifattorizzare gli stack mappando tutte le risorse mostrate sulla logica corretta. IDs Come parte del rifattore dello stack, se la logica IDs di una risorsa è stata modificata, è necessario specificare come è stata rinominata fornendo il nome dello stack di origine, l'ID logico originale, il nome dello stack di destinazione e l'ID logico rinominato. In alcuni casi, la CloudFormation console potrebbe rilevare automaticamente la mappatura delle risorse ed è sufficiente verificare che la mappatura delle risorse precompilata sia corretta prima di procedere.

  9. Scegli Next (Successivo).

  10. Nella pagina Revisione ed esecuzione, rivedi tutte le selezioni effettuate nei passaggi precedenti e conferma che tutto sia impostato correttamente.

  11. Quando sei pronto per rifattorizzare gli stack, scegli Execute stack refactor.

Rifattorizza gli stack ()AWS CLI

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 rifattorizzazione dello stack.

  • execute-stack-refactorper completare l'operazione convalidata di rifattorizzazione dello stack.

  • list-stack-refactorsper elencare tutte le operazioni di rifattorizzazione 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.

Utilizza la procedura seguente per rifattorizzare un nuovo stack utilizzando AWS CLI.

Per rifattorizzare gli stack
  1. 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-creation

    Il comando restituisce un StackRefactorId che 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), usa 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-mappings file://resource-mapping.json

    Di seguito è riportato un esempio del file resource-mapping.json.

    [ { "Source": { "StackName": "Stack1", "LogicalResourceId": "MySNSTopic" }, "Destination": { "StackName": "Stack2", "LogicalResourceId": "MyLambdaSNSTopic" } } ]
  2. Usa il describe-stack-refactorcomando per assicurarti che Status siaCREATE_COMPLETE. In questo modo, verifichi che la convalida sia completa.

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

    Output 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" }
  3. Utilizzate il list-stack-refactor-actionscomando per visualizzare in anteprima le azioni specifiche che verranno eseguite.

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

    Output 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" } } } ] }
  4. 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-id 9c384f70-4e07-4ed7-a65d-fee5eb430841
  5. Utilizzate il describe-stack-refactorcomando per monitorare lo stato di esecuzione.

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

    Output 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" }

Limiti delle risorse

  • La rifattorizzazione degli stack supporta solo i tipi di risorse con un provisioningType di FULLY_MUTABLE, che puoi controllare usando il comando describe-type.

  • CloudFormation convaliderà l'idoneità delle risorse durante la creazione del refactor e riporterà eventuali risorse non supportate nell'output del comando. describe-stack-refactor

  • Le seguenti risorse non sono supportate per la rifattorizzazione degli stack:

    • 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