Can terraform have 2 main files with one running after another ?
I need main1 to be ran fully before it calls main2 as my main2 has for_each
, which requires the resources to be created prior.
Same with main3.
So main1 has to be run fully (terraform plan/apply) then main2.
My tree structure
├── README.md
├── config
│ ├── prod
│ └── sandbox
│ └── us_east_2
│ ├── nonprod.tfvars
│ └── prod.tfvars
├── init
│ ├── prod
│ └── sandbox
│ └── us_east_2
│ ├── nonprod.tfvars
│ └── prod.tfvars
├── main.tf
├── modules
│ ├── create_transit_gateway
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── ec2
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── transit_gateway
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── transit_gateway_asso_prop
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── transit_gateway_locals
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ └── vpc
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── output.tf
└── variables.tf
provider "aws" {
region = var.REGION
}
module "create_transit_gateway" {
source = "./modules/create_transit_gateway"
REGION_SHORTHAND = var.REGION_SHORTHAND
TGW_LOCAL = var.TGW_LOCAL
ENV_NAME = var.ENV_NAME
AMAZON_SIDE_ASN = var.AMAZON_SIDE_ASN
}
module "vpc" {
depends_on = [module.create_transit_gateway]
source = "./modules/vpc"
NETWORK_VPC = var.NETWORK_VPC
SUBNETS = var.SUBNETS
ROUTE_TABLES = var.ROUTE_TABLES
ENV_NAME = var.ENV_NAME
TGW_LOCAL = var.TGW_LOCAL
REGION_SHORTHAND = var.REGION_SHORTHAND
}
module "ec2" {
depends_on = [module.create_transit_gateway, module.vpc]
source = "./modules/ec2"
FW_ASNS = var.FW_ASNS
FIREWALLS = var.FIREWALLS
AMI_IMAGE_KEY = var.AMI_IMAGE_KEY
REGION_SHORTHAND = var.REGION_SHORTHAND
ENV_NAME = var.ENV_NAME
VPC_ID = module.vpc.VPC_ID
AWS_SUBNETS = module.vpc.AWS_SUBNETS
}
module "transit_gateway" {
depends_on = [module.create_transit_gateway, module.ec2, module.vpc]
source = "./modules/transit_gateway"
REGION = var.REGION
TGW_LOCAL = var.TGW_LOCAL
ENV_NAME = var.ENV_NAME
SITE_CUSTOMER_GATEWAYS = var.SITE_CUSTOMER_GATEWAYS
EIP_FW1_NICS = module.ec2.EIP_FW1_NICS
EIP_FW2_NICS = module.ec2.EIP_FW2_NICS
AWS_SUBNETS = module.vpc.AWS_SUBNETS
FW_ASNS = var.FW_ASNS
TGW_PEERS = var.TGW_PEERS
VPC_ID = module.vpc.VPC_ID
TGW_ROUTE_TABLES = var.TGW_ROUTE_TABLES
REGION_SHORTHAND = var.REGION_SHORTHAND
AWS_ACCOUNT_ID = var.AWS_ACCOUNT_ID
}
module "transit_gateway_locals" {
depends_on = [module.create_transit_gateway, module.transit_gateway]
source = "./modules/transit_gateway_locals"
REGION = var.REGION
TGW_PEERS = var.TGW_PEERS
TGA_VPC_ATTACHMENT = module.vpc.TG_VPC_ATTACHMENT
ENV_NAME = var.ENV_NAME
AWS_ACCOUNT_ID = var.AWS_ACCOUNT_ID
NETWORK_S2S_VPN = module.transit_gateway.NETWORK_S2S_VPN
NETWORK_TGW_RT = module.transit_gateway.NETWORK_TGW_RT
TGW_PEERS_RESOURCE = module.transit_gateway.TGW_PEERS_RESOURCE
PEER_ACCEPTOR_STATUS = module.transit_gateway.PEER_ACCEPTOR_STATUS
}
module "transit_gateway_asso_prop" {
depends_on = [module.transit_gateway_locals]
source = "./modules/transit_gateway_asso_prop"
REGION = var.REGION
VPC_ASSO_LIST = module.transit_gateway_locals.VPC_ASSO_LIST
VPC_PROP_LIST = module.transit_gateway_locals.VPC_PROP_LIST
VPN_ASSO_LIST = module.transit_gateway_locals.VPN_ASSO_LIST
VPN_PROP_LIST = module.transit_gateway_locals.VPN_PROP_LIST
PEER_ASSO_LIST = module.transit_gateway_locals.PEER_ASSO_LIST
SEC_STATIC_LIST = module.transit_gateway_locals.SEC_STATIC_LIST
TGW_PEERS = var.TGW_PEERS
ENV_NAME = var.ENV_NAME
}
I need module transit_gateway_asso_prop
to run after apply of the above modules.
As vars like VPN_PROP_LIST
, VPN_ASSO_LIST
etc. will be created after the transit_gateway_locals
and other above modules are applied
Error: Invalid for_each argument
on modules/transit_gateway_asso_prop/main.tf line 325, in resource "aws_ec2_transit_gateway_route_table_propagation" "NETWORK-TGW-VPNPROPAGATION":
325: for_each = var.VPN_PROP_LIST
The "for_each" value depends on resource attributes that cannot be determined
until apply, so Terraform cannot predict how many instances will be created.
To work around this, use the -target argument to first apply only the
resources that the for_each depends on.