我正试图通过我的lambda函数从S3存储桶中加载一个csv文件。 这样做时,我会出现以下错误。
Errno 2: No such file or directory: SSLError
Traceback (most recent call last):
File "/var/task/lambda_function_csv.py", line 12, in lambda_handler
obj = raw_s3.get_object(Bucket ='h2h-demo', Key ='H2H_results_100.csv')
我在我的函数中使用下面给出的代码来获取文件。在函数配置中使用嵌入式编辑器创建一个小的函数时,该函数会打印出csv文件的行,以供我阅读。
当我在本地计算机上运行它时,它也可以正常工作。
raw_s3 = boto3.client('s3')
obj = raw_s3.get_object(Bucket ='h2h-demo', Key ='H2H_results_100.csv')
但是,当我将其放入最终代码中并与其他一些依赖项压缩在一起并且将行数据用于其他处理时,却遇到了上述错误。 我不明白为什么会这样。
答案 0 :(得分:0)
您只能将对象复制到lambda的tmp文件夹中,通过将tmp文件夹添加到目标位置来进行以下更改:
obj = raw_s3.get_object(Bucket ='h2h-demo', Key ='/tmp/H2H_results_100.csv')
我建议将来抛出异常,它们在调试中确实有用:
import boto3
import botocore
BUCKET_NAME = 'xyz' # replace with your bucket name
KEY = 'xyz' # replace with your object key
s3 = boto3.resource('s3')
try:
s3.Bucket(BUCKET_NAME).download_file(KEY, '/tmp/xyz')
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
如果您尝试将其保存在tmp文件夹以外的lambda中,则会出现以下错误:
"errorMessage": "[Errno 30] Read-only file system: 'xyz'",
参考: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-download-file.html