使用AWS Lambda中存储在S3上的pickle文件

时间:2017-11-08 02:59:17

标签: python amazon-web-services amazon-s3 lambda aws-lambda

我目前正在使用Amazon Web Services Lambda函数,我需要使用我在本地创建但现在存储在S3中的sklearn文件。我已经对如何实际执行此操作感到困惑,我已尝试过boto3的文档中的一些不同方法,但这会导致超时错误:

import boto3
import pickle
s3 = boto3.client("s3", region_name="us-west-1")
response = s3.get_object(Bucket="mybucket", Key="bin_files/scaler.pkl")
loaded_file = pickle.load(response["Body"])

另一方面,这样做会导致找不到文件错误:

 with open(key, 'wb') as data:
     s3.Bucket(event['bucket']).download_fileobj(key, data)


"errorMessage": "[Errno 2] No such file or directory: 
'bin_files/scaler.pkl'"

有没有人对如何做到这一点有任何想法或提示?

1 个答案:

答案 0 :(得分:2)

正确的代码:

 with open('scaler.pkl', 'wb') as data:
     s3.Bucket('bucket').download_fileobj(key, data)

如果要将s3文件下载到当前目录,则应该将 文件名 传递给文件open()方法和 不是整个密钥 。在您的情况下,您将bin_files/scaler.pkl作为 文件名 传递。

在您的情况下,python代码将在当前工作目录(目录中执行boto脚本)中查找bin_files目录并尝试编写scaler.pklbin_files目录中。由于目录不存在,因此会引发[Errno 2] No such file or directory错误。

如果将 PATH 添加到文件名,则应确保整个 PATH 存在且具有适当的目录权限。