【问题标题】:Moving resources between CloudFormation stacks在 CloudFormation 堆栈之间移动资源
【发布时间】:2019-05-09 18:06:01
【问题描述】:

假设我有一个带有 2 个 EC2 实例、1 个 S3 存储桶和 1 个 dynamoDb 表的 cloudformation 堆栈。 这个堆栈一切都很好,直到我们决定进行一些重构并将这个堆栈分成两个堆栈。只有 2 个 EC2 实例的堆栈 A 和具有 1 个 S3 存储桶和 1 个 dynamoDb 表的堆栈 B。

我的问题是:在不破坏和重新创建资源或进行迁移的情况下,最好的方法是什么? (我正在寻找类似于 terraform move state 的解决方案)。

您能否分享一下您是如何组织堆栈以及如何重构它们的。

【问题讨论】:

  • 这是一个一般很难解决的问题。我不认为有解决办法。另见sanderknape.com/2018/08/…
  • @jarmod,感谢您的链接,您知道 terraform state move 是否完全解决了这个问题?我正在阅读他们的文档,它看起来正是我们基本上需要的,我只是担心我可能会遗漏一些东西。
  • 很遗憾,我不熟悉 Terraform 功能。

标签: amazon-web-services amazon-cloudformation terraform


【解决方案1】:

目前,CloudFormation 中没有将对象/资源从一个堆栈移动到另一个堆栈的机制。

如果您使用Terraform 部署资源,那么是的,您可以使用terraform state mv 将资源从一个状态文件移动到另一个状态文件。 Terraform 状态文件与单个 Terraform 部署相关联,因此您可以将其视为类似于 CloudFormation 如何存储其部署在堆栈中的版本。

请注意,Terraform 状态移动并不是世界上最简单的事情,而且 AFAIK 没有 GUI 界面来协助移动。进行备份并留出时间进行测试。

不过,有一个名为 Terraboard 的项目是一个 GUI,可以帮助您检查状态文件。

【讨论】:

    【解决方案2】:

    现在一些资源支持在堆栈之间移动资源,包括 DynamoDb、EC2 实例和 S3 存储桶。 aws 文档位于 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/refactor-stacks.html 给出完整的细节和说明,开头是:

    使用资源导入功能,您可以在堆栈之间移动资源或重构堆栈。您需要先为要移动的资源添加 Retain 删除策略,以确保在将资源从源堆栈中删除并导入目标堆栈时保留该资源。

    重要

    并非所有资源都支持导入操作。从您的资源中删除资源之前,请参阅 Resources that Support Import Operations 堆。如果您删除不支持导入操作的资源 从您的堆栈中,您不能将资源导入另一个堆栈或 将其带回源堆栈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 2021-10-31
      • 2020-11-09
      • 2016-03-10
      • 2020-05-16
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多