让我们想象一下,我有一个包含2个EC2实例,1个S3存储桶和1个dynamoDb表的cloudformation堆栈。 在我们决定进行一些重构并将该堆栈分成两个堆栈之前,此堆栈一切都很好。堆栈A仅具有2个EC2实例,堆栈B具有1个S3存储桶和1个dynamoDb表。
我的问题是:在不破坏和重新创建资源或进行迁移的情况下,做到这一点的最佳方法是什么? (我正在寻找类似于terraform移动状态的解决方案。)
能否请您分享一下如何组织堆栈以及如何重构堆栈。
答案 0 :(得分:2)
当前,CloudFormation中没有将对象/资源从一个堆栈移动到另一个堆栈的机制。
如果您已使用Terraform来部署资源,那么可以,您可以使用terraform state mv
将资源从一个状态文件移动到另一个状态文件。 Terraform 状态文件与单个Terraform部署相关联,因此您可以认为它类似于CloudFormation如何存储其在堆栈中部署的版本。
请注意,Terraform状态移动并不是世界上最简单的事情,并且AFAIK没有GUI界面可协助移动。进行备份并预留时间进行测试。
但是,有一个名为Terraboard的项目,它是一个GUI,可以帮助您检查状态文件。
答案 1 :(得分:1)
现在支持某些资源(包括DynamoDb,EC2实例和S3存储桶)在堆栈之间移动资源。的AWS文档 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/refactor-stacks.html从以下内容开始提供完整的详细信息和说明:
使用资源导入功能,可以在堆栈之间移动资源或重构堆栈。您首先需要向要移动的资源添加保留删除策略,以确保在从源堆栈中删除该资源并将其导入到目标堆栈时保留该资源。
重要
并非所有资源都支持导入操作。从资源中删除资源之前,请参见Resources that Support Import Operations 堆栈。如果删除不支持导入操作的资源 从您的堆栈中,您无法将资源导入另一个堆栈或 将其带回源堆栈。