Refactorisation de piles - AWS CloudFormation

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

Comment fonctionne la refactorisation de pile

La refactorisation des piles implique les phases suivantes :

  1. Évaluez votre infrastructure actuelle : passez en revue vos CloudFormation stacks et ressources existants afin d'identifier les opportunités de refactoring des stack.

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

  3. 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 (à l'aide de la console) et un maximum de 5 piles (à l' AWS CLI aide de). Les ressources peuvent être déplacées entre des piles imbriquées.

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

  5. Créez le refactorisateur de pile : fournissez une liste des noms de pile et des modèles que vous souhaitez refactoriser.

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

  7. Exécutez la refactorisation : après avoir vérifié que les modifications correspondent à vos objectifs de refactorisation, terminez la refactorisation de la pile.

  8. Surveiller — Suivez l’état d’exécution pour vous assurer que l’opération se termine correctement.

Considérations sur la refactorisation des piles

Lorsque vous refactorisez vos piles, gardez à l’esprit les points suivants :

  • La refactorisation de la pile se limite à la réorganisation des ressources existantes. Vous ne pouvez pas créer ou supprimer des ressources, modifier les configurations des ressources, ni modifier ou ajouter de nouveaux paramètres, conditions ou mappages pendant le refactoring. Pour apporter ces modifications, mettez d'abord à jour vos piles, puis effectuez la refactorisation des piles.

  • 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 ou AWS::CloudFormation::WaitCondition. Par exemple :

    Resources: MySimpleSNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: MySimpleTopic
  • La refactorisation des piles ne prend pas en charge les piles auxquelles sont associées des politiques de pile, indépendamment de ce que ces politiques autorisent ou refusent.

Prérequis

Pour refactoriser les piles, vous devez déjà avoir créé les modèles révisés.

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

Une fois que 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.

Refactor Stacks (console)

Pour refactoriser les piles à l'aide de la console, procédez comme suit.

Pour refactoriser des piles
  1. Connectez-vous à la CloudFormation console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/cloudformation.

  2. Dans la barre de navigation en haut de l'écran, choisissez l' Région AWS emplacement de vos piles.

  3. Dans le volet de navigation de gauche, choisissez Stack refactors.

  4. Sur la page Stack refactor, choisissez Start stack refactor.

  5. Dans Description, fournissez une description pour vous aider à identifier votre refactorisateur de pile. Ensuite, choisissez Suivant.

  6. Pour la pile 1, procédez comme suit :

    1. Choisissez Mettre à jour le modèle pour une pile existante ou Créer une nouvelle pile.

      Si vous avez choisi Mettre à jour le modèle pour une pile existante, sélectionnez une pile existante dans la liste. Ou choisissez Enter a stack ARN pour saisir l'ARN d'une pile existante.

      Si vous avez choisi Créer une nouvelle pile, saisissez le nom de la nouvelle pile dans Nom de la pile.

    2. Sous Remplacer le modèle existant par un modèle refactorisé, choisissez l'URL Amazon S3 ou Téléversez un fichier modèle pour télécharger le modèle souhaité pour la pile 1.

    3. Choisissez Suivant.

  7. Pour la pile 2, procédez comme suit :

    1. Choisissez Mettre à jour le modèle pour une pile existante ou Créer une nouvelle pile.

      Si vous avez choisi Mettre à jour le modèle pour une pile existante, sélectionnez une pile existante dans la liste. Ou choisissez Enter a stack ARN pour saisir l'ARN d'une pile existante.

      Si vous avez choisi Créer une nouvelle pile, saisissez le nom de la nouvelle pile dans Nom de la pile.

    2. Sous Remplacer le modèle existant par un modèle refactorisé, choisissez l'URL Amazon S3 ou Charger le fichier modèle pour télécharger le modèle souhaité pour la pile 2.

    3. Choisissez Suivant.

  8. Sur la page Spécifier les identifiants de ressources logiques renommés, assurez-vous de savoir CloudFormation comment refactoriser les piles en mappant toutes les ressources affichées à leur logique correcte. IDs Dans le cadre du refactor de pile, si la logique d'une ressource a IDs été modifiée, vous devez spécifier comment elle a été renommée en fournissant le nom de la pile source, l'ID logique d'origine, le nom de la pile de destination et l'ID logique renommé. Dans certains cas, la CloudFormation console peut détecter automatiquement le mappage des ressources, et vous pouvez simplement vérifier que le mappage des ressources prérempli est correct avant de continuer.

  9. Choisissez Suivant.

  10. Sur la page Révision et exécution, passez en revue toutes les sélections effectuées lors des étapes précédentes et vérifiez que tout est correctement configuré.

  11. Lorsque vous êtes prêt à refactoriser les piles, choisissez Execute stack refactor.

Piles de refactorisation ()AWS CLI

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.

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

Utilisez la procédure suivante pour refactoriser une pile à l’aide de AWS CLI.

Pour refactoriser des piles
  1. 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-creationoption 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-creation

    La 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-mappingsoption.

    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

    Voici un exemple de fichier resource-mapping.json.

    [ { "Source": { "StackName": "Stack1", "LogicalResourceId": "MySNSTopic" }, "Destination": { "StackName": "Stack2", "LogicalResourceId": "MyLambdaSNSTopic" } } ]
  2. 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" }
  3. 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" } } } ] }
  4. 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
  5. 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" }

Limite de ressources

  • La refactorisation de pile ne prend en charge que les types de ressources avec un provisioningType sur FULLY_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::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