AWS Cloud WAN series · Part 11 of 17
Migrating off Transit Gateway, Phase 1: Federation
Eleventh in the AWS Cloud WAN series. Almost nobody builds Cloud WAN on a blank slate — you start with a working Transit Gateway mesh you can't take down. This is how you slide Cloud WAN in underneath that mesh as a dynamic global spine, run both side by side, and keep a rollback at every step. Phase 2, the full cutover, is the next article.
TL;DR
Federation means standing up a Cloud WAN core network alongside your existing TGWs and peering each TGW to the Cloud WAN edge in its Region, so both run at once. It swaps your static, hand-maintained inter-Region TGW peering for a dynamic, global Cloud WAN spine — without touching a single workload attachment. The whole thing is safe because of one routing fact: for the same prefix, a static route on the TGW beats a dynamically-learned Cloud WAN route, so on the day you add Cloud WAN, nothing moves. You validate the new paths in parallel, then delete the static routes to flip traffic — one deliberate, reversible step. The catch: federation is an operational win (dynamic routing, one policy, easy Region adds), not automatically a cheaper one.
Do it this way
- Mirror your TGW routing domains as Cloud WAN segments; map one TGW route table to one segment.
- Peer each TGW to its same-Region Core Network Edge; let the Cloud WAN mesh carry inter-Region.
- Stand Cloud WAN up beside live static peering, validate the segments, then delete static routes to cut over.
- Treat Phase 1 as a place you can stop indefinitely if all you want is the routing win.
Don't
- Don't peer a TGW to a CNE in another Region — peering is same-Region only.
- Don't reuse an ASN: every TGW's ASN must differ from the CNE it peers.
- Don't assume it cuts cost — a TGW→Cloud WAN→TGW path still pays processing on both sides.
- Don't flip everything at once; delete static routes Region by Region, keeping the option to re-add.
Why you migrate in phases, not in one night — the three stops
The typical starting point is a network that works: a TGW in each of a few Regions, statically peered, with route tables hand-maintained for cross-Region reach. Because a TGW is a regional construct and inter-Region TGW peering carries only static routes, achieving cross-Region segmentation means writing static routes for every cross-Region destination, in every Region's route tables, by hand. It works, but every new VPC or Region is manual surgery in several tables at once. That static, doesn't-scale reality is exactly what Cloud WAN's dynamic, full-mesh backbone replaces.
You don't earn that by ripping the TGWs out. You earn it in phases, and the migration has three stops you can halt at (Figure 1):
- Before — your current TGW mesh. The baseline.
- Federation (Phase 1, this article) — replace static TGW-to-TGW peering with Cloud WAN as a dynamic routing hub between the TGWs. You may stop here permanently and use Cloud WAN purely as a global routing spine.
- Cloud WAN only (Phase 2, Article 12) — move the VPC attachments off the TGWs onto Cloud WAN and decommission the TGWs you no longer need.
Phasing is the entire point. Each step is reversible, and Phase 1 changes routing between your TGWs without disturbing the workloads on them. This works at all because a single AWS global network is allowed to contain both Transit Gateways and a Cloud WAN core network at the same time — coexistence is a supported state, not a hack.
What federation actually swaps — TGW peering for a Cloud WAN spine
In federation you keep every TGW and every workload attachment exactly where it is. What you replace is the inter-Region connectivity — the statically-peered TGW-to-TGW links — with connectivity through a Cloud WAN core network (Figure 2). The mechanism is the Transit Gateway peering plus the route-table attachment covered in Article 5:
- You create a Cloud WAN core network whose segments mirror your TGW routing domains — a
prodsegment, adevsegment. - You peer each TGW with the Core Network Edge (CNE) in its Region. Unlike static TGW-to-TGW peering, a CNE peering supports dynamic routing over BGP.
- Over each peering you create route-table attachments, each extending one specific TGW route table to one Cloud WAN segment.
Remember that a CNE is, mechanically, an AWS-managed Transit Gateway — the docs say it “is also known as an AWS Transit Gateway, and it inherits many of the same properties.” So peering your TGW to a CNE is conceptually TGW-to-TGW peering, except the far side is a managed edge that AWS auto-meshes to every other Region's edge over the global backbone. Routes that land in a TGW route table get advertised dynamically through the Cloud WAN segment to every other TGW route table mapped to that same segment, in any Region. Cross-Region connectivity becomes dynamic and global, and your prod/dev isolation is now enforced by Cloud WAN segments instead of by hand-maintained static tables.
How your segmentation survives the move — one route table, one segment
The subtlety that trips people up: the whole TGW does not map to a segment. A route-table attachment extends one individual TGW route table to one Cloud WAN segment, and you create as many route-table attachments over a peering as you have route tables to map. So the prod route table extends to the prod segment, the dev route table to the dev segment (Figure 3). That granularity is what preserves your segmentation natively across Regions: prod routes only ever reach prod, dev only dev, with no chance of the two mixing in a shared peering table the way they could when one static peering had to carry every environment.
Two prerequisites bite before you ever see a route, and both come from earlier articles:
- ASNs must be unique. Each TGW's ASN must differ from the CNE's ASN it peers with — the same ASN-planning discipline from Article 2. A CNE's ASN is immutable once set, and it can't overlap a TGW you intend to peer, so sort the numbering before you peer, not after.
- Peering is same-Region only. A TGW peers with the CNE in its own Region. You never peer a TGW in one Region to a CNE in another — the Cloud WAN mesh is what handles inter-Region.
One more operational note for when you wire this up: tag the attachments so your attachment policies place the route-table attachments into the right segments. Attachment policies read the tags on the attachment object, not on the underlying resource — the rule Article 4 dwells on, and an easy one to forget when the resource is a TGW route table rather than a VPC.
Why nothing breaks the moment you turn it on — static beats dynamic
Here's the part worth understanding precisely, because it's what lets you migrate without a flag-day. When you stand the Cloud WAN peerings up alongside your existing static TGW peering, both paths exist at once. Which one does traffic take? The static TGW peering routes win.
That isn't luck — it's the documented route-evaluation order. For the same destination prefix, a TGW prefers routes in a fixed priority, and static routes sit at the very top, above every dynamically-propagated route; Cloud WAN's TGW-peering-propagated routes sit at the bottom of that list. So at the instant you add Cloud WAN, nothing changes: traffic keeps flowing over the old static peering, and the new dynamic Cloud WAN routes sit in the tables as less-preferred alternatives (Figure 4, left). AWS calls this out directly as the safe-migration lever — a static route on the TGW takes precedence over a dynamically-learned Cloud WAN route for the same prefix.
That gives you a validation window with no risk attached. You can:
- Add the core network, peerings, and route-table attachments with zero traffic impact, and wait for each attachment to reach the
Availablestate. - Verify the Cloud WAN segments contain exactly the routes you expect — prod routes in prod, dev in dev, nothing crossing over.
- Only when you're satisfied, delete the static peering routes on the TGWs. At that moment the dynamic Cloud WAN routes become the active path and inter-Region traffic shifts onto Cloud WAN (Figure 4, right).
If anything looks wrong during validation, you simply don't delete the static routes — and you can tear the Cloud WAN peerings down with no impact. The cutover is one deliberate, reversible action (removing static routes), not a risky simultaneous reconfiguration. That's the textbook controlled migration: introduce the new path, validate it in parallel, then flip preference. One caveat the docs add: also remove any VPC-specific cross-Region static routes for the traffic to actually move — a leftover static route anywhere in the path keeps pinning traffic to the old hop.
What federation won't buy you — the cost it doesn't cut
One consideration AWS's pricing page doesn't make obvious: federation is not automatically cheaper. In a TGW → Cloud WAN → TGW path, the data-processing meter runs on each domain it enters. The peering hops themselves are free — AWS states plainly that no data-processing charge applies to traffic over the CNE-to-TGW peering — but data processing is charged where traffic arrives into each domain through a billable VPC or VPN attachment, so a flow that crosses two TGWs via Cloud WAN can be processed on both the TGW side and the Cloud WAN side. There's a direction asymmetry on top of that: Cloud WAN applies data-transfer charges in both the in and out directions, while TGW applies them outbound only.
So the practical reading:
- Don't assume federation reduces cost. Its value in Phase 1 is operational — dynamic global routing, one policy, trivial Region adds — not necessarily financial.
- The cost case improves in Phase 2. Once VPCs attach directly to Cloud WAN and you retire the intermediary TGWs, traffic stops double-processing through two TGWs and the picture changes.
- Model your own traffic. Whether federation is cost-neutral, cheaper, or pricier depends on how much of your traffic is inter-Region TGW-to-TGW versus everything else. Remember Cloud WAN also adds a per-Region edge fee — roughly $365/month per CNE — that TGW has no equivalent for. Article 16 treats cost in full.
If your goal is purely the operational win, federation delivers it and you can stop at Phase 1 indefinitely. If your goal includes cost reduction, plan to continue to Phase 2.
How to roll it out without a flag-day — the Phase 1 checklist
A safe federation rollout, in order:
- Plan ASNs so every TGW differs from its CNE; resolve any conflict first, because a CNE ASN can't be changed later.
- Create the core network with segments mirroring your TGW routing domains.
- Peer each TGW with its same-Region CNE.
- Create route-table attachments, mapping each TGW route table to the matching segment, and tag the attachments so attachment policies place them correctly.
- Validate that each segment's route table holds exactly the expected routes with isolation intact. Traffic still flows over static peering at this stage — no impact.
- Delete static peering routes on the TGWs, Region by Region or environment by environment, watching traffic shift to Cloud WAN. This is the only step that changes live routing.
- Confirm connectivity and segmentation post-cutover, and keep the option to re-add the static routes until you're confident.
At the end of Phase 1 you have a global, dynamically-routed network with your segmentation enforced natively by Cloud WAN — and every workload still sitting on its original TGW, untouched.
When to stop at Phase 1 — and when to go on to Phase 2
Here's the decision to carry forward. Stop at federation if what you wanted was the routing: a dynamic, full-mesh global spine, one policy instead of a wall of static tables, and Region adds that no longer mean hand-editing every peer's routes. Phase 1 is a legitimate permanent architecture, not just a way-station — coexistence is a supported state, so you can run TGWs-under-Cloud-WAN for as long as you like.
Go on to Phase 2 if you want the cost case to improve or the TGWs gone. Federation keeps the double-TGW hop in the path; only moving VPC attachments directly onto Cloud WAN and decommissioning the redundant TGWs removes it. That's the next article: moving VPC attachments off TGW with the atomic route-repoint trick, migrating Direct Connect from a TGW-terminated model to native DXGW attachments with minimal downtime, and the BGP and maintenance-window practices that keep the full cutover low-risk.
Sources
- AWS — What is AWS Cloud WAN: a single global network can contain both Transit Gateways and a Cloud WAN core network (coexistence), and a Core Network Edge “is also known as an AWS Transit Gateway, and it inherits many of the same properties.” docs.aws.amazon.com/.../what-is-cloudwan.html
- AWS — Transit Gateway peering and route-table attachments: a CNE peers with a TGW in the same Region; a route-table attachment extends one TGW route table to one segment (multiple per peering); dynamic BGP only (a static route returns an error); the TGW ASN must differ from the CNE ASN. docs.aws.amazon.com/.../cloudwan-peerings.html
- AWS — Cloud WAN and Transit Gateway migration and interoperability patterns (blog): a static route on the TGW takes precedence over a dynamically-learned Cloud WAN route for the same prefix, so coexistence has zero traffic impact until the static routes (including VPC-specific cross-Region ones) are deleted; reversible. aws.amazon.com/blogs/.../aws-cloud-wan-and-aws-transit-gateway-migration-and-interoperability-patterns
- AWS — How transit gateways work: route-evaluation priority for the same CIDR — static routes rank above all propagated routes; TGW-peering-propagated (Cloud WAN) routes rank lowest. docs.aws.amazon.com/vpc/latest/tgw/how-transit-gateways-work.html
- AWS — Achieve optimal routing with AWS Cloud WAN for multi-Region networks (blog): AWS auto-builds full-mesh eBGP between all CNEs over the global backbone, replacing inter-Region TGW peering, which supports only static routes. aws.amazon.com/blogs/.../achieve-optimal-routing-with-aws-cloud-wan-for-multi-region-networks
- AWS — AWS Cloud WAN pricing: CNE $0.50/hour (~$365/month); no data-processing charge on traffic over a CNE-to-TGW peering; billing split across core-network owner and attachment owners. aws.amazon.com/cloud-wan/pricing/
- AWS re:Post — federation data-transfer asymmetry: Cloud WAN applies data-transfer charges in both the in and out directions while TGW applies them outbound only, so a TGW→Cloud WAN→TGW path can be processed on both domains. repost.aws/questions/QUD4gq3l98RX6bLvyqUwMGvA
- AWS — Core network configuration: valid ASN ranges, and a CNE's ASN is immutable and cannot overlap a TGW you want to peer. docs.aws.amazon.com/.../cloudwan-core-network-config.html
- AWS — Create an attachment: the eight attachment lifecycle states, including
Available, which a route-table attachment must reach before you rely on its routes. docs.aws.amazon.com/.../cloudwan-create-attachment.html - AWS — Attachment policies for the core network: the attachment's own tags are analyzed by the attachment policy, not the tags on the underlying resource. docs.aws.amazon.com/.../cloudwan-policy-attachments.html