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

使用AWS s3api list-objects列出内容时卡住无响应的问题求助

解决AWS s3api list-objects卡住且实现分页获取NextToken的问题

我之前也碰到过类似的情况,咱们一步步来排查解决:

为什么s3api list-objects会卡住?

最常见的原因是你的存储桶里对象数量太多:

  • aws s3 ls内部会自动做分页处理,并且边获取边输出结果,所以看起来能正常返回;
  • 而aws s3api list-objects默认会尝试一次性拉取所有对象数据,当对象量很大时,会因为等待全量数据传输完成而卡住,甚至超时。

用s3api实现分页+获取NextToken的正确姿势

你需要手动指定分页参数,强制命令分批返回结果,同时拿到NextToken用于下一页查询:

1. 首次查询(获取第一页+NextToken)

执行命令时加上--max-items指定每页返回的对象数量(比如1000):

aws s3api list-objects --bucket user_list_staging --max-items 1000

响应结果里会包含NextToken字段(如果还有更多对象未返回),把这个值记下来用于下一页查询。

2. 后续分页查询(使用NextToken)

用上一步拿到的NextToken,加上--starting-token参数继续查询:

aws s3api list-objects --bucket user_list_staging --max-items 1000 --starting-token "你的NextToken值"

重复这个步骤,直到响应里不再出现NextToken,说明已经获取完所有对象。

3. 自动化循环分页(Shell脚本示例)

如果需要自动遍历所有分页,可以用Shell脚本+jq(JSON处理工具)来实现:

#!/bin/bash
BUCKET_NAME="user_list_staging"
MAX_ITEMS=1000
next_token=""

while true; do
    # 根据是否有next_token构建命令
    if [ -z "$next_token" ]; then
        response=$(aws s3api list-objects --bucket "$BUCKET_NAME" --max-items "$MAX_ITEMS")
    else
        response=$(aws s3api list-objects --bucket "$BUCKET_NAME" --max-items "$MAX_ITEMS" --starting-token "$next_token")
    fi

    # 这里可以自定义处理逻辑,比如提取对象的Key
    echo "$response" | jq '.Contents[] | .Key'

    # 获取下一页的token
    next_token=$(echo "$response" | jq -r '.NextToken')

    # 没有next_token时退出循环
    if [ "$next_token" == "null" ]; then
        break
    fi
done

注意:需要提前安装jq(大部分Linux发行版可以用apt install jq或yum install jq安装)。

额外排查建议

  • 检查AWS CLI版本:旧版本可能存在性能或兼容性问题,建议更新到最新版:
    pip install --upgrade awscli
    
  • 确认网络环境:如果是在受限网络下,可能需要检查是否有代理或防火墙阻止了s3api的长连接,不过s3 ls能正常工作的话,这个概率较低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:28:35