簡體   English   中英

設備上沒有剩余空間 - AWS Lambda + Sharp

[英]No space left on device - AWS Lambda + Sharp

我正在嘗試使用 sharp 將 SVG 轉換為 TIFF。 我的 NodeJs 應用程序部署在 AWS Lambda 上。由於 AWS Lambda /tmp 目錄的最大大小為 512 MB,對於大文件,我收到錯誤“設備上沒有剩余空間”。

我試圖搜索 inte.net 但找不到任何好的解決方案。

你能建議一下,是否可以在部署在 AWS Lambda 上的應用程序上使用 sharp 來處理大文件? 如果是的話怎么辦?

否則,如果您可以建議在 AWS 上實現它的任何替代方法 - 可能正在使用其他一些服務?

據我所知,您有以下三種選擇:

  1. 將 EFS 卷掛載到您的 Lambda
  2. 做stream處理
  3. 將轉換后的圖像存儲在 memory

選項1

將 EFS 卷安裝到您的 Lambda 實例實際上就像將硬盤驅動器添加到您的 Lambda。但請注意,該磁盤在您的 Lambda 實例之間共享,並且在您的 Lambda 關閉后仍然存在。

文檔: https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/

選項 #2

這是更復雜的選項,可能不適用於所有格式。 但是,您可以分塊處理圖像,然后將這些塊寫入 S3,而不是將每一位都寫入磁盤。 這樣你的 Lambda 根本不需要在磁盤上存儲任何數據,也不需要很多 memory 因為你正在以小塊的形式處理圖像。

選項 #3

您可以將結果寫入緩沖區 ( toBuffer() ),而不是將圖像寫入磁盤 ( toFile() ())。 然后您使用此緩沖區將結果寫入 S3,例如。 這樣就沒有位接觸磁盤,您唯一的限制是最大 Lambda memory 為 10.240 MB。


建議:在嘗試任何解決方案之前,請確保您要刪除轉換后的圖像。 只要您的 Lambda 實例處於活動狀態, /tmp目錄就會在請求之間持續存在。 這意味着同一個 Lambda 實例可以被調用 20 次並且每次都將一個新文件寫入/tmp 如果您在處理完這些文件后沒有清理它們,您的“沒有剩余磁盤空間”錯誤可能是由於未刪除的舊文件造成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM