我正在将MIDI文件存储在S3桶中,并尝试将它们下载到SageMaker jupyter笔记本中。我正在使用以下代码:
import os
import boto3 # Python library for Amazon API
import botocore
from botocore.exceptions import ClientError
def download_from_s3(url):
"""ex: url = s3://sagemakerbucketname/data/validation.tfrecords"""
url_parts = url.split("/") # => ['s3:', '', 'sagemakerbucketname', 'data', ...
bucket_name = url_parts[2]
key = os.path.join(*url_parts[3:])
filename = url_parts[-1]
if not os.path.exists(filename):
try:
# Create an S3 client
s3 = boto3.resource('s3')
print('Downloading {} to {}'.format(url, filename))
s3.Bucket(bucket_name).download_file(key, filename)
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print('The object {} does not exist in bucket {}'.format(
key, bucket_name))
else:
raise
然而,在调用HeadObject操作时,我遇到了一个错误(403):拒绝访问。
这里是S3附加的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}