在CloudFormation堆栈之间移动资源



让我们想象一下,我有一个cloudformation堆栈,其中有2个EC2实例、1个S3 bucket和1个dynamoDb表。这个堆栈一切都很好,直到我们决定进行一些重构并将这个堆栈拆分为两个堆栈。只有2个EC2实例的堆栈A和有1个S3 bucket和1个dynamoDb表的堆栈B。

我的问题是:在不破坏和重新创造资源或进行移民的情况下,最好的方法是什么?(我正在寻找一个类似地形移动状态的解决方案(。

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

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

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

重要

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

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

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

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

然而,有一个名为Terraboard的项目,它是一个GUI,可以帮助检查状态文件。

最新更新