Terraform 将状态中的所有内容向下移动到层次结构中

Terraform 将状态中的所有内容向下移动到层次结构中,terraform,Terraform,我正在terraform中重构一些代码,并希望将所有内容都移动到一个模块中。 找不到任何地形状态mv这样做的例子,可能吗? 举个例子来说明我的意思,假设我有 aws_iam_role.my_role aws_iam_role.my_second_role aws_iam_role.my_third_role 和许多其他资源(具有其他资源类型) 我想介绍一个模块,它包含当前目录中的所有内容,并且看起来像这样 aws_iam_role.module.my_module.my_role aws_ia

我正在terraform中重构一些代码,并希望将所有内容都移动到一个模块中。 找不到任何地形状态mv这样做的例子,可能吗? 举个例子来说明我的意思,假设我有

aws_iam_role.my_role
aws_iam_role.my_second_role
aws_iam_role.my_third_role
和许多其他资源(具有其他资源类型) 我想介绍一个模块,它包含当前目录中的所有内容,并且看起来像这样

aws_iam_role.module.my_module.my_role
aws_iam_role.module.my_module.my_second_role
aws_iam_role.module.my_module.my_third_role
只需一个terraform命令。

注意:操纵terraform状态总是会导致资源和数据的意外破坏。所以最好准备一个备份,至少还有一双眼睛。 最好阻止其他人应用更改,并停止任何应用更改的CI。


也就是说:

注意:新地址将是
module.my module.*
而不是
aws_*.module.my module.*

选项A:(你最初的想法) 我无法帮助您提供一种以自动化方式操作状态的简单方法,而只是使用
地形状态mv
逐个移动资源。 (此处描述:)

地形状态mv'aws\u iam\u role.my\u role''模块。my\u模块。aws\u iam\u role.my\u role'
地形状态mv“aws_iam_角色。我的第二个_角色”模块。我的模块。aws_iam_角色。我的第二个_角色”
地形状态mv“aws_iam_角色。我的第三个角色”模块。我的模块。aws_iam_角色。我的第三个角色”
选项B:(不推荐) 如果您知道自己在做什么,当然可以尝试手动操作statefile并执行搜索和替换。如果你对此不确定,最好不要这样做

此外,在您操作状态和移动资源时,请确保没有其他人正在部署,因为这可能会导致资源的意外破坏。原因:在此操作期间,您的状态文件和git存储库很可能不同步

选项C:(更安全的方式) 我建议进行更大的更改,如: 稍微安全一点的方法是为模块化版本创建一个新的状态文件。您需要使用
terraform import
将所有资源导入模块化版本。一旦完成并满意,您就可以弃用旧状态并继续使用新状态

如果您注意到已经有太多的资源,您可以利用这个机会将您的基础架构拆分为更小的模块。

注意:操纵地形状态总是会导致资源和数据的意外破坏。所以最好准备一个备份,至少还有一双眼睛。 最好阻止其他人应用更改,并停止任何应用更改的CI。


也就是说:

注意:新地址将是
module.my module.*
而不是
aws_*.module.my module.*

选项A:(你最初的想法) 我无法帮助您提供一种以自动化方式操作状态的简单方法,而只是使用
地形状态mv
逐个移动资源。 (此处描述:)

地形状态mv'aws\u iam\u role.my\u role''模块。my\u模块。aws\u iam\u role.my\u role'
地形状态mv“aws_iam_角色。我的第二个_角色”模块。我的模块。aws_iam_角色。我的第二个_角色”
地形状态mv“aws_iam_角色。我的第三个角色”模块。我的模块。aws_iam_角色。我的第三个角色”
选项B:(不推荐) 如果您知道自己在做什么,当然可以尝试手动操作statefile并执行搜索和替换。如果你对此不确定,最好不要这样做

此外,在您操作状态和移动资源时,请确保没有其他人正在部署,因为这可能会导致资源的意外破坏。原因:在此操作期间,您的状态文件和git存储库很可能不同步

选项C:(更安全的方式) 我建议进行更大的更改,如: 稍微安全一点的方法是为模块化版本创建一个新的状态文件。您需要使用
terraform import
将所有资源导入模块化版本。一旦完成并满意,您就可以弃用旧状态并继续使用新状态

如果您注意到已经有太多的资源,您可以利用这个机会将基础架构拆分为更小的模块