如何使用terraform在多个区域中进行设置?

如何使用terraform在多个区域中进行设置?,terraform,Terraform,我有一个没有模块的terraform配置文件,它托管在生产环境中 目前,我正试图使用提供商别名和模块将其部署到另一个地区。但当我计划进行同样的部署时,它说我需要销毁以前的配置,并通过模块重新创建它 当我模块化这些文件时,terraform将其视为一种新的资源?我有大约35个资源,上面说35个要销毁,35个要创建。在模块化的过程中,我删除了根目录下的.terraform文件夹,并在主模块中对其进行了初始化 这是预期的行为吗?我建议您研究terragrunt,使代码更加枯燥。与Terragrunt集

我有一个没有模块的terraform配置文件,它托管在生产环境中

目前,我正试图使用提供商别名和模块将其部署到另一个地区。但当我计划进行同样的部署时,它说我需要销毁以前的配置,并通过模块重新创建它

当我模块化这些文件时,terraform将其视为一种新的资源?我有大约35个资源,上面说35个要销毁,35个要创建。在模块化的过程中,我删除了根目录下的.terraform文件夹,并在主模块中对其进行了初始化


这是预期的行为吗?

我建议您研究terragrunt,使代码更加枯燥。与Terragrunt集成后,您可以开始使用如下层次结构:

--root
  terragrunt.hcl
     |
     --dev_account
       account.hcl
       |
       --us-east-2
       region.hcl
         |
         --services
       --us-east-1
       --us-west-2
     --uat_account
       |
       --us-east-2
         |
         --services
       --us-east-1
       --us-west-2
     --prod_account
       |
       --us-east-2
         |
         --services
       --us-east-1
       --us-west-2
Terragrunt将允许您拥有一个模块,并且具有类似于此的层次结构,您将能够解析account.hcl和region.hcl以部署到不同的区域,而无需重新输入此信息


Terragrunt允许您在选择应用所有子terraform配置的情况下运行apply all,尽管我不建议在生产环境中使用它。

是的,这是预期的行为,因为资源现在具有不同的terraform标识符。当Terraform运行plan或apply时,它会在状态文件中查找,但找不到其中列出的新标识符


您可以使用命令解决这种情况。我已经成功地使用了它,但它是一项乏味的任务,而且很容易出错。我建议通过
-backup out
选项对您的状态文件进行额外备份,并在每次运行后检查计划。

非常感谢@Giulio Vian。我明白这一点:)我想知道terragrunt是否会有所帮助,因为我的terraform tfstate已经就位,terragrunt不确定我是否可以让terraform了解我的资源已经到位,不再旋转,但我真的很喜欢这个,将在terragrunt上阅读