跨账号跨区域S3 sync计费及更优S3存储桶复制方案咨询
S3 sync 计费规则说明
aws s3 sync本身是免费工具,费用全部来自调用S3 API产生的请求费、流量费,之前费用超预期基本都是没算全隐藏的计费项:
- LIST请求费:每1000次LIST请求收费0.005美元,单次LIST最多返回1000个对象,同步前全量扫桶列对象就会产生这笔费用,重跑一次就收一次
- HEAD/GET请求费:默认sync逻辑会拉取每个对象的元数据、etag做比对,每10000次这类请求收费0.0004美元,断网重跑、重复执行都会重复计费
- PUT/COPY请求费:每同步1个对象到目标桶,就会产生1次PUT类请求,每1000次收费0.005美元,重复传对象会重复收
- 流量费:S3只免入站流量,从源桶传出到其他区域/其他服务/公网都要收跨区/公网出流量费,跑
s3 sync的机器不在源桶可用区的话,会多收一笔源到机器的出流量,成本直接翻倍 - 计算资源费:如果在EC2、本地服务器跑sync,对应机器的运行成本也要算,亿级对象同步往往要跑数天,这笔费用经常被忽略
5TB/2亿对象跨账号跨区全量复制成本核算(按美东1源区、同商业分区目标区公开定价计算,不同区域定价有10%-20%浮动)
走原生aws s3 sync的一次性全量同步成本:
- API请求费:全量LIST约1美元,全量HEAD比对约8美元,2亿次COPY写入约1000美元,合计1009美元
- 跨区出流量费:5TB合计5120GB,按0.02美元/GB计算约102.4美元
- 计算资源费:用c5.2xlarge规格EC2跑20小时左右完成,费用约8美元
- 合计约1119.4美元
如果出现重跑、跑sync的位置不在源区、重复传对象的情况,成本会上涨30%-200%,这也是之前费用超预期的核心原因。
优于S3 sync的复制方案
针对你这个亿级对象、TB级数据的跨账号跨区复制场景,下面两个方案比原生sync性价比、可靠性、速度都好很多:
- S3跨区域复制(CRR)+ S3 Batch Replication 组合
这是最省心的托管方案,不需要维护运行同步任务的服务器:先配置CRR规则,给跨账号的目标桶配置对应的复制权限,后续新写入源桶的对象会自动同步到目标桶;存量的2亿历史对象直接开S3 Batch Replication一次性补传,不需要自己列对象、做重试、跟踪进度。
成本和sync比,请求费、跨区流量费完全一致,省掉了EC2计算成本,也不会因为重跑产生重复的LIST、HEAD请求费,总成本比sync低1%左右,后续增量同步成本比手动跑sync低70%以上,复制走AWS内网骨干,速度比自己跑sync快3-5倍,还支持同步对象版本、标签、权限、加密属性,不会出现元数据丢失的问题。 - S3 Batch Operations 直接复制
如果不需要后续自动同步增量,只做一次性全量迁移,直接用S3 Batch Operations即可:先用S3 Inventory导出源桶全量对象清单,提交Batch复制作业,剩下的对象校验、重试、进度跟踪全由S3托管完成,2亿对象大概2-3天就能复制完,比自己跑sync快5-10倍。
成本只比纯sync多了每百万对象1美元的作业管理费,但省掉了重复LIST、HEAD的请求费和EC2成本,总费用比sync低10%左右,还能导出失败对象清单补传,不会漏传。
成本优化提示:不要用第三方迁移工具、不要把对象下载到本地再上传,这类方案会产生额外公网流量费,成本至少是原生方案的2倍;复制完成后用S3 Inventory做源和目标的一致性校验,不要全量LIST扫桶比对,校验成本能降99%;如果小对象(小于128KB)占比超过30%,可以先打包成大对象再复制,能省30%以上的请求费。
内容的提问来源于stack exchange,提问作者Ketul Radadiya
相关产品推荐
相关产品推荐

