スタックリファクタリングにより、既存のリソースプロパティおよびデータを維持しながら、CloudFormation スタックのリソースの再編成が簡素化されます。スタックリファクタリングを使用すると、スタック間でリソースを移動したり、モノリシックスタックを小さなコンポーネントに分割したり、複数のスタックを 1 つに統合したりできます。
スタックリファクタリングの仕組み
スタックのリファクタリングを計画する際、以下のステップを検討してください。
-
現在のインフラストラクチャを評価する: 既存の CloudFormation スタックおよびリソースを確認し、スタックのリファクタリング機会を特定します。
-
リファクタリングを計画する: リソースの整理方法を定義します。依存関係、命名規則、運用上の制限を検討してください。後に CloudFormation の検証に影響する可能性があります。
リソースをリファクタリングする送信先スタックの数を決定します。リソースは、2 から 5 つまでのスタック間で移動できます。リソースはネストされたスタック間で移動できます。
-
テンプレートを更新する: テンプレート間でリソース定義を移動するなど、計画された変更を反映するために CloudFormation テンプレートを変更します。リファクタリング中に論理 ID の名前を変更できます。
-
スタックリファクタリングを作成する: リファクタリングするスタック名およびテンプレートのリストを指定します。
-
インフラストラクチャに対するリファクタリングの影響を確認し、競合を解決する: 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::WAFv2::IPSet
AWS::WAFv2::RegexPatternSet
AWS::WAFv2::RuleGroup
AWS::WAFv2::WebACL
AWS::SageMaker::DataQualityJobDefinition
AWS::SageMaker::FeatureGroup
AWS::SageMaker::ModelBiasJobDefinition
AWS::SageMaker::ModelExplainabilityJobDefinition
AWS::SageMaker::ModelQualityJobDefinition
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
も指定する必要があります。この例では、作成された
StackRefactorId
はstack-refactor-1ab2-c34d-5ef6
です。 -
リファクタリングを作成したら、CloudFormation はリファクタリング変更プレビューを生成します。これにより、提案された変更がインフラストラクチャに与える影響をプレビューできます。次のコマンドを使用して変更をプレビューします。
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 は、リファクタリングオペレーションの
Status
およびExecutionStatus
を自動的に更新します。