当前位置: 首页 > 知识库问答 >
问题:

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

裘臻
2023-03-14

问题:

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

为了指定更多资源,我们需要使用嵌套堆栈将模板拆分为多个模板,我们正在评估分解模板的最佳方法。

我们的做法:

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

错误:

我们在嵌套堆栈中遇到了一个错误。

资源已存在于根堆栈中

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

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

模板中的资源,

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

共有2个答案

桂高义
2023-03-14

AWS CloudFormation现在支持增加对五个服务配额的限制。现在是500而不是200。看看能不能帮上忙。

AWS将限制提高到500

公西修文
2023-03-14

你不能将现有资源“整合”到新的云信息栈中。如果将资源移动到嵌套堆栈中,并将嵌套堆栈添加到根模板中,它将尝试首先在嵌套堆栈中创建新资源,然后在清理过程中删除根堆栈中的旧资源。同样地,如果新资源具有相同的名称(并且不允许重复的名称),那么更新将失败。

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

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

 类似资料:
  • Back Stack是否支持与Android中的嵌套片段交互? 如果是这样,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后堆栈的事实。我希望这不是因为嵌套片段的问题,只是我做了一些不正确的事情。 以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:

  • 我有现有的EC2实例在AWS上运行。它是手动创建的。 有没有办法将现有实例移动到云形成堆栈中,并通过云形成对其进行更新?或者应该删除现有实例,并通过云形成创建新实例? 当我从模板创建新实例时。它在AWS上创建新实例。

  • 有没有办法将CloudFormation之外创建的现有AWS资源合并到现有的CloudFormation堆栈中?我希望这样做,而不必在CloudFormation堆栈中添加新资源,并将现有资源的数据迁移到该新资源。我看到AWS现在有云形成堆栈的漂移检测。我想知道是否可以利用它将现有资源合并到一个堆栈中。

  • 我正在使用AWS Lambda、API网关和CloudFormation开发REST API。我达到了Cloudformation 500资源限制,因此我不得不选择嵌套堆栈。下面是我试过的。 样板亚马尔 模板用户。亚马尔 模板2。亚马尔 这是可行的,但我注意到API网关为我创建的每个堆栈分配了不同的URL。在这个例子中,我有两个堆栈,API网关创建了两个URL。 URL-https://ez5kh

  • 我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?

  • 主要内容:Stack 类中的属性,Stack 类中的方法在 C# 中,堆栈(Stack)类表示一个后进先出的对象集合,当您需要对项目进行后进先出的访问时,则可以使用堆栈。向堆栈中添加元素称为推入元素,从堆栈中移除元素称为弹出元素。 Stack 类中的属性 下表列出了 Stack 类中一些常用的属性: 属性 描述 Count 获取堆栈中包含的元素个数 IsSynchronized 判断是否同步对堆栈的访问(线程安全) SyncRoot 获取可用于同步对堆