Я пытаюсь внедрить нашу 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"
}
}