python-3.x - 错误号 2 : No such file or directory: SSLError while calling s3. get_object()

标签 python-3.x amazon-web-services aws-lambda boto3

我正在尝试通过 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/

相关文章:

node.js - 如何将写入 process.stderr 的错误显示在 AWS Lambda 控制台中?

python - 如何在 python 中将 api 响应的一部分转换为完整的 json

node.js - Nodejitsu 文件系统和静态文件

amazon-web-services - 内联 Lambda CFT "Fn::Join"错误 - JSON

amazon-web-services - 在aws lambda无服务器框架中使用自定义vpc而不是默认vpc

amazon-web-services - 将 Puppeteer 截图重定向到 S3

amazon-web-services - 如果我不想访问互联网,我是否需要在 VPC 中使用 NAT 网关和路由表?

python - 无法在 FOR 循环 Python 中解压元组对象

python - 如何模拟异步协程?

Python-尝试找到具有最大绿色圆圈的图像