
13 招搞定对象存储成本:S3 到 OSS/COS/OBS/TOS 全覆盖
Amazon Simple Storage Service(Amazon S3)是一款 高扩展、低时延、相对低价 的云对象存储。开发者可通过友好的 Web 界面,随时随地保存、归档并检索海量结构化或非结构化数据。S3 采用 Key-Value 模式,无论数据大小、访问频次,都能弹性存储并按使用量计费。
目标虽是“低成本”,但不少团队仍被 S3 账单困住。
如果你正头疼存储费用,下面整理的 12+ 条 S3 成本优化秘籍 或许能帮你“止血”。每条技巧 后,我们都会补充 阿里云 OSS、腾讯云 COS、华为云 OBS、火山引擎 TOS 在同类场景下的配置思路,方便对照落地。
什么是 Amazon S3 成本优化?
S3 成本优化 指一系列最佳实践,目标是在 不影响业务可用性、性能和安全 的前提下,最大限度降低 Amazon S3 的使用费用,并提升对象存储投资回报。
“成本优化” ≠ 单纯“省钱”
-
只降成本
可能简单粗暴地删减配置或降低冗余,账单立竿见影下降,但也可能让应用的可靠性、访问延迟甚至安全性受损。 -
成本优化
先找出真正驱动 S3 账单的关键因素,再对症下药——既省钱,又不掉链子。
因此,正确的做法是 先理解 S3 计费结构,再定位成本热点,最后选择合适的优化动作。下文我们将逐条拆解常见成本项,并给出可落地的优化技巧。
🇨🇳 国内对象存储同理
阿里云 OSS、腾讯云 COS、华为云 OBS、火山引擎 TOS 等平台在计费逻辑上与 S3 类似:主要由存储量、请求次数、数据取回/迁移、流量等组成。掌握 S3 优化思路后,同样可映射到这些国产云服务。
对象存储费用怎么算?
Amazon S3 与大多数 AWS 服务一样,采用 按需付费(pay-as-you-go) 模式:
- 零预付、无最低门槛
- 只为 实际使用量 付费
- 可随时扩缩,不受容量与合约限制
🇨🇳 国内对象存储同理
对比国内云:阿里云 OSS、腾讯云 COS、华为云 OBS、火山引擎 TOS 也均采用类似的存储量 + 请求量计费模式。
影响 S3 账单的主要变量
维度 | 说明 | 国内对象存储对应项 |
---|---|---|
存储类型 | S3 提供 6 大存储类型(Standard、IA、Glacier 等),价格随冗余与取回时延递减 | OSS Standard / IA / Archive;COS 标准存储 / 低频存储 / 归档存储;OBS、TOS 类似 |
数据量 (GB) | 每类存储按月计费 | 同上 |
请求次数 | PUT、GET、LIST 等 API 调用按千万级计费 | OSS/COS/OBS/TOS 也会区分上传、下载、列举等请求费用 |
数据取回 | 冷数据(Glacier/Archive)按取回量计费 | 国内云的归档/冷归档同理 |
跨区流量 | 跨区域复制、下载到公网会产生流量费 | 输出到公网、跨地域复制收费 |
1. 先弄清楚自己到底怎么用对象存储,再动手优化
在动任何配置前,可观测性 是第一步。对 Amazon S3 来说,官方的 S3 Storage Lens 就是首选工具,它可以按 账户 / Bucket 维度,统计存储量、请求类型、取回模式等 29+ 指标,让你清楚知道:
- 哪些桶最大,哪些几乎不访问
- 哪些桶里堆满旧版本或未完成分段上传
- 生命周期规则是否缺失,导致文件无法自动转低频或归档层
启用后,你就能在仪表盘里:
优化切入口 | 对应操作 |
---|---|
Largest Buckets | 找出 Top N 最大 Bucket,重点排查是否热数据混冷数据 |
Cold Buckets | 标记近乎零访问的桶,评估是否转低频 / 归档类 |
Incomplete Multipart Uploads | 7 天以上未完成分段上传,添加生命周期规则自动清理 |
Non-current Versions | 限制旧版本保留天数或数量 |
Lifecycle Rule Count | 检查是否缺少转储 / 过期规则 |
详细步骤可参见 官方指南。
🇨🇳 国内云厂商的同类做法
服务 | 相似功能 |
---|---|
阿里云 OSS | CloudLens |
腾讯云 COS | 数据监控 |
华为云 OBS | 监控服务 |
火山引擎 TOS | 监控服务 |
✅ 落地建议
不管使用哪家云,先打开 “用量 / 画像 / Storage Lens” 这类分析面板,至少跑一周数据再着手改动。这样能精准知道 “该删的删、该转的转”,而不是一刀切地降配或手动搬家。
2. 自动把对象转到更便宜的存储层
当你不确定 何时 应把数据从 Standard 层转到更便宜的层(如 Standard-IA),先用 Amazon S3 Storage Class Analysis 观察访问模式——在桶级别开启即可。
看清哪些数据几乎不再被访问后,再用 S3 Lifecycle 规则 让对象自动下迁:
目标存储层 | 典型场景 |
---|---|
S3 Standard-IA | 偶尔访问、需要多 AZ 冗余 |
S3 One Zone-IA | 可接受单 AZ、但读写仍偶尔发生 |
S3 Glacier / Glacier Deep Archive | 归档,几乎不访问或仅做合规保留 |
示例:
- 对象创建 30 天后转 Standard-IA
- 创建 365 天后转 Glacier Deep Archive
该做法适合 访问模式可预测 的数据。如果访问不规律,可用 Intelligent-Tiering。
🇨🇳 国内云厂商对照
云厂商 | 对应功能 |
---|---|
阿里云 OSS | Lifecycle |
腾讯云 COS | Lifecycle |
华为云 OBS | Lifecycle |
火山引擎 TOS | Lifecycle |
落地建议
- 先开“访问/用量分析”跑 7–30 天,搞清冷热分布。
- 再分前缀或标签建 Lifecycle,避免“一刀切”误伤热数据。
- 定期复查规则:业务变更后及时调整天数或目标层,防止数据被误归档。
3. 启用 Intelligent-Tiering:让 S3 自动帮你“分冷热”
S3 Intelligent-Tiering 会持续监控对象的访问模式,并在后台把对象自动转到“最划算”的存储层,无需人工干预。
不过,它并非零成本——主要有两类额外费用。
费用项 | 单价 | 说明 |
---|---|---|
监控费 | $0.0025 / 1,000 对象 / 月 | 用于统计访问频率 |
转层费 | $0.01 / 1,000 对象 / 次 | 对象在不同 IA 层之间切换时收取 |
取回存放在 Infrequent Access (IA) 层的数据还需 $0.01 / GB 带宽费,但与 Standard 层“免费取回”相比,整体存储单价可低 4 倍,适合“一个月最多查一次、做备份 / 容灾”的场景。
费用估算公式
监控费 = 对象数 ÷ 1000 × 0.0025 转层费 = 当月触发转层的对象数 ÷ 1000 × 0.01
启用前务必评估访问模式:
- 如果对象读写频繁,Intelligent-Tiering 监控费 + 转层费 可能抵消存储节省,得不偿失。
- 若冷热分明、但难以手动设置生命周期规则,Intelligent-Tiering 就很划算。
注意权衡:
- IA/Glacier 层副本少、SLA 稍低、取回需等待。
- 每 1,000 对象在层之间切换都要 $0.01,所以短期冷热频繁波动时成本可能升高。
🇨🇳 国内云厂商对应功能
云厂商 | 对应功能 |
---|---|
阿里云 OSS | 智能分层 |
腾讯云 COS | 智能存储分层 |
华为云 OBS | 生命周期管理 |
火山引擎 TOS | 智能分层 |
✅ 落地建议
- 先用“用量分析 / Storage Lens”跑一段时间,确认冷热分布。
- 对“访问规律难预测”的桶启用智能分层;访问稳定可预测的桶继续用 Lifecycle 手动转层更划算。
- 定期观察监控费用占比,若监控费 > 节省的存储费,说明此桶不适合智能分层。
4. 将 KMS 替换为 S3 Bucket Keys:加密也能省钱
当你在 S3 中启用 AWS KMS(客户主密钥加密)时,每次写入对象都会触发一次 加密请求,读取时触发一次 解密请求,按调用次数计费。如果数据量大、请求频繁,KMS 调用费会显著抬高账单。
S3 Bucket Keys 通过为同一桶内的对象生成 “批量数据密钥”,可把频繁的 KMS 调用压缩到极少数几次,官方测试可 降低多达 99 % 的 KMS 费用,且不影响现有应用逻辑——只需在桶上勾选即可。
操作路径:S3 → Bucket → Properties → Default encryption → 勾选 “Bucket Key”
注意:即便 Key 处于 Disabled 状态,KMS 也会继续计费。如确定关闭不会影响已有服务,建议 直接删除闲置 CMK,彻底停掉费用。
🇨🇳 国内云厂商对应做法
云厂商 | 同类功能 |
---|---|
阿里云 OSS | 官网暂无描述 |
腾讯云 COS | 官网暂无描述 |
华为云 OBS | 官网暂无描述 |
火山引擎 TOS | 官网暂无描述 |
✅ 落地提示
- 检查每月 KMS 请求量,若费用占比高,可先在测试桶开启 Bucket Keys/桶级密钥评估效果。
- 定期清理 已禁用 又不会再用的 CMK,避免“闲置也计费”。
- 对于低敏感或内部日志等数据,可考虑使用 SSE-S3(服务端默认加密)或不加密,以降低整体加密成本。
5. 提升传输速度:快进快出,间接省钱
更快的上传/下载意味着:
- 性能更好:数据及时可用,用户体验不掉链子
- 资源占用更少:传输时间缩短,所用的计算实例、带宽等可计费资源随之减少
先在小规模场景压测,确认 “加速费 < 节省的资源费” 再全面推广。
S3 的做法:开启 Transfer Acceleration
- 利用 Amazon CloudFront 全球边缘节点,让文件经最近的边缘站点入网,官方测试最快可比普通公网上传 提速 10 倍。
- 开启路径:S3 → Bucket / Properties → Transfer acceleration → Enable
- 计费:按区域 & 流出流量额外加收 $0.04+/GB(详见官方定价)
🇨🇳 国内云厂商对应方案
云厂商 | 规则 | 降费思路 |
---|---|---|
阿里云 OSS | 入站免费;公网下行收费;内网流量免费 | OSS 加速 + CDN + 跨区域复制 |
腾讯云 COS | 入站免费;公网下行收费;内网流量免费 | 全球加速 + CDN + 跨区域复制 |
华为云 OBS | 入站免费;公网下行收费;内网流量免费 | CDN + 跨区域复制 |
火山引擎 TOS | 入站免费;公网下行收费;内网流量免费 | 传输加速 + CDN + 跨区域复制 |
✅ 落地建议
- 针对 跨区域 / 跨国 的大文件或高并发场景优先考虑加速。
- 上传前压缩 / 分片,多线程并行,可进一步提升有效速率。
- 定期评估加速产生的额外流量费,确保 ROI 为正。
6. 只取 需要的那部分数据:用 S3 Select 精准取回
S3 Select 允许你在对象(CSV、JSON、Parquet)内部执行 SQL-like 查询,仅返回匹配行/列。
这样可显著减少 取回数据量 → 缩短下载时间 → 降低流出流量费。
- 使用方法:
- 确保对象格式为 CSV / JSON / Parquet
- S3 控制台 → 选中文件 → Actions → Query with S3 Select
- 编写 SQL(支持
SELECT col1,col2 WHERE
…)
- 控费逻辑:只按返回字节计费,未返回的数据不产生取回费。
控制台搜索小技巧:在 Bucket 内使用 前缀搜索栏,快速定位对象,再对单文件使用 S3 Select。
🇨🇳 国内云厂商对应功能
云厂商 | 类似服务 |
---|---|
阿里云 OSS | OSS Select |
腾讯云 COS | SQL Select |
华为云 OBS | 暂无 |
火山引擎 TOS | 暂无 |
✅ 建议场景
- 日志分析:只拉取近 1 小时 / 指定字段
- 数据湖:从大 Parquet 文件选取所需列后再下游处理
- 移动网络:客户端按需取回 JSON 片段,减少流量
使用 Select 时,注意对 频繁查询的小文件 进行合并,避免过多函数调用产生额外请求费。
7. 让「存储」和「计算」待在同一地区
原则:桶和计算节点同区,流量=0;跨区流量要收费
- 同区访问
EC2(或 EKS、Lambda 等)与 S3 处于同一 Region 时,读写走内网,不计流出费,延迟也最低。 - 跨区访问
若 EC2 在 us-east-1 而 S3 在 ap-southeast-1,下载数据会产生跨区流量费,且时延更高。
降费做法
场景 | 优化建议 |
---|---|
计算与存储必须跨区 | 复制桶 到计算区最近的 Region,只复制必要前缀 / 标签,控制体量 |
热门静态文件频繁跨区下载 | 把文件分发到 CloudFront CDN,用户就近获取,S3 流出压缩 |
临时批处理 / 迁移 | 先就近创建 EC2,再拉取数据;处理完直接从同区上传结果 |
⛔ 注意:整桶跨区复制开销大,先核算数据量 & 复制频率,必要时仅做局部复制。
🇨🇳 国内云厂商同样适用
云厂商 | 降费提示 |
---|---|
阿里云 OSS | ECS 与 OSS 选相同地域,内网走 0 流量费;跨地域同步数据先用跨区域复制 |
腾讯云 COS | CVM 与 COS 保持 “同 Region + 私有网络直连” 免费;跨地域同步数据先用跨区域复制 |
华为云 OBS | ECS 与 OBS 同 VPC / 同 Region 内网 0 流量;跨地域同步数据先用跨区域复制 |
火山引擎 TOS | 计算资源与 TOS 桶放同 Region;跨地域同步数据先用跨区域复制 |
✅ 实操 Checklist
- 创建新桶/新计算节点前,先确认两者 Region 是否一致。
- 对现有跨区调用,跑一次流量账单,评估是否“搬桶”或“复制前缀”。
- 大量静态资源跨区下载 → CDN;动态、少量数据 → 同区直连/小规模复制。
8. 用 IAM 控制谁能干什么,顺带省钱
- 核心思路:谁该读就读,谁该写就写,其他操作统统禁掉。
- 为什么省钱:少了不必要的上传、下载、删除请求,就少了对应的计费。
怎么做?
- 打开 AWS 控制台 → 搜索 IAM。
- 在 Users 或 Roles 里,为人员/程序绑定合适的权限策略。
- 只读示例:
s3:GetObject
- 只写示例:
s3:PutObject
- 只读示例:
- 建议按 桶或前缀 授权,生产和测试环境分开。
同样的思路也适用于阿里云 OSS(RAM)、腾讯云 COS(CAM)、华为云 OBS、火山引擎 TOS:给最小权限,就能减少多余请求和费用。
9. 及时清理不用的数据
- 能删就删
- 过期日志、测试文件、临时导出……不用就直接删除。
- 能重建的也删
- 自动生成的中间结果,日后再需要再跑一次即可。
- 清理未完成分片上传
- 这些碎片会计费,可用 Lifecycle 规则 7 天后自动删除。
- 别忘清空回收站
- S3 的 “Delete Marker” 或版本库里的旧版本都会占用存储。
如果真的不放心彻底删除,可转最便宜的归档层:
AWS 方案 | 单价 | 适用场景 |
---|---|---|
Glacier Flexible Retrieval | 较低 | 少量取回、时延小时级 |
Glacier Deep Archive | 最低 | 基本不访问,需要时可等 12 小时取回 |
创建 Lifecycle 规则,让旧文件(如 180 天未访问)自动转归档层。需要时再 Restore 解归档即可。
🇨🇳 国内云厂商类比
云厂商 | 归档层 | 清理方式 |
---|---|---|
阿里云 OSS | 归档 / 冷归档存储 | Lifecycle 自动删除分片 / 转档 |
腾讯云 COS | 归档 / 深度归档存储 | 同上 |
华为云 OBS | 归档 / 冷归档存储 | 同上 |
火山引擎 TOS | 归档 / 深度归档存储 | 同上 |
清理/转档建议设在低峰时段执行,避免与业务高峰冲突。
10. 小文件打包一起传,减少 API 调用
在 S3 里,计费看请求次数,不看文件大小。
- 1 次
PUT
上传 1 KB 收费和上传 1 GB 完全一样。 - 如果你把 1 GB 拆成 10 000 个小文件上传,就要付 10 000 次
PUT
费,成本瞬间翻倍。
做法
- 使用
tar
、zip
等把大量小文件先 本地打包(或在临时 EC2 打包)。 - 生成一个大文件后,再一次性
PUT
到 S3。 - 需要读取时,再用 S3 Select / Range Get / 下载到本地解包。
效果:请求次数骤降 → PUT
/GET
计费显著降低。
🇨🇳 国内云厂商同理
云厂商 | 建议 |
---|---|
阿里云 OSS | 大量小文件同样按 PUT /GET 次数计费,先 tar 再上传可省请求费 |
腾讯云 COS | 支持断点续传,但仍按请求计费,批量打包后再用分片上传更划算 |
华为云 OBS | 归档冷数据时,先合并再上传,后续解包也只计少量请求 |
火山引擎 TOS | 建议日志归档前合并,减少 PUT 次数;需要随机读取可配合 TOS Select |
注意
- 打包会让单个对象变大,下载时需整体取回或用 Range 请求;适用于归档、日志、备份等顺序读场景。
- 若后续需随机访问单个子文件,考虑使用 Parquet 这类可列式读格式,再配合 S3 Select。
11. 改用 Parquet + 压缩:体积小,查询快,费用低
- Parquet 是列式存储格式,自带高压缩比(可再叠加 ZSTD / GZIP / LZ4)。
- 对比 CSV:
- 存储占用 可降 50–90 %
- 扫描查询 只读相关列,IO 更少,取回流量费更低
适用场景:日志分析、数据湖、机器学习特征库等“读列多于写行”的场景。
落地步骤
- 在 ETL 流程末尾把原始 CSV / JSON 转成 Parquet + 压缩。
- 上传至 S3(或 OSS/COS/OBS/TOS)。
- 上游用 Athena / EMR / StarRocks 等直接查询,减少下载流量。
🇨🇳 国内云厂商同样支持
云厂商 | 建议 |
---|---|
阿里云 OSS | 与 S3 一样 |
腾讯云 COS | 与 S3 一样 |
华为云 OBS | 与 S3 一样 |
火山引擎 TOS | 与 S3 一样 |
✅ 小贴士
- 配合 S3 Select / OSS Select 仅拉所需列,更省流量。
- ZSTD 通常压缩率 > GZIP,且解压更快,可优先考虑。
12. 查询前先做 分区,少扫文件少花钱
在 S3 上跑 SQL(Athena、Redshift Spectrum、EMR 等)时,表其实映射到 Bucket / 目录。
如果文件没按日期、时间、业务 ID 等维度分区,查询时就得 全桶扫描 → 产生大量 GET
请求 + 流量费。
最佳实践
-
按常用过滤条件建目录
常见分区键:date
/hour
/tenant_id
/region
。 -
加载分区元数据
- Athena:
MSCK REPAIR TABLE
或PARTITIONED BY
创建表时指定 - EMR:在 Hive/Presto 中
ALTER TABLE ... ADD PARTITION
- 查询时带过滤
SELECT * FROM logs WHERE date='2025-04-24';
🇨🇳 国内云厂商同样支持
云厂商 | 建议 |
---|---|
阿里云 OSS | 与 S3 一样 |
腾讯云 COS | 与 S3 一样 |
华为云 OBS | 与 S3 一样 |
火山引擎 TOS | 与 S3 一样 |
🚀 收益:分区过滤 + Parquet 压缩 → 扫描的数据量最小化,请求费、扫描费和查询时长都能明显下降。
13. 让工程师“当家做主”,把 S3 成本纳入日常指标
不少团队都有过这样的经历:
演示环境开完忘记关,测试脚本上传海量数据没人清理……
几个开发者叠加,就可能让账单“炸雷”。
建立成本共担文化,从流程和工具两方面入手:
行动 | 实施要点 |
---|---|
定规则 | - 规定非工作时段自动关停临时资源 - 对闲置时间 > N 分钟的桶或测试实例自动删除 |
设指标 | - 明确哪些指标代表“花钱点”(存储量、GET/PUT 次数、跨区流量等) - 每周回顾一次 Top N 桶花费 |
配数据 | - 把费用拆到「项目 / 团队 / 环境」,让工程师看懂自己写代码花了多少钱 |
勤告警 | - 使用 CloudWatch、Billing Alarm 等捕捉突增 - 超预算立刻推送到 钉钉 / 飞书 / 企业微信 |
常培训 | - 教工程师把“成本”当作第一类非功能需求,与性能、安全并重 |
至此,12 + 1 条对象存储省钱秘籍全部奉上
从用量洞察、生命周期转层,到权限控制,再到团队文化——希望能帮你在 AWS S3 及国内各大云对象存储上,把每一分钱都花在刀刃上。
联系我们
有任何云成本管理的需求或问题?欢迎通过以下方式联系我们!
公众号
企业微信客服
业务咨询
技术社区
地址
北京市海淀区自主创新大厦 5层