Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Refactorisation des piles
Grâce à la refactorisation des piles, vous pouvez réorganiser les ressources de vos CloudFormation piles tout en préservant les propriétés et les données des ressources existantes. Vous pouvez déplacer des ressources entre des piles, diviser les grandes piles en piles plus petites ou combiner plusieurs piles en une seule pile.
Rubriques
Comment fonctionne le stack refactoring
La refactorisation des piles implique les phases suivantes :
-
Évaluez votre infrastructure actuelle : passez en revue vos CloudFormation stacks et ressources existants afin d'identifier les opportunités de refactoring des stack.
-
Planifiez votre refactorisation : définissez comment les ressources doivent être organisées. Tenez compte de vos dépendances, de vos conventions de dénomination et de vos limites opérationnelles. Cela peut affecter la CloudFormation validation ultérieure.
-
Déterminez les piles de destination : décidez dans quelles piles vous allez refactoriser les ressources. Vous pouvez déplacer des ressources entre au moins 2 piles et un maximum de 5 piles. Les ressources peuvent être déplacées entre des piles imbriquées.
-
Mettez à jour vos modèles : modifiez vos CloudFormation modèles pour refléter le changement prévu, par exemple en déplaçant les définitions de ressources entre les modèles. Vous pouvez renommer la logique IDs au cours de ce processus.
-
Créez le refactorisateur de pile : fournissez une liste des noms de pile et des modèles que vous souhaitez refactoriser.
-
Vérifiez l'impact de la refactorisation et résolvez les éventuels conflits : CloudFormation valide les modèles que vous fournissez et vérifie les dépendances entre les piles, les types de ressources présentant des problèmes de mise à jour des balises et les conflits d'ID logique des ressources.
Si la validation réussit, CloudFormation un aperçu des actions de refactorisation qui se produiront pendant l'exécution sera généré.
Si la validation échoue, résolvez les problèmes identifiés et réessayez. En cas de conflit, fournissez un mappage d'ID logique de ressource indiquant la source et la destination des ressources en conflit.
-
Exécuter le refactoring : après avoir confirmé que les modifications correspondent à vos objectifs de refactorisation, terminez le refactoring de la pile.
-
Surveiller — Suivez l'état d'exécution pour vous assurer que l'opération se termine correctement.
Considérations relatives à la refactorisation des piles
Lorsque vous refactorisez vos piles, gardez les points suivants à l'esprit :
-
Les opérations de refactorisation n'autorisent pas la création de nouvelles ressources, la suppression de ressources ou la modification de la configuration des ressources.
-
Vous ne pouvez pas modifier ou ajouter de nouveaux paramètres, conditions ou mappages lors d'un refactoring de pile. Une solution possible consiste à mettre à jour votre pile avant d'effectuer le refactoring.
-
Vous ne pouvez pas refactoriser la même ressource en plusieurs piles.
-
Vous ne pouvez pas refactoriser les ressources qui font référence à des pseudo-paramètres dont les valeurs diffèrent entre les piles source et de destination, par exemple.
AWS::StackName
-
CloudFormation ne supporte pas les piles vides. Si la refactorisation laisse une pile sans ressources, vous devez d'abord ajouter au moins une ressource à cette pile avant de l'exécuter. create-stack-refactor Il peut s'agir d'une ressource simple comme
AWS::SNS::Topic
ouAWS::CloudFormation::WaitCondition
. Par exemple :Resources: MySimpleSNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: MySimpleTopic
-
Le refactor de pile ne prend pas en charge les piles auxquelles des politiques de pile sont associées, indépendamment de ce que les politiques autorisent ou refusent.
AWS CLI commandes pour la refactorisation des piles
Les AWS CLI commandes de refactorisation des piles incluent :
-
create-stack-refactorpour valider et générer un aperçu des modifications prévues.
-
describe-stack-refactorpour récupérer le statut et les détails d'une opération de refactorisation de pile.
-
execute-stack-refactorpour terminer l'opération de refactorisation de pile validée.
-
get-template pour récupérer le modèle d'une pile existante.
-
list-stack-refactorspour répertorier toutes les opérations de refactoring de stack de votre compte avec leur statut actuel et des informations de base.
-
list-stack-refactor-actionspour afficher un aperçu des actions spécifiques qui CloudFormation seront effectuées sur chaque pile et ressource lors de l'exécution du refactoring.
Refactorisez une pile à l'aide du AWS CLI
Utilisez la procédure suivante pour refactoriser une pile à l'aide du AWS CLI.
-
Utilisez la commande get-template pour récupérer les CloudFormation modèles des piles que vous souhaitez refactoriser.
aws cloudformation get-template --stack-name
Stack1
Lorsque vous disposez des modèles, utilisez l'environnement de développement intégré (IDE) de votre choix pour les mettre à jour afin d'utiliser la structure et l'organisation des ressources souhaitées.
-
Utilisez la create-stack-refactorcommande et fournissez les noms des piles et les modèles mis à jour pour les piles à refactoriser. Incluez l'
--enable-stack-creation
option permettant CloudFormation de créer de nouvelles piles si elles n'existent pas déjà.aws cloudformation create-stack-refactor \ --stack-definitions \ StackName=
Stack1
,TemplateBody@=file://template1-updated.yaml
\ StackName=Stack2
,TemplateBody@=file://template2-updated.yaml
\ --enable-stack-creationLa commande renvoie un
StackRefactorId
que vous utiliserez ultérieurement.{ "StackRefactorId": "9c384f70-4e07-4ed7-a65d-fee5eb430841" }
Si des conflits sont détectés lors de la validation du modèle (ce que vous pourrez confirmer à l'étape suivante), utilisez la create-stack-refactorcommande avec l'
--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
Voici un exemple de fichier
resource-mapping.json
.[ { "Source": { "StackName": "
Stack1
", "LogicalResourceId": "MySNSTopic
" }, "Destination": { "StackName": "Stack2
", "LogicalResourceId": "MyLambdaSNSTopic
" } } ] -
Utilisez la describe-stack-refactorcommande pour vous assurer que
Status
c'est le casCREATE_COMPLETE
. Cela permet de vérifier que la validation est terminée.aws cloudformation describe-stack-refactor \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
Exemple de sortie :
{ "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" }
-
Utilisez la list-stack-refactor-actionscommande pour prévisualiser les actions spécifiques qui seront effectuées.
aws cloudformation list-stack-refactor-actions \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
Exemple de sortie :
{ "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" } } } ] }
-
Après avoir examiné et confirmé vos modifications, utilisez la execute-stack-refactorcommande pour terminer l'opération de refactorisation de la pile.
aws cloudformation execute-stack-refactor \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
-
Utilisez la describe-stack-refactorcommande pour surveiller l'état d'exécution.
aws cloudformation describe-stack-refactor \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
Exemple de sortie :
{ "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" }
Limitations des ressources
-
La refactorisation des piles ne prend en charge que les types de ressources avec un
provisioningType
deFULLY_MUTABLE
, que vous pouvez vérifier à l'aide de la commande describe-type. -
CloudFormation validera l'éligibilité des ressources lors de la création du refactoriseur et signalera toutes les ressources non prises en charge dans le résultat de la describe-stack-refactorcommande.
-
Les ressources suivantes ne sont pas prises en charge pour la refactorisation des piles :
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