You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编程获取AWS S3按前缀分组的资源成本报告?

按前缀分组获取AWS S3资源成本的编程方案

核心思路

AWS原生成本工具(成本分配标签、CUR报告)仅支持桶级成本统计,要按前缀拆分成本,需结合S3访问日志与AWS定价API,从存储量、请求次数、数据传输等维度分别统计各前缀的资源消耗,再对应计价得出明细。

具体步骤

1. 开启S3访问日志记录

确保目标业务桶开启访问日志功能,将日志存储到独立的S3桶(避免与业务对象混淆)。日志会记录每个对象的操作类型、时间戳、对象键(含前缀)等关键数据,是统计请求和传输量的基础。

2. 按前缀统计资源消耗

编写脚本(Python/Go等)完成两类统计:

  • 存储成本统计:定期调用list_objects_v2接口,按前缀分页查询对象,累加每个前缀下所有对象的Size字段(已删除对象无需统计)。
  • 请求与传输量统计:批量读取S3访问日志,解析每条记录的operation(操作类型)、bytes_sent(出站流量)、bytes_received(入站流量)字段,按前缀分组统计各类请求次数和数据传输量。

3. 结合定价API计算成本

调用AWS Pricing API获取当前区域的S3定价信息(存储单价、各类请求单价、数据传输单价),将步骤2统计的各项指标乘以对应单价,得到每个前缀的总成本。

注意:调用定价API时需指定产品代码AmazonS3、目标区域、使用类型等参数,解析返回的JSON格式价格数据匹配对应维度。

4. 汇总输出结果

将每个前缀的日期、总成本整理为目标格式,示例如下:

DateCost, $AWS S3 Prefix
25-Jan-202411/foo/*
25-Jan-202415/bar/*

Python脚本示例片段

import boto3
from collections import defaultdict

# 初始化S3客户端
s3_client = boto3.client('s3')
target_bucket = 'your-business-bucket'

# 按前缀统计存储大小
prefix_storage = defaultdict(int)
# 分页获取所有前缀
prefix_paginator = s3_client.get_paginator('list_objects_v2')
for page in prefix_paginator.paginate(Bucket=target_bucket, Delimiter='/'):
    for prefix_item in page.get('CommonPrefixes', []):
        prefix = prefix_item['Prefix']
        # 统计当前前缀下所有对象的总大小
        obj_paginator = s3_client.get_paginator('list_objects_v2')
        for obj_page in obj_paginator.paginate(Bucket=target_bucket, Prefix=prefix):
            for obj in obj_page.get('Contents', []):
                prefix_storage[prefix] += obj['Size']

# 后续需结合日志统计请求/传输量,再调用定价API计算最终成本

注意事项

  • 日志解析建议采用流式读取,避免大文件占用过多内存。
  • 定价API有调用频次限制,建议缓存定价数据,减少重复请求。
  • 无版本模式下,已删除对象需从存储统计中排除,避免计算无效成本。

内容的提问来源于stack exchange,提问作者oleksii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:18:13