2017-04-19 75 views
0

我有一個AWS lambda函數:如何只用一次觸發Lambda分段上傳S3觸發器?

  1. 反作用於S3 ObjectCreated觸發
  2. SSH到EC2實例和
  3. 運行一個python腳本

然後,這個python腳本將運行EMR處理剛創建的所有這些S3零件文件。 (是的,文件必須共同處理。)

但是,部分文件(file_part_0000file_part_0001,等)創建爲分段上傳。

Lambda Event: {..., "eventName": "ObjectCreated:CompleteMultipartUpload", ...} 

這是我的理解,這個觸發器將強制Lambda SSH和運行python腳本儘可能多的時間,因爲有部分文件。我只希望Lambda能夠ssh並運行一次

有沒有辦法讓Lambda被觸發一次對於每個「系列」的分段上傳?

+3

ObjectCreated:CompleteMultipartUpload事件發生在S3多部分上傳的* completion *創建對象時。 – jarmod

回答

1

正如Configuring Amazon S3 Event Notifications

提到你不會從失敗的操作接收事件通知。

而且有一個原因是該事件是調用s3:ObjectCreated:CompleteMultipartUpload,事件應該只在您的multipart完全上傳時觸發。

另一方面,也許你應該讓S3事件觸發器發送信息給SQS。所以你可以讓你的python程序可以看SQS隊列並處理文件。使用SQS,您不需要進行無密碼設置或將lambda中的私鑰存儲到ssh服務器中。

+0

你和@jarmod提到的上傳完全是真的。但是,我不確定這是否解決了我的問題。問題是,當發生'CompleteMultipartUpload'事件時,Lambda會運行數百次(即每個零件文件一個)!我希望它對部件文件的每個「系列」或「組」都運行**一次**。我希望它只爲'file *'運行,而不是爲'file_part0001','file_part0002','file_part0003'等運行。 – zephel

+0

爲了您在SQS上的觀點,SQS是否也會爲所有零件文件創建隊列?再次,這不是我想要的... – zephel