【问题标题】:AWS Lambda No Space Left on Device errorAWS Lambda 设备上没有剩余空间错误
【发布时间】: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 函数可以重复使用。

标签: amazon-web-services lambda delete-file temp


【解决方案1】:

您的 lambda 函数 has approximately 500MB of disk space available on /tmp。但是,出于性能原因,AWS Lambda 可能会在后续调用中保留和重用您的函数实例。您可以在这里采取两种可能的途径:

  1. 如果您的函数是完全无状态的(即上传到外部 API 后不需要 mpeg 文件),只需在上传后将其从 /tmp 文件夹中删除即可。
  2. 如果您需要保留数据,请考虑在处理后将其存储在其他介质上,例如 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)
猜你喜欢
  • 1970-01-01
  • 2015-10-27
  • 2020-12-16
  • 2021-01-07
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
相关资源
最近更新 更多