AWS Lambda 设备上没有剩余空间错误
Posted
技术标签:
【中文标题】AWS Lambda 设备上没有剩余空间错误【英文标题】:AWS Lambda No Space Left on Device error 【发布时间】:2018-06-29 01:31:33 【问题描述】:我正在使用 API 网关调用 lambda 函数,该函数从 s3 导入 mpeg 文件(10 mb)并保存在 lambda 的 /tmp 文件夹中,然后 lambda 将其上传到外部 API(youtube 等) 最近对 lambda 的 API 网关调用因错误而间歇性失败
[Errno 28] No space left on device
这是我下载文件的方式
urllib.urlretrieve (s3_mpeg_url, '/tmp/'.format(mpeg_filename))
如果我创建相同 lambda 函数的新版本并将其分配给指向的别名 API 网关,它就会开始工作,并且在某个时刻再次出现相同的错误
当我从 lambda 控制台测试该 lambda 函数时,它总是有效
有什么想法吗?
【问题讨论】:
完成后是否要删除文件? Lambda 函数可以重复使用。 【参考方案1】:您的 lambda 函数 has approximately 500MB of disk space available on /tmp
。但是,出于性能原因,AWS Lambda 可能会在后续调用中保留和重用您的函数实例。您可以在这里采取两种可能的途径:
-
如果您的函数是完全无状态的(即上传到外部 API 后不需要
mpeg
文件),只需在上传后将其从 /tmp
文件夹中删除即可。
如果您需要保留数据,请考虑在处理后将其存储在其他介质上,例如 S3 或 DynamoDB。
【讨论】:
谢谢..我正在研究您提到的选项 1,但它没有帮助...请原谅我对删除 aws 服务器上的文件缺乏了解...我尝试了 os.remove(/tmp/ *.mpeg)但它不起作用(我在 lambda 中使用 python)。你能告诉我如何清除 tmp 文件夹 不要相信 os.remove() 支持通配符。按名称删除文件,或使用 glob 的某些功能。 可能是它。它不支持通配符。我使用以下使其工作def emptyDir(folder): fileList = os.listdir(folder) for f in fileList: filePath = folder + '/'+f if os.path.isfile(filePath): os.remove(filePath) elif os.path.isdir(filePath): newFileList = os.listdir(filePath) for f1 in newFileList: insideFilePath = filePath + '/' + f1 if os.path.isfile(insideFilePath):\n os.remove(insideFilePath)
以上是关于AWS Lambda 设备上没有剩余空间错误的主要内容,如果未能解决你的问题,请参考以下文章
错误:由于环境错误而无法安装软件包:[Errno 28] 设备上没有剩余空间
错误:无法写入临时文件的块 37583345:设备上没有剩余空间
Docker:错误标志背后的主要原因是啥:0x5001:设备上没有剩余空间
错误域 = NSPOSIXErrorDomain 代码 = 28 “设备上没有剩余空间” UserInfo = _kCFStreamErrorCodeKey = 28,_kCFStreamErrorD