本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
堆疊重構可簡化 CloudFormation 堆疊中的資源重組,同時仍保留現有的資源屬性和資料。透過堆疊重構,您可以在堆疊之間移動資源、將單體堆疊分割為較小的元件,或將多個堆疊合併為一個。
堆疊重構的運作方式
規劃堆疊重構時,請考慮以下步驟:
-
評估您目前的基礎設施:檢閱您現有的 CloudFormation 堆疊和資源,以識別堆疊重構機會。
-
規劃您的重構:定義應該如何組織資源。考慮您的相依性、命名慣例和操作限制。這些可能會影響稍後的 CloudFormation 驗證。
決定您要重構資源的目標堆疊數量。您可以在至少 2 個堆疊之間移動資源,最多 5 個堆疊。您可以在巢狀堆疊之間移動資源。
-
更新您的範本:修改 CloudFormation 範本以反映計劃的變更,例如在範本之間移動資源定義。您可以在重構期間重新命名邏輯 IDs。
-
建立堆疊重構:提供您要重構的堆疊名稱和範本清單。
-
檢閱對基礎設施的重構影響並解決任何衝突:CloudFormation 會驗證您提供的範本,並檢查跨堆疊相依性、具有標籤更新問題的資源類型,以及資源邏輯 ID 衝突。
如果驗證成功,CloudFormation 將產生重構動作的預覽,這些動作將在執行重構之後發生。
如果驗證失敗,您可以在解決找到的問題後重試。如果有衝突,您將需要提供資源邏輯 ID 映射,以顯示衝突中資源的來源和目的地。
-
執行重構:確認變更符合您希望重構堆疊的方式後,請執行堆疊重構。
-
監控:請參閱
ExecutionStatus
以取得堆疊重構的狀態,以確保其成功。
堆疊重構限制
規劃堆疊重構時,請考慮下列限制:
-
重構操作不允許新資源建立、資源刪除或變更資源組態。
-
您無法在堆疊重構期間變更或新增參數、條件或映射。可能的解決方法是在執行重構之前更新您的堆疊。
-
您無法將相同的資源重構為多個堆疊。
-
如果資源使用特定虛擬參數,則無法重構新堆疊的資源 (範例:
AWS::StackName
)。 -
CloudFormation 不支援空白堆疊。建立堆疊重構之前,您必須將資源新增至該堆疊,以移除堆疊中的所有現有資源。此資源可以是簡單的資源,例如
waitCondition
資源類型。 -
下列資源無法使用:
AWS::AppConfig::Extension
AWS::AppConfig::ExtensionAssociation
AWS::BackupGateway::Hypervisor
AWS::DataBrew::Dataset
AWS::DataBrew::Job
AWS::DataBrew::Project
AWS::DataBrew::Recipe
AWS::DataBrew::Ruleset
AWS::DataBrew::Schedule
AWS::FIS::ExperimentTemplate
AWS::MSK::ServerlessCluster
AWS::Omics::AnnotationStore
AWS::Omics::ReferenceStore
AWS::Omics::SequenceStore
AWS::OpenSearchServerless::Collection
AWS::Route53::RecordSetGroup
AWS::SageMaker::DataQualityJobDefinition
AWS::SageMaker::FeatureGroup
AWS::SageMaker::ModelBiasJobDefinition
AWS::SageMaker::ModelExplainabilityJobDefinition
AWS::SageMaker::ModelQualityJobDefinition
AWS::WAFv2::IPSet
AWS::WAFv2::RegexPatternSet
AWS::WAFv2::RuleGroup
AWS::WAFv2::WebACL
使用 重構堆疊 AWS Command Line Interface
下列命令用於堆疊重構:
以下是如何使用 AWS Command Line Interface (CLI) 重構堆疊的範例。
-
若要開始,您將需要要重構的 CloudFormation 範本。下列命令會擷取 範本:
aws cloudformation get-template --stack-name
ExampleStack1
取得範本後,請使用您選擇的整合開發環境 (IDE) 進行更新,以使用所需的結構和資源組織。
-
使用
create-stack-refactor
命令建立堆疊重構,並為涉及重構的每個堆疊提供堆疊名稱和範本:aws cloudformation create-stack-refactor \ --stack-definitions \ StackName=
MySns
,TemplateBody@=file://afterSns.yaml
\ StackName=MyLambdaSubscription
,TemplateBody@=file://afterLambda.yaml
\ --enable-stack-creation \ --resource-mappingsfile://refactor.json
參數是選用的,但如果在範本驗證期間偵測到衝突,則需要該
--resource mappings
參數。除了提供Source
和Destination
堆疊之外,您還需要提供LogicalResourceId
。以下是範例refactor.json
檔案。[ { "Source": { "StackName": "MySns", "LogicalResourceId": "MyFunction" }, "Destination": { "StackName": "MyLambdaSubscription", "LogicalResourceId": "Function" } } ]
-
建立重構之後,CloudFormation 會產生重構變更預覽,可讓您預覽提議的變更對基礎設施的影響。在此範例中,
StackRefactorId
建立的 是stack-refactor-1ab2-c34d-5ef6
。使用以下命令預覽變更:aws cloudformation list-stack-refactor-actions \ --stack-refactor-id
stack-refactor-1ab2-c34d-5ef6
-
檢閱並確認變更後,請使用
execute-stack-refactor
命令來完成重構程序:aws cloudformation execute-stack-refactor \ --stack-refactor-id
stack-refactor-1ab2-c34d-5ef6
-
執行 之後
execute-stack-refactor
,您可以使用下列命令監控操作的狀態:aws cloudformation describe-stack-refactor \ --stack-refactor-id
stack-refactor-1ab2-c34d-5ef6
CloudFormation 會自動更新重構操作
ExecutionStatus
的Status
和 。