S3存储桶全量Keys获取方法及免费账户容量限制咨询
解答:获取S3存储桶所有对象(Keys)及免费账户限制
一、如何获取存储桶内的所有Keys?
你提到的MaxKeys=1000是S3默认的单次返回对象上限——也就是说,一次请求最多返回1000个Keys。如果存储桶里的文件超过1000个,响应里的IsTruncated字段会是true,这时候就需要分页查询来拿到全部文件。下面是几种常用的实现方式:
1. 使用AWS CLI(最简单的方式)
直接用--recursive参数,CLI会自动帮你处理分页逻辑,不用手动管理标记:
aws s3 ls s3://gameexperiencesurvey/ --recursive
这个命令会遍历存储桶里的所有对象,输出每个对象的Key、大小和修改时间。
2. 使用AWS SDK(以Python boto3为例)
如果需要写代码处理,可以用SDK自带的分页器(Paginator),它会自动处理分页流程:
import boto3 # 初始化S3客户端 s3_client = boto3.client('s3') # 创建分页器,指定list_objects_v2 API(推荐使用v2版本) paginator = s3_client.get_paginator('list_objects_v2') # 分页遍历存储桶内的对象 for page in paginator.paginate(Bucket='gameexperiencesurvey'): # 遍历当前页的所有对象,处理空内容的情况 for obj in page.get('Contents', []): print(obj['Key'])
如果用旧版list_objects API,逻辑类似,只是分页标记用Marker和NextMarker,但更推荐v2版本的API。
3. 手动发送HTTP请求
如果不想用工具或SDK,手动请求需要按以下步骤操作:
- 第一次请求:
http://gameexperiencesurvey.s3.amazonaws.com/?max-keys=1000(省略max-keys参数的话,默认也是1000) - 检查响应XML里的
IsTruncated值:- 如果是
false,说明已经拿到全部Keys; - 如果是
true,提取NextMarker(v1 API)或ContinuationToken(v2 API),在下一次请求里加上对应参数(比如http://gameexperiencesurvey.s3.amazonaws.com/?continuation-token=xxx),重复这个过程直到IsTruncated为false。
- 如果是
二、AWS S3免费账户的限制
关于AWS Free Tier(免费账户)的两个核心限制:
- 存储容量上限:在注册后的前12个月,每月可以免费使用5GB的S3标准存储(是每月额度,不是累计5GB)。超出5GB的部分会按照S3的标准付费价格收取费用。
- Keys(对象)数量:AWS S3对存储桶内的对象数量没有任何官方上限——不管是免费账户还是付费账户,你可以存储任意多的对象,只要它们的总大小不超过你的存储额度(免费用户就是每月5GB)。不过要注意,每个对象至少占用1字节,而且频繁的对象操作(比如创建、删除)可能会产生额外的请求费用,免费套餐里每月有20000次GET请求和2000次PUT/COPY/POST/DELETE请求的额度,超出也要收费。
内容的提问来源于stack exchange,提问作者Vipin Verma
相关产品推荐
相关产品推荐

