diff --git a/vpc-transit-gateway-association/self/README.md b/vpc-transit-gateway-association/self/README.md index 2c0b6b3..5e5bf9e 100644 --- a/vpc-transit-gateway-association/self/README.md +++ b/vpc-transit-gateway-association/self/README.md @@ -261,6 +261,7 @@ module "vpc_tgw_self" { | [create\_prefix\_list\_routing](#input\_create\_prefix\_list\_routing) | Flag to create (or not) prefix list routing. This is to be applied only on the TGW main account and VPCs | `bool` | `false` | no | | [create\_static\_peer\_routing](#input\_create\_static\_peer\_routing) | Flag to create (or not) static peer. This can be applied on every account including the TGW main account. This conflicts with craete\_prefix\_list\_routing | `bool` | `false` | no | | [data\_input](#input\_data\_input) | Map of data generated by vpc-transit-gateway-association-data |
object({
availablity_zone = map(any)
gateway_self = string
gateway_peer = string
route_tables_self = map(any)
route_tables_peer = map(any)
map_route_tables_self = map(any)
map_route_tables_peer = map(any)
map_vpn_route_tables_self = map(any)
map_vpn_route_tables_peer = map(any)
prefix_list_id_ipv4 = string
vpn_prefix_list_id_ipv4 = string
vpc_id = string
vpc_cidr_block = string
vpc_cidr_blocks = list(string)
}) | n/a | yes |
+| [enable\_tgw\_attachment](#input\_enable\_tgw\_attachment) | Flag to enable or disable attachment to Transit Gateway (for subnets with separate route tables which are not the attachment subnets) | `bool` | `true` | no |
| [enable\_vpn\_routing](#input\_enable\_vpn\_routing) | Flag to enable VPN routing, handled through a prefix list. This is used in the transition from per-VPC VPNs to TGW | `bool` | `true` | no |
| [network\_account\_profile](#input\_network\_account\_profile) | AWS profile of the source account sharing the VPC resources | `string` | n/a | yes |
| [override\_prefixes](#input\_override\_prefixes) | Override built-in prefixes by component. This should be used primarily for common infrastructure things | `map(string)` | `{}` | no |
diff --git a/vpc-transit-gateway-association/self/associate.tf b/vpc-transit-gateway-association/self/associate.tf
index c57a1f9..e8146e2 100644
--- a/vpc-transit-gateway-association/self/associate.tf
+++ b/vpc-transit-gateway-association/self/associate.tf
@@ -10,6 +10,7 @@ locals {
# attach this vpc to tgw (my region, my account)
#---
resource "aws_ec2_transit_gateway_vpc_attachment" "vpc_attachment" {
+ count = var.enable_tgw_attachment ? 1 : 0
provider = aws
# subnet_ids = [for sn in module.subnets.private_subnets_ids : sn.id if lookup(sn.tags, "boc:vpc:route-table", null) == "attachment"]
subnet_ids = [for k, v in var.private_subnets_ids : v.id]
@@ -33,24 +34,25 @@ resource "aws_ec2_transit_gateway_vpc_attachment" "vpc_attachment" {
# if this is the network account, no need to add the additional tags as they are already there
resource "aws_ec2_tag" "vpc_attachment" {
provider = aws.self
- for_each = ! local.self_is_network_account ? merge(local.base_tags, var.tags, local.attachment_tags) : {}
+ for_each = var.enable_tgw_attachment && ! local.self_is_network_account ? merge(local.base_tags, var.tags, local.attachment_tags) : {}
- resource_id = aws_ec2_transit_gateway_vpc_attachment.vpc_attachment.id
+ resource_id = try(aws_ec2_transit_gateway_vpc_attachment.vpc_attachment[0].id, null)
key = each.key
value = each.value
}
output "vpc_attachment_id" {
description = "Transit Gateway VPC Attachment ID for this VPC"
- value = aws_ec2_transit_gateway_vpc_attachment.vpc_attachment.id
+ value = try(aws_ec2_transit_gateway_vpc_attachment.vpc_attachment[0].id, null)
}
#---
# assocaite this vpc to route table in self (my region, network account)
#---
resource "aws_ec2_transit_gateway_route_table_association" "route_table_self" {
+ count = var.enable_tgw_attachment ? 1 : 0
provider = aws.self
- transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.vpc_attachment.id
+ transit_gateway_attachment_id = try(aws_ec2_transit_gateway_vpc_attachment.vpc_attachment[0].id, null)
# transit_gateway_route_table_id = local.transit_gateway_route_table_ids_self[var.transit_gateway_environment]
transit_gateway_route_table_id = var.data_input.map_route_tables_self[var.transit_gateway_environment]
}
@@ -75,9 +77,9 @@ locals {
resource "aws_ec2_transit_gateway_route_table_propagation" "vpc_self_own_rt" {
provider = aws.self
# for_each = var.transit_gateway_environment == "services" ? { for k in local.selected_rt : k => local.transit_gateway_route_table_ids_self[k] } : { (var.transit_gateway_environment) = local.transit_gateway_route_table_ids_self[var.transit_gateway_environment] }
- for_each = var.transit_gateway_environment == "services" ? { for k in local.selected_rt : k => var.data_input.map_route_tables_self[k] } : { (var.transit_gateway_environment) = var.data_input.map_route_tables_self[var.transit_gateway_environment] }
+ for_each = var.transit_gateway_environment == "services" ? { for k in local.selected_rt : k => var.data_input.map_route_tables_self[k] if var.enable_vpc_attachment } : var.enable_vpc_attachment ? { (var.transit_gateway_environment) = var.data_input.map_route_tables_self[var.transit_gateway_environment] } : {}
- transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.vpc_attachment.id
+ transit_gateway_attachment_id = try(aws_ec2_transit_gateway_vpc_attachment.vpc_attachment[0].id, null)
transit_gateway_route_table_id = each.value
}
@@ -88,9 +90,9 @@ resource "aws_ec2_transit_gateway_route_table_propagation" "vpc_self_own_rt" {
resource "aws_ec2_transit_gateway_route_table_propagation" "vpc_self_common" {
provider = aws.self
# for_each = { for k in local.propagate_all_rt : k => local.transit_gateway_route_table_ids_self[k] }
- for_each = { for k in local.propagate_all_rt : k => var.data_input.map_route_tables_self[k] }
+ for_each = { for k in local.propagate_all_rt : k => var.data_input.map_route_tables_self[k] if var.enable_tgw_attachment }
- transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.vpc_attachment.id
+ transit_gateway_attachment_id = try(aws_ec2_transit_gateway_vpc_attachment.vpc_attachment[0].id, null)
transit_gateway_route_table_id = each.value
}
@@ -99,8 +101,8 @@ resource "aws_ec2_transit_gateway_route_table_propagation" "vpc_self_common" {
#---
resource "aws_ec2_transit_gateway_route_table_propagation" "vpn_vpc_self_own_rt" {
provider = aws.self
- for_each = var.vpn_route_prefix_list_name != null ? { (var.transit_gateway_environment) = var.data_input.map_vpn_route_tables_self[var.transit_gateway_environment] } : {}
+ for_each = var.enable_tgw_attachment && var.vpn_route_prefix_list_name != null ? { (var.transit_gateway_environment) = var.data_input.map_vpn_route_tables_self[var.transit_gateway_environment] } : {}
- transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.vpc_attachment.id
+ transit_gateway_attachment_id = try(aws_ec2_transit_gateway_vpc_attachment.vpc_attachment[0].id, null)
transit_gateway_route_table_id = each.value
}
diff --git a/vpc-transit-gateway-association/self/routing.tf b/vpc-transit-gateway-association/self/routing.tf
index 32ad416..3d65973 100644
--- a/vpc-transit-gateway-association/self/routing.tf
+++ b/vpc-transit-gateway-association/self/routing.tf
@@ -40,8 +40,9 @@ module "routing_attachment_ipv4" {
## }
resource "null_resource" "vpc_attachment_exists" {
+ count = var.enable_tgw_attachment ? 1 : 0
triggers = {
- vpc_attachment = aws_ec2_transit_gateway_vpc_attachment.vpc_attachment.id
+ vpc_attachment = try(aws_ec2_transit_gateway_vpc_attachment.vpc_attachment[0].id, null)
}
}
diff --git a/vpc-transit-gateway-association/self/variables.tf b/vpc-transit-gateway-association/self/variables.tf
index e7128c0..846077d 100644
--- a/vpc-transit-gateway-association/self/variables.tf
+++ b/vpc-transit-gateway-association/self/variables.tf
@@ -86,3 +86,9 @@ variable "security_group_referencing_support" {
type = bool
default = true
}
+
+variable "enable_tgw_attachment" {
+ description = "Flag to enable or disable attachment to Transit Gateway (for subnets with separate route tables which are not the attachment subnets)"
+ type = bool
+ default = true
+}