我正在尝试通过 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')
但是,当我将其放入最终代码中(该代码与其他一些依赖项一起压缩)并使用行数据进行其他处理时,我收到上述错误。 我不明白为什么会发生这种情况。
最佳答案
您只能将对象复制到 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
如果您尝试将其保存在 lambda 而非 tmp 文件夹中,您将收到以下错误:
"errorMessage": "[Errno 30] Read-only file system: 'xyz'",
引用: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-download-file.html
关于python-3.x - 错误号 2 : No such file or directory: SSLError while calling s3. get_object(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52550655/