---
cuppy_hub: gcp
cuppy_path: reference/migration/storage-transfer-service.md
cuppy_section: docs
cuppy_doc: WZ6Z-Y1K6
cuppy_doc_uuid: 170cb66c-6780-41db-9a38-15bb7eafce3f
cuppy_permalink: https://cuppy.io/gcp/d/WZ6Z-Y1K6
cuppy_version: 1
cuppy_updated: 2026-10-23T16:16:52.575Z
cuppy_canonical: https://cuppy.io/gcp/docs/reference/migration/storage-transfer-service
cuppy_mcp: https://cuppy.io/mcp
cuppy_body_sha256: 6c087358eb4c6705161bceb37787d039a7d39fa961f56321b1272784ef60d4ec
# cuppy_body_sha256 is over the document body ALONE, excluding both generated blocks.
---


# Storage Transfer Service

## 1. What it is, and the size it is for

> "Storage Transfer Service enables seamless data movement across object and file storage systems."

Optimised for transfers **exceeding 1 TiB**, handling automation, scaling and network optimisation.

**The 1 TiB figure is a useful threshold in both directions.** Below it, a `gcloud storage` copy is usually
simpler. Above it, the things this service does — retrying, parallelising, validating, resuming — are the
things you would otherwise write badly.

## 2. The sources — and two of them are the other clouds

| Source | Note |
|---|---|
| **Amazon S3** and **S3-compatible** storage | the AWS path, and anything speaking the S3 API |
| **Microsoft Azure Blob Storage** | the Azure path |
| **HTTP/HTTPS URLs** | publicly accessible, from a list |
| **Cloud Storage** buckets | bucket-to-bucket, including across locations |
| **on-premises POSIX file systems** and **HDFS** | agent-based |

HDFS as a first-class source matters for a Hadoop migration: the data moves with this service while the jobs
move to Dataproc (`reference/data/dataproc.md` §5).

## 3. Scheduled, or event-driven

Both are supported. **Event-driven transfers** work from **Cloud Storage, AWS S3, and Azure Blob Storage /
Data Lake Storage Gen2**.

That is the facility that turns a migration into a **continuous mirror**: the source keeps receiving writes
and they keep arriving at the destination. Which is how a large object estate cuts over with a short
window — the bulk moved on a schedule, the tail arriving by event, and the cut-over a DNS or configuration
change rather than a copy.

## 4. Agents, for file systems

Transfers to and from on-premises file systems need **self-hosted transfer agents**, which exist to give you
**network routing control and bandwidth management**.

**Bandwidth management is the operationally important half.** An unthrottled transfer out of a production
data centre is an outage with a good explanation. Size and throttle the agent fleet as part of the plan.

## 5. What is and is not stated

The overview mentions **metadata preservation** and **data integrity validation**. It does **not** detail
delete-after-transfer or overwrite behaviour, so neither is described here.

**Both of those are destructive-adjacent settings** and must be read from the transfer-job configuration
reference before a job runs. A mis-set overwrite or delete option on a multi-terabyte transfer is not a
recoverable mistake.

## 6. For an estimate

| Line | Note |
|---|---|
| the transfer itself | this service |
| **source-side egress** | charged by the **source** cloud. On a large estate this is frequently the single largest cost in the project, and it is not on any Google Cloud price list |
| destination storage class | choose it knowing the **minimum storage durations** — `ARCHIVE` commits **365 days** (`reference/storage/cloud-storage.md` §1). Landing a migration directly in a cold class starts that clock |
| validation | budget time to verify, not just to copy |

The egress row is the one to raise first with anyone asking for a number. See
`guides/parity-and-migration-method.md`, which treats egress as a first-class line.


---
<!-- cuppy -->
You are reading one file. The same content is free over MCP at https://cuppy.io/mcp with no signup: ranked search across all 91 documents in this hub, the merged view when you work in a layer, known workarounds matched to the error you hit, and depth control so you spend tokens on what you need. Start with the `_hello` tool. How to connect: https://cuppy.io/gcp/ Something wrong in this document? Report it with the `session feedback` tool on the same endpoint.
<!-- /cuppy -->
