Cloud-to-cloud Beta
Fabric Cloud Router or native provider-to-provider link for traffic between AWS and Google Cloud, with the break-even calculation.
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 task is to choose a path for the traffic and find the volume at which the choice changes.
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 break-even is 2,784.3 Mbps. Monthly cost per 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.
| 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: non-cost factors#
| 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 excludes the value of connecting a third cloud or an on-premises site to the same Cloud Router. A native link fits 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());Decode the activation key before entering it at the second provider, to check the environment and the size it 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#
Record the break-even rate with the decision. Repeat step 2 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.