Terraform пытается дублировать ресурсы каждый раз, когда модуль вызывается более одного раза - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь внедрить нашу AWS инфраструктуру в Terraform. В настоящее время моя рабочая структура выглядит примерно так:

modules
  └ vpc
      └ main.tf
      └ variables.tf
  └ iam
      └ main.tf
      └ variables.tf
main.tf
variables.tf
staging.tf
production.tf

Эта структура работает нормально, но я бы хотел перенести подготовку и производство в свои собственные модули, поэтому теперь она будет выглядеть примерно так:

modules
  └ vpc
      └ main.tf
      └ variables.tf
  └ iam
      └ main.tf
      └ variables.tf
env
  └ production
      └ main.tf
      └ variables.tf
  └ staging
      └ main.tf
      └ variables.tf
main.tf
variables.tf

Если при использовании этой структуры я пытаюсь импортировать модуль vp c в модуль подготовки и производства, план Terraform сообщает мне, что он создаст новые ресурсы vp c в пространстве имен: "module.staging.module .vp c ", мне даже не нужно ничего использовать из модуля iam - просто импортируйте его, и тогда terraform решит, что ему нужно создать все эти новые ресурсы. Есть ли способ решить эту проблему?

Вот что я имею в vpc / main.tf:

resource "aws_vpc" "pi-cloud" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "pi-cloud"
  }
}

И env / staging / main.tf:

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

Теперь план terraform дает мне такой вывод:

# module.staging.module.vpc.aws_vpc.pi-cloud will be created
  + resource "aws_vpc" "pi-cloud" {
      + arn                              = (known after apply)
      + assign_generated_ipv6_cidr_block = false
      + cidr_block                       = "10.0.0.0/16"
      + default_network_acl_id           = (known after apply)
      + default_route_table_id           = (known after apply)
      + default_security_group_id        = (known after apply)
      + dhcp_options_id                  = (known after apply)
      + enable_classiclink               = (known after apply)
      + enable_classiclink_dns_support   = (known after apply)
      + enable_dns_hostnames             = (known after apply)
      + enable_dns_support               = true
      + id                               = (known after apply)
      + instance_tenancy                 = "default"
      + ipv6_association_id              = (known after apply)
      + ipv6_cidr_block                  = (known after apply)
      + main_route_table_id              = (known after apply)
      + owner_id                         = (known after apply)
      + tags                             = {
          + "Name" = "pi-cloud"
        }
    }
...