example/03-complex-enterprise/foundations/modules/networking/network/main.tf (97 lines of code) (raw):
# 创建企业专有网络 Shared Service VPC
resource "alicloud_vpc" "vpc_shared_service" {
name = var.network_settings.vpc_shared_services.vpc_name
cidr_block = var.network_settings.vpc_shared_services.cidr_block
}
# 创建 Shared Service VPC 内的交换机
resource "alicloud_vswitch" "shared_service_vswitches" {
for_each = {
for vsw in var.network_settings.vpc_shared_services.vswitches : "${vsw.vswitch_name}" => vsw
}
name = each.value.vswitch_name
vpc_id = alicloud_vpc.vpc_shared_service.id
cidr_block = each.value.cidr_block
availability_zone = each.value.zone
}
# 创建企业专有网络 DMZ VPC
resource "alicloud_vpc" "vpc_dmz" {
name = var.network_settings.vpc_dmz.vpc_name
cidr_block = var.network_settings.vpc_dmz.cidr_block
}
# 创建 DMZ VPC 内的交换机
resource "alicloud_vswitch" "dmz_vswitches" {
for_each = {
for vsw in var.network_settings.vpc_dmz.vswitches : "${vsw.vswitch_name}" => vsw
}
name = each.value.vswitch_name
vpc_id = alicloud_vpc.vpc_dmz.id
cidr_block = each.value.cidr_block
availability_zone = each.value.zone
}
# 创建 Production VPC
resource "alicloud_vpc" "vpc_production" {
name = var.network_settings.vpc_production.vpc_name
cidr_block = var.network_settings.vpc_production.cidr_block
}
# 创建 Non-Production VPC
resource "alicloud_vpc" "vpc_non_production" {
name = var.network_settings.vpc_non_production.vpc_name
cidr_block = var.network_settings.vpc_non_production.cidr_block
}
# 创建NAT,eip,共享带宽
module "nat" {
source = "./nat"
count = var.network_settings.vpc_dmz.natgateway_enabled ? 1 : 0
vpc_id = alicloud_vpc.vpc_dmz.id
eip_bandwidth = var.network_settings.vpc_dmz.eip_bandwidth
eip_internet_charge_type = var.network_settings.vpc_dmz.eip_internet_charge_type
common_bandwidth_package_enabled = var.network_settings.vpc_dmz.common_bandwidth_package_enabled
common_bandwidth_package_bandwidth = var.network_settings.vpc_dmz.common_bandwidth_package_bandwidth
common_bandwidth_package_internet_charge_type = var.network_settings.vpc_dmz.common_bandwidth_package_internet_charge_type
}
# 创建 CEN
resource "alicloud_cen_instance" "cen" {
cen_instance_name = "cen"
}
locals {
vpc_ids = [
alicloud_vpc.vpc_shared_service.id,
alicloud_vpc.vpc_dmz.id,
alicloud_vpc.vpc_production.id,
alicloud_vpc.vpc_non_production.id
]
}
data "alicloud_vpcs" "vpcs_ds" {
ids = local.vpc_ids
}
resource "alicloud_cen_instance_attachment" "cen_shared_service_vpc_attachment" {
instance_id = alicloud_cen_instance.cen.id
child_instance_id = alicloud_vpc.vpc_shared_service.id
child_instance_region_id = var.region
child_instance_type = "VPC"
}
resource "alicloud_cen_instance_attachment" "cen_dmz_vpc_attachment" {
instance_id = alicloud_cen_instance.cen.id
child_instance_id = alicloud_vpc.vpc_dmz.id
child_instance_region_id = var.region
child_instance_type = "VPC"
}
resource "alicloud_cen_instance_attachment" "cen_production_vpc_attachment" {
instance_id = alicloud_cen_instance.cen.id
child_instance_id = alicloud_vpc.vpc_production.id
child_instance_region_id = var.region
child_instance_type = "VPC"
}
resource "alicloud_cen_instance_attachment" "cen_non_production_vpc_attachment" {
instance_id = alicloud_cen_instance.cen.id
child_instance_id = alicloud_vpc.vpc_non_production.id
child_instance_region_id = var.region
child_instance_type = "VPC"
}
# 发布nat自定义路由到云企业网
data "alicloud_route_tables" "vpc_route_table_ds" {
vpc_id = alicloud_vpc.vpc_dmz.id
}
resource "alicloud_cen_route_entry" "cen_nat_route_entry" {
count = var.network_settings.vpc_dmz.natgateway_enabled ? 1 : 0
instance_id = alicloud_cen_instance.cen.id
route_table_id = data.alicloud_route_tables.vpc_route_table_ds.ids[0]
cidr_block = "0.0.0.0/0"
}
module "bastionhost" {
source = "./bastion"
count = var.network_settings.bastion_host_enabled ? 1 : 0
vswitch_id = alicloud_vswitch.shared_service_vswitches.0.id
# TODO security group id
security_group_ids = []
}