get-s3object是否会将AWS S3的完整对象数据下载到内存?
AWS S3元数据获取问题解答
1. get-s3object的内存占用与费用问题
get-s3object接口本身的设计是拉取对象的完整实体内容,如果你使用AWS CLI或者各类语言的官方SDK时,没有显式配置流式读取、也没有指定只拉取响应头,那么对象的完整内容会被全部加载到运行内存中。你当前产生大量超额公网传输费用,核心原因就是你不需要对象实体内容,但调用该接口时全量拉取了所有对象的完整数据。
2. 适配你需求的最优解决方案
你的需求是仅拉取对象元数据、对象量级为数千、运行环境在AWS外、要尽可能降低API调用次数和传输量,优先推荐以下方案:
- 首选
list-objects-v2接口:该接口单次调用最多可返回1000个对象的基础元数据,包含最后修改时间、对象大小、ETag、存储类等通用元数据信息。数千个对象仅需要3~5次API调用即可完成全量拉取,仅传输极少量的元数据清单,哪怕是在AWS外运行,产生的公网传输成本几乎可以忽略,远低于get-s3object和单对象get-s3objectmetadata方案。
注意:如果你需要获取的是自己为对象设置的自定义用户元数据,list-objects-v2不会返回这类数据,需要选择下方优化方案 - 需获取自定义元数据的优化方案:
- 如果对元数据的实时性要求不高,可以为存储桶开启S3 Inventory功能,按指定周期(小时/天)自动导出全桶所有对象的元数据(包含自定义元数据)到指定存储桶,你只需拉取生成的清单文件即可,单次拉取就能拿到全量元数据,API调用次数和传输量都降到最低
- 如果需要实时获取自定义元数据,可使用SDK的异步批量调用能力并发调用
get-s3objectmetadata,几千个对象的请求可在数秒内完成,且每次调用仅传输响应头数据,没有对象实体的传输开销,成本比get-s3object低99%以上
内容的提问来源于stack exchange,提问作者Lizard
相关产品推荐
相关产品推荐

