繁体   English   中英

如何将现有 CloudFormation 堆栈分解为单独的嵌套堆栈,将现有资源移动到嵌套堆栈下

[英]How to break existing CloudFormation stack into separate nested stacks, moving existing resources under nested stack

问题:

最近,我们遇到了关于您可以在单个 CloudFormation 模板中声明的最大资源数量的问题。 一个模板最多可以支持 200 个资源,我们非常接近这个限制。

为了指定更多资源,我们需要使用Nested Stacks将我们的模板分成多个模板,我们正在评估分解模板的最佳方法。

我们的方法:

我们从主堆栈创建了一个嵌套堆栈,并从主堆栈中删除了一些资源并将它们添加到新的嵌套堆栈中。

错误:

我们在嵌套堆栈中遇到错误,例如

资源已存在于根堆栈中

1.是否可以将我们的主模板分解为现有资源的嵌套堆栈? 即移动我们现有的资源嵌套堆栈下? 或者我们只需要将新资源添加到嵌套堆栈中并保持我们的主堆栈与现有资源一样?

2.我们已经达到了 200 个资源限制,因此也很难添加更多嵌套堆栈。

模板中的资源,

我们大约有 100 个 CloudWatch 警报、DynamoDB 表、Lambda、ES、KMS、S3 和其他资源,我们不想将它们分成特定于资源类型的嵌套堆栈。

您无法将现有资源“合并”到新的 CloudFormation 堆栈中。 如果您将资源移动到嵌套堆栈中并将嵌套堆栈添加到您的根模板中,它将首先尝试在嵌套堆栈中创建新资源,然后在清理过程中删除根堆栈中的旧资源。 因此,如果新资源具有相同的名称(并且不允许重复名称),则更新将失败。

解决方案是分两个阶段部署堆栈,首先从根堆栈中删除资源,然后将它们添加到嵌套堆栈中。 这将导致您的环境中缺少这些资源的时间很短,但如果您保持较小的迁移,它应该只持续几分钟。

以这种方式迁移包含状态的资源(如 DynamoDB、KMS、S3 等)要困难得多,因为删除它们时数据显然会丢失。 您要么需要执行完整的迁移过程,在嵌套堆栈中创建一个具有不同名称的新资源,迁移数据,更新您的应用程序以使用新资源,最后删除旧资源,要么接受这可能太远了为内部重构做了很多工作,并将这些资源留在根模板中。

AWS CloudFormation 现在支持增加对五个服务配额的限制。 现在是 500 而不是 200。看看是否对你有帮助。

AWS 将限制增加到 500

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM