【发布时间】:2021-11-06 12:57:28
【问题描述】:
似乎无法弄清楚如何将我可以使用 cli 执行的操作转换为 boto3 python。
我可以正常运行:
aws s3 ls s3://bucket-name-format/folder1/folder2/
aws s3 cp s3://bucket-name-format/folder1/folder2/myfile.csv.gz
尝试使用 boto3:
import boto3
s3 = boto3.client('s3', region_name='us-east-1', aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY)
bucket_name = "bucket-name-format"
bucket_dir = "/folder1/folder2/"
bucket = '{0}{1}'.format(bucket_name,bucket_dir)
filename = 'myfile.csv.gz'
s3.download_file(Filename=final_name,Bucket=bucket,Key=filename)
我收到此错误:
存储桶名称“bucket-name-format/folder1/folder2/”无效:存储桶名称必须与正则表达式“^[a-zA-Z0-9.-_]{1,255}$”匹配或为ARN 匹配正则表达式 "^arn:(aws).:(s3|s3-object-lambda):[az-0-9]:[0-9]{12}:accesspoint[/ :][a-zA-Z0-9-.]{1,63}$|^arn:(aws).:s3-outposts:[az-0-9]+:[0-9] {12}:outpost[/:][a-zA-Z0-9-]{1,63}[/:]接入点[/:][a-zA-Z0-9-]{1,63}$" *
我知道错误是因为存储桶名称 "bucket-name-format/folder1/folder2/" 确实无效。
问题:如何添加路径?我见过的所有示例都只是列出了基本存储桶名称
【问题讨论】:
-
确保您的 aws cli 默认使用相同的区域。
-
cli 配置说 us-east-1,它匹配。我正则表达式检查了“bucket-name-format/folder1/folder2/”,它是无效的
-
哦!!!不,您需要将存储桶放在一个字符串中,并将文件的完整路径“前缀”。 s3 不像文件系统,文件名始终是完整路径。存储桶名称中不应包含路径。
-
啊,好吧!,我只是尝试删除存储桶名称中的路径并将其添加到文件名中,得到 403 但我知道文件在那里。
-
403 表示禁止 ;)_