  Cloud applications are increasingly distributing data across multiple regions
and cloud providers. Unfortunately, wide-area bulk data transfers are often
slow, bottlenecking applications. We demonstrate that it is possible to
significantly improve inter-region cloud bulk transfer throughput by adapting
network overlays to the cloud setting -- that is, by routing data through
indirect paths at the application layer. However, directly applying network
overlays in this setting can result in unacceptable increases in cloud egress
prices. We present Skyplane, a system for bulk data transfer between cloud
object stores that uses cloud-aware network overlays to optimally navigate the
trade-off between price and performance. Skyplane's planner uses mixed-integer
linear programming to determine the optimal overlay path and resource
allocation for data transfer, subject to user-provided constraints on price or
performance. Skyplane outperforms public cloud transfer services by up to
$4.6\times$ for transfers within one cloud and by up to $5.0\times$ across
clouds.
