【发布时间】:2021-07-13 06:35:11
【问题描述】:
terraform 可以有 2 个主文件,一个接一个地运行吗?
我需要在调用 main2 之前完全运行 main1,因为我的 main2 有 for_each,这需要事先创建资源。
与 main3 相同。
所以 main1 必须完全运行(terraform plan/apply)然后是 main2。
我的树形结构
├── 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
}
我需要模块transit_gateway_asso_prop 在应用上述模块后运行。
因为VPN_PROP_LIST、VPN_ASSO_LIST等vars会在transit_gateway_locals等上述模块应用后创建
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.
【问题讨论】:
标签: amazon-web-services terraform terraform-provider-aws