You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add Transit Gateway egress mode for new VPCs (#115)
Add an `enable_transit_gateway` toggle (+ `transit_gateway_id`) to route new-VPC private-subnet egress through a Transit Gateway instead of NAT gateways. IPv6 egress is opt-in via `transit_gateway_ipv6_egress`. Includes vpc/quilt validation + smoke tests and docs.
Co-authored-by: Ernie Prabhakar <drernie@users.noreply.github.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,6 +18,8 @@ Optional release notice.
18
18
19
19
## [Unreleased] - YYYY-MM-DD
20
20
21
+
-[Added] Transit Gateway egress mode for new VPCs: set `enable_transit_gateway = true` (+ `transit_gateway_id`) to route private-subnet egress through a Transit Gateway instead of NAT gateways; IPv6 egress is opt-in via `transit_gateway_ipv6_egress`. See [Transit Gateway egress](README.md#transit-gateway-egress) ([#115](https://github.com/quiltdata/iac/pull/115))
22
+
21
23
## [1.7.2] - 2026-06-08
22
24
23
25
-[Fixed] Bump `modules/cnames` AWS provider constraint from `~> 5.0` to `~> 6.0` so it resolves alongside the `vpc` module's `aws >= 6.28` requirement — using `quilt` + `cnames` in one root previously failed `terraform init` ([#117](https://github.com/quiltdata/iac/pull/117))
Copy file name to clipboardExpand all lines: VARIABLES.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,6 +26,9 @@ This document provides comprehensive documentation for all variables available i
26
26
|`user_subnets`|`list(string)`|`null`| ALB subnet IDs (exactly 2 required for internal ALB with existing VPC) |
27
27
|`user_security_group`|`string`|`null`| Security group ID for ALB access (required for existing VPC) |
28
28
|`api_endpoint`|`string`|`null`| VPC endpoint ID for API Gateway (required for internal ALB with existing VPC) |
29
+
|`enable_transit_gateway`|`bool`|`false`| Route private-subnet egress through a Transit Gateway instead of NAT gateways (`create_new_vpc = true` only). Disables NAT + the IPv6 egress-only IGW; requires `transit_gateway_id`. See [Transit Gateway egress](README.md#transit-gateway-egress). |
30
+
|`transit_gateway_id`|`string`|`null`| Transit Gateway to attach to (required when `enable_transit_gateway = true`). May be a value known only after apply (e.g. a TGW created in the same configuration). |
31
+
|`transit_gateway_ipv6_egress`|`bool`|`false`| Also route IPv6 (`::/0`) egress through the TGW. Leave off unless the TGW carries IPv6 egress, otherwise IPv6 traffic would be black-holed. |
Copy file name to clipboardExpand all lines: modules/quilt/variables.tf
+22Lines changed: 22 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -29,6 +29,28 @@ variable "internal" {
29
29
description="If true create an inward ELBv2, else create an internet-facing ELBv2."
30
30
}
31
31
32
+
variable"enable_transit_gateway" {
33
+
type=bool
34
+
default=false
35
+
description="Route private subnet egress through a Transit Gateway instead of NAT gateways. Only supported when create_new_vpc == true. When true, transit_gateway_id is required, and NAT gateways and the IPv6 egress-only gateway are disabled. (Toggle is a separate bool so transit_gateway_id may be a value known only after apply, e.g. a TGW created in the same configuration.)"
36
+
}
37
+
38
+
variable"transit_gateway_id" {
39
+
type=string
40
+
default=null
41
+
description="Transit Gateway ID for private subnet egress. Required when enable_transit_gateway == true; may be a computed value (e.g. a TGW created in the same configuration)."
error_message="transit_gateway_id must be null or a valid Transit Gateway ID (e.g. tgw-0123456789abcdef0)."
45
+
}
46
+
}
47
+
48
+
variable"transit_gateway_ipv6_egress" {
49
+
type=bool
50
+
default=false
51
+
description="When enable_transit_gateway is true, also route IPv6 (::/0) egress through the Transit Gateway. Set true only if the Transit Gateway carries IPv6 egress: pointing ::/0 at a TGW that can't route IPv6 black-holes the traffic and stalls clients without Happy Eyeballs (e.g. Python requests/urllib3) on the connection timeout. Left false (default), the VPC has no IPv6 default route, so IPv6 attempts fail immediately and clients use IPv4 with no delay. No effect when enable_transit_gateway is false."
"user_subnets (required if var.internal == true and var.create_new_vpc == false, else must be null)": (var.internal &&!var.create_new_vpc) == (var.existing_user_subnets !=null)
19
19
"api_endpoint (required if var.internal == true, else must be null)": var.internal == (var.existing_api_endpoint !=null),
0 commit comments