向 Terraform 模块添加计数

Adding count to terraform module

在添加计数之前,我已经通过下面列出的这个模块部署了我的 VPC。

这工作得很好,但是要改变我们的基础设施,我需要向模块添加一个计数

module "core_vpc" {
  source = "./modules/vpc"

  count          = var.environment == "qa" || var.environment == "production" ? 1 : 0
  aws_region     = var.aws_region
  environment    = var.environment
  system         = var.system
  role           = var.system
  vpc_name       = var.system
  vpc_cidr       = var.vpc_cidr
  ssh_key_name   = var.ssh_key_name
  ssh_key_public = var.ssh_key_public
  nat_subnets    = var.nat_subnets
  nat_azs        = var.vpc_subnet_azs

}

现在 Terraform 想要更新我的状态文件并销毁我的大部分配置并将其替换为下面示例中显示的内容。这当然不仅限于路由关联,而且在 module.I 中创建的所有资源都不能让这种情况发生,因为我有生产 运行 并且不想弄乱它。

 module.K8_subnets.aws_route_table_association.subnet[0] will be destroyed

并将其替换为:

module.K8_subnets[0].aws_route_table_association.subnet[0] will be created

有没有办法阻止 Terraform 进行这些更改?无需在 tf-state 中手动更改它。 我想要的只是 VPC 不部署在 DEV 中。

谢谢。

您可以使用 tf state mv src target“移动”terraform 状态。具体来说,您可以将旧的非计数器版本移动到索引 0 处的新计数版本:

terraform state mv 'module.K8_subnets' 'module.K8_subnets[0]'

这适用于单个资源以及整个模块。它也适用于 for_each 资源,在那里你不会有一个索引,而是一个要移动到的键。 如果您删除 count / for_each 但仍想保留资源,这甚至可以反过来工作。