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

AWS SageMaker上传文件至错误S3 Bucket问题排查求助

问题排查:SageMaker上传数据到S3目标目录失败

这种情况我碰到过好多次,90%以上是代码里的S3路径指定错误导致的,和Notebook的创建方式关系不大,除非是角色权限的特殊配置。下面一步步帮你排查:

1. 最常见的原因:S3路径没有写全

你是不是在代码里只写了目标目录名s3_train_data,而没指定完整的Bucket路径?

举个例子:

  • ❌ 错误写法(会传到默认Bucket):
    from sagemaker.s3 import S3Uploader
    # 只写了目录名,SageMaker会自动用默认Bucket创建这个目录
    S3Uploader.upload('./local-data-folder', 's3_train_data')
    
  • ✅ 正确写法(指定完整Bucket+目录):
    from sagemaker.s3 import S3Uploader
    # 必须包含Bucket名称和目标目录的完整路径
    target_s3_path = 's3://your-existing-bucket-name/s3_train_data'
    S3Uploader.upload('./local-data-folder', target_s3_path)
    

SageMaker的S3Uploader如果只收到目录名,会默认把文件传到你的Notebook实例关联的默认Bucket(格式一般是sagemaker-<区域>-<账号ID>),然后在里面创建你指定的目录。所以一定要写全完整的S3 URL。

2. 次要原因:IAM角色权限不足

如果你已经写了完整的S3路径,但还是传到默认Bucket,那可能是你的Notebook实例的IAM角色没有访问目标Bucket的权限。

这时候SageMaker会自动 fallback 到它有权限的默认Bucket(因为默认创建的角色会有访问这个默认Bucket的权限)。解决方法:

  • 去IAM控制台找到你的SageMaker角色
  • 添加一个自定义策略,允许访问你的目标Bucket,比如:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::your-existing-bucket-name",
                    "arn:aws:s3:::your-existing-bucket-name/*"
                ]
            }
        ]
    }
    

3. Notebook创建方式的影响(几乎可以排除)

除非你创建Notebook的时候特意指定了强制绑定默认Bucket的配置,否则常规创建的Notebook不会影响文件上传的目标路径。核心问题还是集中在路径和权限上。

额外验证方法

你可以先在代码里打印一下目标S3路径,确认是不是包含了正确的Bucket名称:

print(target_s3_path)

如果输出是s3://sagemaker-xxx-xxx/s3_train_data,那肯定是路径没写全,改成包含你的目标Bucket的路径就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:12:24