2

我對AWS Lambda相對來說比較新,所以也許這是微不足道的,但到目前爲止我還沒有弄清楚。 我想返回JSON數據,就像我可以將它作爲回調函數返回以響應API網關請求一樣。 我遇到的問題是我想處理用戶上傳的圖像,並以JSON格式將處理結果返回給用戶。 我知道我可以創建響應S3上傳(觸發器)的Lambda函數,但我無法以這種方式向用戶返回數據。響應S3上傳返回JSON

+0

您需要包含代碼示例。 –

回答

2

您可以將其作爲單個同步操作來實現。如果圖像少於10MB,那麼您應該可以創建Lambda函數來接受圖像,將其上傳到S3,處理它並將數據返回給用戶。這也假定您可以上傳到S3並在29秒內處理圖像,這是API網關超時請求之前的最長時間。

如果這不適合你,那麼你將切換到異步處理。您可以擁有一個響應S3上傳事件的Lambda函數,並執行處理並將結果寫入DynamoDB,RDS或Aurora中的表中。然後,您可以公開一個API網關方法來檢查完成的處理並獲得結果。客戶端然後必須輪詢這個API網關方法。

1

我會建議替代辦法:

  1. let the browser do the upload to S3直接使用javascript
  2. subscribe your lambda function to S3 events在桶
  3. 讓你的lambda函數的縮略圖圖像並保存生成的縮略圖回S3基於命名約定,例如如果你的圖像是someimage.jpg你可以將它保存爲someimage-thumb.jpg
  4. 上傳完成後,讓javascript客戶端循環查詢S3存儲桶,直到縮略圖存在並顯示。

這種方法會導致上傳更快,用戶體驗更好,應該是非常可靠的。

============================================== ===

如果你確實真的想使用API​​網關,這是可能的,因爲二進制數據是now supported。您可以將函數中的數據以二進制或base64編碼方式接收。因爲我們要介紹的一個瓶頸

  1. 時間上傳速度會變慢:你可以與包括編碼處理後的圖像的Base64和一些元數據的響應回覆,例如:

    { 
        "thumbnail": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==", 
        "metadataKey1": "some data", 
        "metadataKey2": "some other data" 
    } 
    

    這裏的缺點。

  2. 需要進行更多的處理,特別是如果必須將大圖像轉換爲base64或從base64轉換大圖像。
  3. 瀏覽器將更難以渲染處理後的圖像。