S3 replication pricing: CRR, SRR, RTC (2026)

Akal Cloud Updated 10 min read

Quick answer

Four meters: replication PUT requests in the destination ($0.005 per 1,000 into S3 Standard, one per object, plus one per annotation and the part count plus two for multipart objects), destination storage, inter-Region data transfer for Cross-Region Replication ($0.020 per GB in AWS's example, none for Same-Region Replication), and $0.015 per GB more with Replication Time Control. Existing objects need Batch Replication at $0.25 per job and $1 per million objects. Below about 262 KB, a plain object's PUT costs more than its transfer.

Amazon S3 replication is billed through the meters it touches: PUT requests in the destination, inter-Region data transfer if the destination is in another Region, destination storage, and optionally Replication Time Control. The surprise is which meter wins. AWS's own worked example replicates 100 GB for $2.00 of transfer and less than half a cent of requests, but for plain objects under about 262 KB the PUT requests cost more than the transfer, and a bucket of small files can pay most of its replication bill in requests.

How much does S3 replication cost?

The Amazon S3 pricing page lists the same meters for Cross-Region Replication (CRR) and Same-Region Replication (SRR): storage in the destination storage class, the primary copy, replication PUT requests and any infrequent access retrieval charges. CRR adds one more: "For CRR, you also pay for inter-region Data Transfer OUT from S3 to each destination region." The rates come from two different places, which matters when the Regions differ: "Storage and PUT request pricing for the replicated copy is based on the selected destination AWS Regions, while pricing for inter-region data transfers is based on the source AWS Region."

MeterSRRCRRRate used in this post
Replication PUT in destinationYesYes$0.005 per 1,000 (S3 Standard)
Destination storageYesYesDestination class and Region
Inter-Region data transferNoYes$0.020 per GB in AWS's example
Replication Time Control transferIf enabledIf enabled$0.015 per GB
Replication metricsIf enabledIf enabledCloudWatch custom metric rate

In a cross-account setup the bill splits across both accounts. The S3 FAQ is explicit: "For cross account replication, the source account pays for all data transfer (S3 RTC and S3 CRR) and the destination account pays for the replication PUT requests." When both accounts belong to one organization, how those two halves roll up to the payer is covered in whether consolidated billing saves money.

Is S3 Same-Region Replication free of data transfer charges?

Yes. The same FAQ answer says "there are no data transfer charges for S3 Same Region Replication (S3 SRR)", and the replication requirements page repeats it: "There are no data transfer charges associated with Same-Region Replication (SRR)."

That does not make SRR cheap, because the second copy is stored at full price. In US East (N. Virginia) the AWS Price List file for Amazon S3 puts S3 Standard at $0.023 per GB for the first 50 TB a month. Replicating 1 TB (1,024 GB, since S3 bills binary gigabytes) into another Standard bucket costs $23.55 in storage every month, against half a cent of PUT requests if those 1,024 GB are 1,024 objects. The copy is the bill. Choosing a cheaper destination class is the lever, and it comes with the minimum duration and minimum size rules explained in when a cheap S3 storage class costs more.

Replication also requires versioning: "Both source and destination buckets must have versioning enabled." That requirement is what makes the Batch Replication section below expensive on buckets with long version histories.

When do S3 replication PUT requests cost more than the data transfer?

When objects are small. The S3 FAQ prices one large object: "If the source object is uploaded using the multipart upload feature, then it is replicated using the same number of parts and part size." Its 100 GB object uploaded in 800 parts produces this:

"You will incur a request charge of $0.00401 (802 requests x $0.005 per 1,000 requests) and (if the replication was between different AWS Regions) a charge of $2.00 ($0.020 per GB transferred x 100 GB) for inter-region data transfer."

Transfer is roughly 500 times the request charge there. But a request costs the same whatever it carries, and transfer scales with bytes. At $0.005 per 1,000 PUTs and $0.020 per GB, one PUT equals the transfer on a 262 KB object. Below that size, requests are the larger meter. Take two CRR workloads from US East (N. Virginia) to US West (Oregon), which the AWS Price List file for data transfer prices at $0.02 per GB:

WorkloadBytesPUT requestsTransferTotal
10 million objects of 100 KB953.67 GB$50.00$19.07$69.07
1,024 objects of 1 GB1,024 GB$0.0051$20.48$20.49

Similar bytes, more than three times the bill, and 72.4% of the small-object bill is requests. Two things move the break-even. A nearer Region can halve the transfer rate: the same price list charges $0.01 per GB from US East (N. Virginia) to US East (Ohio), which doubles the break-even to 524 KB, and the requirements page warns that "inter-Region data transfer charges vary depending on the Regions that you choose." A colder destination class raises the PUT rate: the S3 price list bills PUT for Replication to Glacier at $0.03 per 1,000, six times the Standard rate, so replicating the 10 million small objects straight into S3 Glacier Flexible Retrieval costs $300.00 in PUTs alone.

Two AWS pages describe the PUT count differently. The Replication Time Control guide says "You incur costs for only one PUT request per object replicated", even though replication "makes up to five GET/HEAD requests and one PUT request to the source bucket, and one PUT request to each destination bucket." The FAQ bills 802 requests for one multipart object: its own breakdown is "800 Upload Part requests + 1 Initiate Multipart Upload request + 1 Complete Multipart Upload request". Our reading is that both hold: one billed PUT per single-part object, and the part count plus two for a multipart object. Budget with the FAQ's count for large files.

Annotations add more. The S3 pricing page now bills replication PUT requests "including one PUT request per annotation when replicated objects have annotations attached, billed at the annotation request rate", and its Annotations section says "Each annotation copy is charged as one PUT request at the standard annotation PUT rate. For example, copying an object with 10 annotations generates 10 PUT requests." Annotation requests use "the same price points as S3 Standard storage and requests", so an object with 10 annotations bills 11 PUTs, and its break-even against $0.020 per GB transfer rises from 262 KB to 2,884 KB. One annotation per object moves it to 524 KB.

What does S3 Replication Time Control cost on top of replication?

A second per-GB transfer charge, plus metrics. The pricing page says "Amazon S3 Replication Time Control Data Transfer pricing is the same in all AWS Regions", and every Replication Time Control transfer line in the S3 price list file is $0.015 per GB. That is 75% of the $0.020 inter-Region rate, added on top of it, and it applies to SRR as well: the FAQ lists data transfer charges for "S3 Cross Region Replication (S3 CRR) and S3 Replication Time Control (S3 RTC)". On the 1 TB example above, RTC adds $15.36. On the small-object workload it adds $14.31, taking $69.07 to $83.38. The FAQ also warns that with RTC "you will see a different Data Transfer OUT and replication PUT request charges specific to S3 RTC", so RTC traffic appears under its own usage types.

Replication metrics are the second part. The FAQ says "Amazon S3 Replication provides four detailed metrics", and they "are enabled by default for S3 Replication Time Control enabled rules." The replication metrics page adds: "S3 Replication metrics are billed at the same rate as Amazon CloudWatch custom metrics." The CloudWatch pricing page charges $0.30 per custom metric a month for the first 10,000. Not all four are sent all the time: the metrics page shows Bytes Pending, Replication Latency and Operations Pending still published when replication does not occur, while Operations Failed Replication is not. An idle rule therefore costs about $0.90 a month, rising toward $1.20 when failures are reported, or $9.00 to $12.00 across ten rules, whether or not anything replicates.

What RTC buys is a service level. The FAQ says RTC is "designed to replicate most objects in seconds, and 99.99% of objects within 15 minutes", backed by a 99.9% SLA, while the RTC guide says "99.9 percent of those objects within 15 minutes".

Does S3 replication copy existing objects?

No. The list of what S3 replicates starts with "Objects created after you add a replication configuration." Existing objects need S3 Batch Replication, which bills the replication meters plus S3 Batch Operations. The pricing page's own example states "S3 Batch Operations jobs cost $0.25 per job" and "S3 Batch Operations charges $1 per million objects processed". There is also a manifest fee: "If you use the manifest, there is a charge based on the number of objects in the source bucket." The S3 price list sets it at $0.015 per million objects.

The detail that multiplies the bill is on the Batch Replication page: "With a generated manifest, Amazon S3 replicates all eligible versions of your objects." On a versioned bucket that means history, not just what you see. Take 10 million current objects of 100 KB, each with two noncurrent versions, replicated across Regions at $0.020 per GB:

MeterCurrent versions onlyAll versions (generated manifest)
Batch Operations job and objects$10.25$30.25
Replication PUT requests$50.00$150.00
Inter-Region transfer$19.07$57.22
Total, before manifest and storage$79.32$237.47

Destination storage then triples as well. If only current versions are needed, supply your own manifest instead: a user-generated manifest must specify version IDs, and "Only the object with the version ID that's specified in the manifest will be replicated."

Two cheaper paths to know about. If the object is already in the destination, the pricing page says "If the metadata is not in sync and needs to be replicated, you will incur the replication PUT request charge but not the inter-Region Data Transfer OUT charge." And one path is more expensive than it looks: the requirements page notes that batch replicating S3 Intelligent-Tiering objects "constitutes access. In these cases, the source objects of the copy or replication operations are tiered up."

Does S3 replication delete files from the destination bucket?

Mostly not, and that is a cost as much as a safety feature. With a current replication configuration, "Amazon S3 does not replicate the delete marker by default." A delete that names a version ID is not replicated either: "But it doesn't replicate the deletion in the destination buckets." Lifecycle rules do not carry over: "Amazon S3 creates delete markers for expired objects but doesn't replicate those markers."

So a source bucket with a tidy expiration policy can replicate into a destination that never shrinks. The fix is a lifecycle configuration on the destination itself. AWS's advice is: "If you want the same lifecycle configuration applied to both the source and destination buckets, enable the same lifecycle configuration on both."

Does SSE-KMS encryption add to S3 replication cost?

It can. The RTC guide sizes KMS quota for replication this way: "For example, if you expect to replicate 1,000 objects per second, you can subtract 2,000 requests from your AWS KMS request rate quota." Two KMS requests per object, at the $0.03 per 10,000 requests used on the AWS KMS pricing page, is $6.00 per million objects replicated, or $60.00 for the 10 million object example. That is our arithmetic on AWS's quota guidance, not a published replication rate. The S3 Bucket Keys page says "You can use S3 Bucket Keys with Same-Region Replication (SRR) and Cross-Region Replication (CRR)", and Bucket Keys are the standard way to shrink the KMS request meter: see AWS KMS key pricing at scale.

How do you find idle S3 cross-Region replication on your bill?

Inter-Region transfer appears under usage types named by Region pair, such as USE1-USW2-AWS-Out-Bytes for US East (N. Virginia) to US West (Oregon) in the data transfer price list, with Replication Time Control under its own S3RTC-Out-Bytes types in the S3 file. You can sum those in your Cost and Usage Report, which is how querying your CUR in Athena without a crawler pays off.

Proving a destination bucket is unused needs a different report. In the CUR, the CUR 2.0 line item dictionary says line_item_resource_id "is blank for usage types that aren't associated with an instantiated host, such as data transfers and API requests", so request line items do not name the bucket. The AWS usage report for Amazon S3 does: its Resource column is "The name of the bucket or table associated with the listed usage", and the S3 usage type reference defines Requests-Tier2 as "The number of GET and all other non-Tier1 requests". A destination bucket with no Tier 2 requests over a few months is a strong lead. For minute-level detail, the S3 CloudWatch metrics page says "When enabled, request metrics are reported for all object operations", and "These CloudWatch metrics are billed at the same rate as the Amazon CloudWatch custom metrics." Before retiring a rule, remember that an unread copy may be the point: the S3 FAQ notes that "CRR can also help if you have a compliance requirement to store copies of data hundreds of miles apart." Ask whether every version and every rule needs to be there, not only whether replication can be turned off.

Replicating into a storage class that monitors objects adds a per-object charge that scales with object count rather than volume, and it has a break-even object size: what S3 Intelligent-Tiering costs. The requests replication itself issues are billed on their own ladder, set out in S3 request pricing.

Share LinkedIn X Hacker News Reddit

See this on your own bill

Akal Cloud connects in about two minutes and shows the same numbers against your real AWS accounts.

Get started on AWS Marketplace

Related reading