打开文件进行读取时,Python只读文件系统错误与S3和Lambda有关

打开文件进行读取时,Python只读文件系统错误与S3和Lambda有关,python,amazon-s3,lambda,io,Python,Amazon S3,Lambda,Io,当我将一个文件.csv放入S3存储桶时,我从lambda函数中看到以下错误。文件不大,我甚至在打开文件进行读取之前添加了60秒的睡眠时间,但出于某种原因,该文件附加了额外的“.6CEdFe7C”。为什么呢 [Errno 30] Read-only file system: u'/file.csv.6CEdFe7C': IOError Traceback (most recent call last): File "/var/task/lambda_function.py", line 75, i

当我将一个文件.csv放入S3存储桶时,我从lambda函数中看到以下错误。文件不大,我甚至在打开文件进行读取之前添加了60秒的睡眠时间,但出于某种原因,该文件附加了额外的“.6CEdFe7C”。为什么呢

[Errno 30] Read-only file system: u'/file.csv.6CEdFe7C': IOError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 75, in lambda_handler
s3.download_file(bucket, key, filepath)
File "/var/runtime/boto3/s3/inject.py", line 104, in download_file
extra_args=ExtraArgs, callback=Callback)
File "/var/runtime/boto3/s3/transfer.py", line 670, in download_file
extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 685, in _download_file
self._get_object(bucket, key, filename, extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 709, in _get_object
extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 723, in _do_get_object
with self._osutil.open(filename, 'wb') as f:
File "/var/runtime/boto3/s3/transfer.py", line 332, in open
return open(filename, mode)
IOError: [Errno 30] Read-only file system: u'/file.csv.6CEdFe7C'
代码:

上述结果是:

mytestbucket
file.csv
/file.csv
[Errno 30] Read-only file system: u'/file.csv.6CEdFe7C'

如果密钥/文件是“file.csv”,那么为什么s3.download_file方法尝试下载“file.csv.6CEdFe7C”?我猜当函数被触发时,文件是file.csv.xxxxx,但当它到达第75行时,文件被重命名为file.csv?

只有
/tmp
似乎可以在AWS Lambda中写入

因此,这将有助于:

filepath = '/tmp/' + key

该示例演示如何将第一个参数用于云名称,将第二个参数用于要下载的本地路径

另一方面,该公司表示

因此,我们有512MB用于创建文件。 这是我在lambda aws中的代码,对我来说就像魅力一样

.download_file(Key=nombre_archivo,Filename='/tmp/{}'.format(nuevo_nombre))

我注意到,当我将lambda
的代码直接作为zip文件上传时,我只能写入
/tmp
文件夹,但从
S3
上传代码时,我也可以写入
项目根文件夹。

转储不等于读取!因此,临时文件夹(或ram中)上的文件不需要转储为f:
,只允许将文件名“wb”)作为f:
打开,所以在处理之前需要处理源文件。@user1530318,是否介意将顶部的答案标记为正确?似乎没问题。一个半小时后,我找到了你的答案。。。为什么不说清楚呢??谢谢我也在想同样的问题。因为这个原因,谷歌搜索甚至很难!很高兴我能帮上忙,伙计。@john AWS有大量文档的问题!在我类似的情况下(将
文件
写入user.dir:
/
),但对于JAVA&a 3.8MB.zip对象,此警告正好在我的[“只读”]
SDKClientException
之前打印(但在使用
/tmp/
解决方案后,问题得到了很好的解决!可能是因为
S3ObjectInputStream
在无法获得之前的
/
时就死掉了):
警告:没有从S3ObjectInputStream读取所有字节,正在中止HTTP连接。这可能是一个错误,可能会导致次优行为。使用后通过远程获取或排空输入流仅请求所需的字节。
感谢将验证“/tmp”很酷,这是您的代码,如何处理?如果您的答案解决了问题注意,请添加一个解释,解释它为什么有效。如果无效,请删除它。更正,如果我需要设置更多信息,请告诉我,即使只是一个示例,请不要将代码放在图像中。执行此操作时,请修复您答案中的拼写错误。但总体而言,答案更好。:-DDo您有示例吗?
.download_file(Key=nombre_archivo,Filename='/tmp/{}'.format(nuevo_nombre))