Cloud-to-cloud Beta
Deciding between a Fabric Cloud Router and a native provider-to-provider link for traffic between AWS and Google Cloud, with the numbers.
Scenario#
A data platform replicates from AWS us-east-1 to Google Cloud us-east4 and serves queries back. The design has no on-premises site. The team has to choose a path for the traffic and wants to know at which volume the choice should change.
Three paths exist: the public internet, Equinix Fabric with a Cloud Router in Ashburn, and a native link between the two providers. This page applies the model described under Cloud-to-cloud to that choice.
Architecture options#
Step 1: check that a native link exists for the region pair#
import com.eqixiac.equinix.design.optimizer.model.MulticloudEnvironmentCatalog;
import com.eqixiac.equinix.fabric.model.implementation.cloud.CloudProviderType;
MulticloudEnvironmentCatalog catalog = MulticloudEnvironmentCatalog.standard();
catalog.find(CloudProviderType.AWS, "us-east-1", CloudProviderType.GOOGLE_CLOUD, "us-east4")
.ifPresentOrElse(
environment -> System.out.println(environment),
() -> System.out.println("not in the bundled catalog dated 2026-09-21; check the providers' pages"));The catalog was copied from provider pages on 2026-09-21, so the providers may offer a pair that the catalog lacks.
Step 2: price the three paths at the expected volume#
import com.eqixiac.equinix.core.enums.MetroCode;
import com.eqixiac.equinix.design.value.ratecard.ReferenceRateCard;
import com.eqixiac.equinix.design.value.savings.DataUnit;
import com.eqixiac.equinix.design.value.savings.MulticloudPathComparison;
import com.eqixiac.equinix.design.value.savings.SavingsEstimate;
SavingsEstimate estimate = fabric.savingsCalculator()
.egress(100, DataUnit.TERABYTE) // AWS to Google Cloud per month
.reverseEgress(40, DataUnit.TERABYTE) // Google Cloud to AWS per month
.fromCloud(CloudProviderType.AWS).inRegion("us-east-1")
.toCloud(CloudProviderType.GOOGLE_CLOUD).toRegion("us-east4")
.viaMetro(MetroCode.DC)
.bandwidthMbps(10_000)
.includeCloudRouter("STANDARD")
.rateCard(ReferenceRateCard.standard())
.calculate();
MulticloudPathComparison paths = estimate.getMulticloudComparison();
System.out.println("lowest cost at this volume: " + paths.getLowestCostPath());
estimate.breakEvenSustainedMbps().ifPresent(mbps -> System.out.println("break-even: " + mbps + " Mbps"));
paths.getNotes().forEach(System.out::println);With the bundled reference prices the block prints a break-even of 2,784.3 Mbps. The following table gives the monthly cost of each path.
| Path | Monthly, USD | At 140 TB per month |
|---|---|---|
| Public internet | 13,472.00 | Highest of the three per-GB paths |
| Equinix Fabric | 8,262.50 | Lowest |
| Native link, 10 Gbps | 22,870.90 | Flat; independent of volume |
Step 3: convert the volume to a sustained rate#
140 TB per month is a sustained 426 Mbps, both directions summed: 140,000 GB x 8,000 megabits per GB / 2,628,000 seconds. This rate is below the break-even of 2,784 Mbps, and at this volume the Fabric path costs about USD 14,600 per month less than the native link. The cheaper path at these prices depends on the sustained rate as follows.
| Sustained two-way rate | Monthly volume | Cheaper path at these prices |
|---|---|---|
| Below 2.8 Gbps | Below about 915 TB | Equinix Fabric |
| Above 2.8 Gbps | Above about 915 TB | Native link |
915 TB is 2,784.3 Mbps x 2,628,000 s / 8,000. A negotiated Fabric rate, another Cloud Router package or a Google Cloud region outside North America changes the break-even, so the calculation should be repeated with your own prices.
Step 4: weigh what cost does not capture#
| Factor | Fabric Cloud Router | Native link |
|---|---|---|
| Reach | Any number of clouds, colocation and Network Edge on one router | Exactly two clouds |
| Routing control | Route filters, aggregation, BGP attributes on the router | What the two providers expose |
| Path | Through an Equinix metro | Between the providers' sites |
| Provisioning | SDK, Terraform or portal for the Equinix side | Each provider's console or CLI; an activation key carried between them |
| Smallest size | Fabric bandwidth tiers from tens of Mbps | Provider sizes; AWS publishes a price for 10 Gbps only |
| Commit | Monthly or term | Hourly at each provider |
The cost comparison does not include the value of connecting a third cloud or an on-premises site to the same Cloud Router, which matters to a team that has or expects either. A native link fits a team whose traffic is one steady flow between two clouds at a rate above the break-even.
Step 5a: build the Fabric path#
Follow Hybrid multicloud without the cage connection: one Cloud Router in DC, an IP_VC to each cloud, DIRECT and BGP on both.
Step 5b: record the native link in the plan#
The SDK cannot create a native link. A deployment plan can include the link, so that the plan document shows both options with their prices and the provider procedure.
import com.eqixiac.equinix.design.optimizer.wizard.enums.CloudToCloudStrategy;
import com.eqixiac.equinix.design.optimizer.wizard.model.DeploymentPlan;
DeploymentPlan plan = fabric.deploymentWizard(result) // result: an optimization whose workload depends on both clouds
.cloudToCloudStrategy(CloudToCloudStrategy.COMPARE)
.notifications("noc@example.com")
.plan();
plan.multicloudLinksOrEmpty().forEach(link -> {
System.out.println(link.describe());
System.out.println(link.getRecommendation());
link.getCreateThenAcceptRecipe().forEach(step -> System.out.println(" " + step));
});
Files.writeString(Path.of("cloud-to-cloud-plan.md"), plan.toMarkdown());Decoding the activation key before it is entered at the second provider shows the environment and the size that the key names.
import com.eqixiac.equinix.core.model.multicloud.ActivationKey;
ActivationKey key = ActivationKey.decode(keyFromProvider);
if (key instanceof ActivationKey.V1 v1) {
System.out.println(v1.connectionSizeMbps() + " Mbps, " + v1.destinationEnvironmentUri());
}Review trigger#
The break-even rate should be recorded with the decision. Step 2 should be repeated when the measured sustained rate reaches half of the break-even rate, when either provider changes its prices, or when a third endpoint joins the design.