以下方法对我有效。
from boto3 import client
BUCKET = 'MY_S3_BUCKET_NAME'
FILE_TO_READ = 'FOLDER_NAME/my_file.json'
client = client('s3',
aws_access_key_id='MY_AWS_KEY_ID',
aws_secret_access_key='MY_AWS_SECRET_ACCESS_KEY'
)
result = client.get_object(Bucket=BUCKET, Key=FILE_TO_READ)
text = result["Body"].read().decode()
print(text['Details'])
进一步改进
让我们将上面的代码片段称为
read_s3.py
。
直接硬编码AWS Id和Secret Keys并不是一个好主意。为了最佳实践,您可以考虑以下任一方法:
(1)从存储在本地存储中的json文件(
aws_cred.json
)中读取您的AWS凭据:
from json import load
from boto3 import client
...
credentials = load(open('local_fold/aws_cred.json'))
client = client('s3',
aws_access_key_id=credentials['MY_AWS_KEY_ID'],
aws_secret_access_key=credentials['MY_AWS_SECRET_ACCESS_KEY']
)
(2)从您的环境变量中读取(我在部署时的首选选项):
from os import environ
client = boto3.client('s3',
aws_access_key_id=environ['MY_AWS_KEY_ID'],
aws_secret_access_key=environ['MY_AWS_SECRET_ACCESS_KEY']
)
让我们准备一个名为
read_s3_using_env.sh
的shell脚本来设置环境变量,并将我们的Python脚本(
read_s3.py
)添加到其中,如下所示:
export MY_AWS_KEY_ID='YOUR_AWS_ACCESS_KEY_ID'
export MY_AWS_SECRET_ACCESS_KEY='YOUR_AWS_SECRET_ACCESS_KEY'
python read_s3.py
现在在终端中执行以下命令来运行shell脚本:
sh read_s3_using_env.sh
repr
。 - Alex Hallrepr
,但它没有起作用,会出现 ValueError: Expecting property name enclosed in double quotes。 - Nanjufile_content = content_object...
这一行包含了4个步骤。现在,将其拆分为4个单独的行,并使用4个中间变量进行赋值。然后查看哪一行出错了。 - falsePockets