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
相关产品推荐
相关产品推荐

