2017-07-27 119 views
0

我有一些文件上傳到EC2實例。 我想閱讀並從lambda函數處理它們。從AWS讀取EC2上的文件Lambda

有沒有一個簡短的代碼片段(首選Python)如何做到這一點? 或者只是一個簡短的教程?

我經歷過噸的教程,但我不出來呢

+0

考慮將文件上傳到S3,然後從s3:ObjectCreated:*事件觸發您的Lambda函數。 – jarmod

回答

1

你將不得不使用一個Web服務器什麼的EC2服務器莫名其妙地提供文件服務。或者您可以嘗試使用Lambda函數中的SCP或SFTP庫連接到EC2服務器並複製文件。在這些服務之間共享文件的正常方式是讓EC2服務器上的進程將文件複製到S3,而不是將它們留在EC2服務器上。

1

您必須瞭解,根據默認設置,您的EC2卷不適用於實例外的任何人(或任何其他人)。爲了理解,它們是「本地卷」。

您的lambda代碼在您的EC2實例之外運行。您可以將其配置爲像在VPC中一樣運行,但即使在這種情況下,也無法訪問實例中的「本地」卷。

爲了讓對文件的訪問您的EC2裏面lambda函數你有幾個選擇:

  • 您可以安裝在您的拉姆達YOUT實例,connnect它像FTP文件共享服務;
  • 您可以安裝端點服務,以便在EC2內的文件上執行任務,並從您的lambda連接到此服務。

但問題是:考慮到所有其他可用的AWS服務,可能這種設計不是您的需求的解決方案。正如前面的回覆中所述,也許你會更好地使用S3。或者,也許lambda不是最好的計算解決方案。請記住,Lambda有幾個運行時間限制,並且考慮到Lambda限制,通過網絡使用磁盤操作會使您處於危險區域。

如果您可以給我們提供關於您的用例的更多信息,我們可以幫助您更好地完成工作。

2

如果你決定使用EC2實例文件服務解決方案,確保:

  • 可以達到從外部實例,這意味着它需要有一個公網IP和服務器偵聽來自連接任何地方(0.0.0.0)
  • EC2安全組具有允許0.0.0.0爲80或443(或自定義端口)

在Python,有SimpleHTTPServer。你可以用它作爲出發點,並加以強化以適應你的需求。

import SimpleHTTPServer 
import SocketServer 

PORT = 8000 

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 

httpd = SocketServer.TCPServer(("", PORT), Handler) 

print "serving at port", PORT 
httpd.serve_forever()