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

Amazon web services 如何将现有CloudFormation堆栈拆分为单独的嵌套堆栈,将现有资源移动到嵌套堆栈下,amazon-web-services,amazon-ec2,aws-lambda,aws-sdk,amazon-cloudformation,Amazon Web Services,Amazon Ec2,Aws Lambda,Aws Sdk,Amazon Cloudformation,问题: 最近,我们遇到了一个关于您可以在单个CloudFormation模板中声明的最大资源数量的问题。 一个模板最多可以支持200个资源,我们很快就会达到这个极限 为了指定更多的资源,我们需要使用, 我们正在评估分解模板的最佳方法 我们的方法: 我们已经从主堆栈中创建了一个嵌套堆栈,并从主堆栈中删除了一些资源,并将它们添加到新的嵌套堆栈中 错误: 我们在嵌套堆栈中遇到错误,例如 资源已存在于根堆栈中 1.是否可以使用现有资源将主模板分解为嵌套堆栈?i、 是否将现有资源移动到嵌套堆栈下? 或者我

问题:

最近,我们遇到了一个关于您可以在单个CloudFormation模板中声明的最大资源数量的问题。 一个模板最多可以支持200个资源,我们很快就会达到这个极限

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

我们的方法:

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

错误:

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

资源已存在于根堆栈中

1.是否可以使用现有资源将主模板分解为嵌套堆栈?i、 是否将现有资源移动到嵌套堆栈下? 或者我们只需要将新资源添加到嵌套堆栈中,并保持主堆栈与现有资源相同

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

模板中的资源,


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

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

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


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

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


目前,如果您不希望重新创建整个堆栈,并且如果它导致任何数据丢失,那么最好保持堆栈不变,并在嵌套堆栈的帮助下仅创建新资源。然后花足够的时间将堆栈分解成嵌套堆栈并执行迁移过程。决定执行相同的操作,