如何使用 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 运行 plan 或 apply 时,它会查看状态文件,但找不到其中列出的新标识符。
您可以使用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 在多个区域进行设置?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Terraform 在可用性区域(单个区域)之间进行 Azure 恢复服务 VM 复制