2017-07-19 54 views
0

我想這樣做:CSV導出使用API​​網關和Lambda

我希望做的是有一個網址,這將返回給調用者一個CSV文件基本上是數據的導出。我希望這仍然是一個無服務器的解決方案。

我做了什麼:

我已經創建了一個AWS API網關與我想要的網址。我創建了一個將查詢數據庫並創建該數據的CSV字符串的lambda。該數據放置在JSON對象中並返回。然後,API網關從json對象獲取CSV數據,並將CSV返回給調用者並添加適當的標題以指示它是CSV和附件。從瀏覽器進行測試我自動獲得下載,就像我打算的一樣。

我看到的問題:

這種運作良好,直到有在這一點我開始變得「​​車身尺寸太長」的數據的數量可觀。

我試圖解析:

我做了一些谷歌上搜索周圍,我看到別人有過類似的問題。在一個解決方案中,我看到他們返回到他們創建的文件的鏈接。這個解決方案對他們來說似乎可行,因爲他們有一臺服務器對於我的無服務器體系結構,它似乎有點棘手。我可以把這個文件存入S3,但是我不得不返回到S3的鏈接。這似乎可以工作,但不覺得就像我缺少一個配置選項。它也感覺就像通過返回s3 url來展示實現一樣。

我環顧四周尋找教程和做類似的事情的人的例子,我還沒有找到任何。

我的問題:

有沒有辦法做到這一點? 有沒有另一種解決方案,我不知道? 如何從較大尺寸的API網關返回文件(本例中爲CSV)

回答

5

AWS Lambda響應有效內容有limit of 6 MB。如果您需要的服務器文件大於您無法直接從Lambda服務的文件。

使用S3存儲和提供文件是做這種事情的標準方法。我會離開S3存儲桶並在Lambda函數中生成S3 Pre-signed URLs。這將限制CSV文件可供下載的時間,並且會阻止人們猜測您正在服務的文件的URL。您可以使用S3 Lifecycle Policy在一段時間後歸檔或刪除文件。

+0

謝謝。我只是在探索這個想法,但不知道s3簽名的url。我現在要深入研究,因爲這似乎解決了我的一些內部問題 – Nexeh

+0

@Nexeh,您還可以將CloudFront放置在您的S3存儲桶前,這將進一步隱藏您的最終用戶的實施細節。它還將加速文件下載。 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html –

+2

我將文件寫入S3,生成一個預先簽名的url,通過api網關將它返回給調用並使用我的角度客戶端使用提供的URL下載文件。非常感謝!我現在對解決方案更加自信。 – Nexeh