solution/solution-vpc-interconnection-using-peering-and-tr/main.tf (182 lines of code) (raw):
data "alicloud_account" "current" {
}
locals {
role_name = var.role_name
user1_id = var.use_resource_directory && var.user1_id != "" ? var.user1_id : data.alicloud_account.current.id
user2_id = var.use_resource_directory ? var.user2_id : var.user2_id_not_from_rd
user1_is_admin = local.user1_id == data.alicloud_account.current.id ? true : false
user2_is_admin = local.user2_id == data.alicloud_account.current.id ? true : false
}
# provider
provider "alicloud" {
alias = "user1"
region = var.region
assume_role {
role_arn = local.user1_is_admin ? null : format("acs:ram::%s:role/%s", local.user1_id, local.role_name)
session_name = "AccountLandingZoneSetup"
session_expiration = 999
}
}
provider "alicloud" {
alias = "user2"
region = var.region
assume_role {
role_arn = local.user2_is_admin ? null : format("acs:ram::%s:role/%s", local.user2_id, local.role_name)
session_name = "AccountLandingZoneSetup"
session_expiration = 999
}
}
module "user1_vpc" {
count = 2
source = "./vpc"
providers = {alicloud: alicloud.user1}
vpc_cidr = [var.vpc1_cidr, var.vpc2_cidr][count.index]
vsw_cidr = [var.vsw1_cidr, var.vsw2_cidr][count.index]
zone_id = var.zone_id
}
module "user2_vpc" {
count = 2
source = "./vpc"
providers = {alicloud: alicloud.user2}
vpc_cidr = [var.vpc3_cidr, var.vpc4_cidr][count.index]
vsw_cidr = [var.vsw3_cidr, var.vsw4_cidr][count.index]
zone_id = var.zone_id
}
resource "alicloud_cen_instance" "cen" {
provider = alicloud.user2
cen_instance_name = "云上企业网络"
}
resource "alicloud_cen_transit_router" "tr" {
provider = alicloud.user2
cen_id = alicloud_cen_instance.cen.id
}
locals {
vpc_ids = concat(module.user1_vpc.*.vpc_id, module.user2_vpc.*.vpc_id)
vsw_ids = concat(module.user1_vpc.*.vsw_id, module.user2_vpc.*.vsw_id)
}
resource "alicloud_cen_instance_grant" "grant" {
count = 2
provider = alicloud.user1
cen_id = alicloud_cen_instance.cen.id
child_instance_id = local.vpc_ids[count.index]
cen_owner_id = local.user2_id
}
resource "alicloud_cen_transit_router_vpc_attachment" "vpc_att" {
provider = alicloud.user2
count = 4
transit_router_attachment_name = format("vpc_attachment_%s", count.index+1)
cen_id = alicloud_cen_instance.cen.id
transit_router_id = alicloud_cen_transit_router.tr.transit_router_id
vpc_id = local.vpc_ids[count.index]
vpc_owner_id = count.index < 2? local.user1_id : null
zone_mappings {
zone_id = var.zone_id
vswitch_id = local.vsw_ids[count.index]
}
depends_on = [alicloud_cen_instance_grant.grant]
}
resource "alicloud_vpc_peer_connection" "peer" {
provider = alicloud.user1
vpc_id = module.user1_vpc[1].vpc_id
accepting_ali_uid = local.user2_id
accepting_region_id = var.region
accepting_vpc_id = module.user2_vpc[1].vpc_id
}
resource "alicloud_vpc_peer_connection_accepter" "default" {
provider = alicloud.user2
instance_id = alicloud_vpc_peer_connection.peer.id
}
module "user1_ecs" {
count = 2
source = "./ecs"
providers = {alicloud: alicloud.user1}
create_ecs = var.create_ecs
vpc_id = module.user1_vpc[count.index].vpc_id
vsw_id = module.user1_vpc[count.index].vsw_id
zone_id = var.zone_id
instance_type = var.instance_type
system_disk_category = var.system_disk_category
ecs_password = var.ecs_password
instance_name = format("test_ecs%s",count.index+1)
}
module "user2_ecs" {
count = 2
source = "./ecs"
providers = {alicloud: alicloud.user2}
create_ecs = var.create_ecs
vpc_id = module.user2_vpc[count.index].vpc_id
vsw_id = module.user2_vpc[count.index].vsw_id
zone_id = var.zone_id
instance_type = var.instance_type
system_disk_category = var.system_disk_category
ecs_password = var.ecs_password
instance_name = format("test_ecs%s",count.index+3)
}
locals {
tr_attachment_ids = alicloud_cen_transit_router_vpc_attachment.vpc_att.*.transit_router_attachment_id
}
resource "alicloud_route_entry" "route_entry1" {
provider = alicloud.user1
for_each = toset([var.vpc1_cidr, var.vpc2_cidr, var.vpc3_cidr, var.vpc4_cidr])
route_table_id = module.user1_vpc[0].route_table_id
destination_cidrblock = each.key
nexthop_type = "Attachment"
nexthop_id = local.tr_attachment_ids[0]
}
resource "alicloud_route_entry" "route_entry2" {
provider = alicloud.user1
for_each = toset([var.vpc1_cidr, var.vpc2_cidr, var.vpc3_cidr])
route_table_id = module.user1_vpc[1].route_table_id
destination_cidrblock = each.key
nexthop_type = "Attachment"
nexthop_id = local.tr_attachment_ids[1]
}
resource "alicloud_route_entry" "route_entry3" {
provider = alicloud.user2
for_each = toset([var.vpc1_cidr, var.vpc2_cidr, var.vpc3_cidr, var.vpc4_cidr])
route_table_id = module.user2_vpc[0].route_table_id
destination_cidrblock = each.key
nexthop_type = "Attachment"
nexthop_id = local.tr_attachment_ids[2]
}
resource "alicloud_route_entry" "route_entry4" {
provider = alicloud.user2
for_each = toset([var.vpc1_cidr, var.vpc3_cidr, var.vpc4_cidr])
route_table_id = module.user2_vpc[1].route_table_id
destination_cidrblock = each.key
nexthop_type = "Attachment"
nexthop_id = local.tr_attachment_ids[3]
}
resource "alicloud_route_entry" "route_entry_peer2" {
provider = alicloud.user1
route_table_id = module.user1_vpc[1].route_table_id
destination_cidrblock = var.vpc4_cidr
nexthop_type = "VpcPeer"
nexthop_id = alicloud_vpc_peer_connection.peer.id
depends_on = [alicloud_vpc_peer_connection_accepter.default]
}
resource "alicloud_route_entry" "route_entry_peer4" {
provider = alicloud.user2
route_table_id = module.user2_vpc[1].route_table_id
destination_cidrblock = var.vpc2_cidr
nexthop_type = "VpcPeer"
nexthop_id = alicloud_vpc_peer_connection.peer.id
depends_on = [alicloud_vpc_peer_connection_accepter.default]
}
resource "alicloud_cen_transit_router_route_table" "route_table" {
provider = alicloud.user2
transit_router_id = alicloud_cen_transit_router.tr.transit_router_id
}
resource "alicloud_cen_transit_router_route_entry" "route_entry1" {
provider = alicloud.user2
count = 4
transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table.transit_router_route_table_id
transit_router_route_entry_destination_cidr_block = [var.vpc1_cidr, var.vpc2_cidr, var.vpc3_cidr, var.vpc4_cidr][count.index]
transit_router_route_entry_next_hop_type = "Attachment"
transit_router_route_entry_next_hop_id = local.tr_attachment_ids[count.index]
}
resource "alicloud_cen_transit_router_route_table_association" "association" {
provider = alicloud.user2
count = 4
transit_router_route_table_id = alicloud_cen_transit_router_route_table.route_table.transit_router_route_table_id
transit_router_attachment_id = local.tr_attachment_ids[count.index]
}