Jupyter Notebook中使用Boto3时S3桶名称验证失败
解决Boto3从S3下载文件时的ParamValidationError错误
错误原因分析
你遇到的ParamValidationError由多个代码问题导致:
- 桶名格式错误:使用的ARN
arn:aws:s3:mybucket不符合S3规范,正确的S3桶ARN格式应为arn:aws:s3:::bucket-name(三个冒号分隔),或者直接使用纯桶名更简单。 - 语法错误:两处字符串未闭合:
BASE_DIR='../缺少结束单引号;boto3.client('s3)缺少结束单引号。 - 对象键格式问题:
BUCKET_PATH='/dataset'开头的斜杠会生成无效的S3对象键,S3对象键无需以斜杠开头。
修正后的代码
# EDIT: S3 bucket and folder where you uploaded file.zip BUCKET='mybucket' # 直接使用桶名,或正确ARN格式:'arn:aws:s3:::mybucket' BUCKET_PATH='dataset' # 去掉开头的斜杠 # DO NOT EDIT: Name of zip and relative path on managed notebook FILES='dataverse_files' FILES_EXT='dataverse_files.zip' BASE_DIR='../' # 补全结束单引号 import boto3 # 确保导入boto3模块 s3 = boto3.client('s3') # 补全结束单引号 s3.download_file(BUCKET, f"{BUCKET_PATH}/{FILES_EXT}", f"{BASE_DIR}{FILES_EXT}")
额外注意事项
- 确保Jupyter Notebook的执行环境已正确配置AWS凭证(通过环境变量、~/.aws/credentials文件或IAM角色),拥有S3桶的读取权限。
- 如果使用ARN格式的桶名,必须保证ARN完全符合S3的ARN规范,否则仍会触发参数验证错误。
- 使用f-string拼接路径比
+更清晰,也能避免潜在的字符串拼接错误。
内容的提问来源于stack exchange,提问作者Emmanuel Henri
相关产品推荐
相关产品推荐

