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

Posted

技术标签:

【中文标题】如何使用 terraform 在多个区域进行设置?【英文标题】:How can I use terraform to setup in multi regions? 【发布时间】:2021-01-19 16:08:45 【问题描述】:

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

目前我正在尝试使用提供者别名和模块将其部署在另一个区域。但是当我计划相同时,它说我需要销毁我以前的配置并通过模块重新创建它

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

这是预期的行为吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

非常感谢@Giulio Vian。我明白这一点:)【参考方案2】:

我建议您研究 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.hcls 以部署到不同的区域,而无需重新输入此信息。

如果您选择应用所有子 terraform 配置,Terragrunt 允许您运行 apply-all,但我不建议将其用于生产。

【讨论】:

我想知道 terragrunt 是否会有所帮助,因为我的 terraform tfstate 已经到位并且 terragrunt 不确定我是否可以让 terraform 了解我的资源已经到位并且不再旋转它,但我真的喜欢这个,将在 terragrunt 上阅读

以上是关于如何使用 terraform 在多个区域进行设置?的主要内容,如果未能解决你的问题,请参考以下文章

[S3使用Terraform进行跨区域复制

使用 Terraform 在可用性区域(单个区域)之间进行 Azure 恢复服务 VM 复制

如何使用 if、else、elsif 语句创建 Terraform?

如何安装多个或两个版本的 Terraform?

将内插值放入 Terraform 查找的最佳方法

如何使用 terraform 将多个 IP 动态添加到 azure servicebus 防火墙