Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Stack refactoring
Dengan pemfaktoran ulang tumpukan, Anda dapat mengatur ulang sumber daya di CloudFormation tumpukan sambil mempertahankan properti dan data sumber daya yang ada. Anda dapat memindahkan sumber daya antar tumpukan, membagi tumpukan besar menjadi yang lebih kecil, atau menggabungkan beberapa tumpukan menjadi satu tumpukan.
Topik
Cara kerja stack refactoring
Tumpukan refactoring melibatkan fase-fase ini:
-
Menilai infrastruktur Anda saat ini — Tinjau CloudFormation tumpukan dan sumber daya yang ada untuk mengidentifikasi peluang pemfaktoran ulang tumpukan.
-
Rencanakan refactor Anda — Tentukan bagaimana sumber daya harus diatur. Pertimbangkan dependensi, konvensi penamaan, dan batasan operasional Anda. Ini dapat mempengaruhi CloudFormation validasi nanti.
-
Tentukan tumpukan tujuan — Tentukan tumpukan mana yang akan Anda refactor sumber daya. Anda dapat memindahkan sumber daya antara setidaknya 2 tumpukan, dan maksimal 5 tumpukan. Sumber daya dapat dipindahkan di antara tumpukan bersarang.
-
Perbarui templat Anda — Ubah CloudFormation templat Anda untuk mencerminkan perubahan yang direncanakan, seperti memindahkan definisi sumber daya antar templat. Anda dapat mengganti nama logis IDs selama proses ini.
-
Buat refactor tumpukan - Berikan daftar nama tumpukan dan templat yang ingin Anda refactor.
-
Tinjau dampak refactor dan selesaikan konflik apa pun — CloudFormation memvalidasi template yang Anda berikan dan memeriksa dependensi lintas tumpukan, jenis sumber daya dengan masalah pembaruan tag, dan konflik ID logis sumber daya.
Jika validasi berhasil, CloudFormation akan menghasilkan pratinjau tindakan refactor yang akan terjadi selama eksekusi.
Jika validasi gagal, selesaikan masalah yang diidentifikasi dan coba lagi. Untuk konflik, berikan pemetaan ID logis sumber daya yang menunjukkan sumber dan tujuan sumber daya yang saling bertentangan.
-
Jalankan refactor — Setelah mengonfirmasi perubahan sejajar dengan tujuan refactoring Anda, selesaikan stack refactor.
-
Monitor — Lacak status eksekusi untuk memastikan operasi selesai dengan sukses.
Pertimbangan refactoring tumpukan
Saat Anda memfaktorkan ulang tumpukan Anda, ingatlah hal-hal berikut:
-
Operasi refactor tidak mengizinkan pembuatan sumber daya baru, penghapusan sumber daya, atau perubahan konfigurasi sumber daya.
-
Anda tidak dapat mengubah atau menambahkan parameter, kondisi, atau pemetaan baru selama refactor tumpukan. Solusi yang mungkin adalah memperbarui tumpukan Anda sebelum melakukan refactor.
-
Anda tidak dapat memfaktorkan ulang sumber daya yang sama menjadi beberapa tumpukan.
-
Anda tidak dapat memfaktorkan ulang sumber daya yang merujuk ke parameter semu yang nilainya berbeda antara tumpukan sumber dan tujuan, seperti.
AWS::StackName
-
CloudFormation tidak mendukung tumpukan kosong. Jika refactoring akan meninggalkan tumpukan tanpa sumber daya, Anda harus terlebih dahulu menambahkan setidaknya satu sumber daya ke tumpukan itu sebelum Anda menjalankannya. create-stack-refactor Ini bisa menjadi sumber daya sederhana seperti
AWS::SNS::Topic
atauAWS::CloudFormation::WaitCondition
. Misalnya:Resources: MySimpleSNSTopic: Type: AWS::SNS::Topic Properties: DisplayName: MySimpleTopic
-
Stack refactor tidak mendukung tumpukan yang memiliki kebijakan tumpukan yang dilampirkan, terlepas dari kebijakan apa yang diizinkan atau ditolak.
AWS CLI perintah untuk pemfaktoran ulang tumpukan
AWS CLI Perintah untuk stack refactoring meliputi:
-
create-stack-refactoruntuk memvalidasi dan menghasilkan pratinjau perubahan yang direncanakan.
-
describe-stack-refactoruntuk mengambil status dan detail operasi refactoring stack.
-
execute-stack-refactoruntuk menyelesaikan operasi refactoring stack yang divalidasi.
-
get-template untuk mengambil template untuk tumpukan yang ada.
-
list-stack-refactorsuntuk mencantumkan semua operasi pemfaktoran ulang tumpukan di akun Anda dengan status dan informasi dasarnya saat ini.
-
list-stack-refactor-actionsuntuk menampilkan pratinjau tindakan spesifik yang CloudFormation akan dilakukan pada setiap tumpukan dan sumber daya selama eksekusi refactor.
Memfaktorkan ulang tumpukan menggunakan AWS CLI
Gunakan prosedur berikut untuk memfaktorkan ulang tumpukan menggunakan. AWS CLI
-
Gunakan perintah get-template untuk mengambil CloudFormation template untuk tumpukan yang ingin Anda refactor.
aws cloudformation get-template --stack-name
Stack1
Ketika Anda memiliki template, gunakan lingkungan pengembangan terintegrasi (IDE) pilihan Anda untuk memperbaruinya untuk menggunakan struktur dan organisasi sumber daya yang diinginkan.
-
Gunakan create-stack-refactorperintah dan berikan nama tumpukan dan template yang diperbarui untuk tumpukan untuk refactor. Sertakan
--enable-stack-creation
opsi CloudFormation untuk memungkinkan membuat tumpukan baru jika belum ada.aws cloudformation create-stack-refactor \ --stack-definitions \ StackName=
Stack1
,TemplateBody@=file://template1-updated.yaml
\ StackName=Stack2
,TemplateBody@=file://template2-updated.yaml
\ --enable-stack-creationPerintah mengembalikan sebuah
StackRefactorId
yang akan Anda gunakan di langkah selanjutnya.{ "StackRefactorId": "9c384f70-4e07-4ed7-a65d-fee5eb430841" }
Jika konflik terdeteksi selama validasi template (yang dapat Anda konfirmasikan pada langkah berikutnya), gunakan create-stack-refactorperintah dengan
--resource-mappings
opsi.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
Berikut ini adalah contoh
resource-mapping.json
file.[ { "Source": { "StackName": "
Stack1
", "LogicalResourceId": "MySNSTopic
" }, "Destination": { "StackName": "Stack2
", "LogicalResourceId": "MyLambdaSNSTopic
" } } ] -
Gunakan describe-stack-refactorperintah untuk memastikan
Status
adaCREATE_COMPLETE
. Ini memverifikasi bahwa validasi selesai.aws cloudformation describe-stack-refactor \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
Contoh output:
{ "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" }
-
Gunakan list-stack-refactor-actionsperintah untuk melihat pratinjau tindakan spesifik yang akan dilakukan.
aws cloudformation list-stack-refactor-actions \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
Contoh output:
{ "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" } } } ] }
-
Setelah meninjau dan mengonfirmasi perubahan Anda, gunakan execute-stack-refactorperintah untuk menyelesaikan operasi pemfaktoran ulang tumpukan.
aws cloudformation execute-stack-refactor \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
-
Gunakan describe-stack-refactorperintah untuk memantau status eksekusi.
aws cloudformation describe-stack-refactor \ --stack-refactor-id
9c384f70-4e07-4ed7-a65d-fee5eb430841
Contoh output:
{ "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" }
Keterbatasan sumber daya
-
CloudFormation akan memvalidasi kelayakan sumber daya selama pembuatan refactor dan melaporkan sumber daya yang tidak didukung dalam output perintah. describe-stack-refactor
-
Sumber daya berikut tidak didukung untuk pemfaktoran ulang tumpukan:
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