2017-01-26 27 views
0

我有S3存儲區,名爲'files'。每天都有新文件到達。示例:當S3存儲桶中的新文件到達時觸發Lambda函數

/files/data-01-23-2017--11-33am.txt 
/files/data-01-24-2017--10-28am.txt 

我如何製作Lambda函數並設置觸發器以在新文件到達時在EC2上執行一個shell腳本?新文件的 例子是:

/files/data-01-25-2017--11-43am.txt 

命令,我將要在EC2上執行的是(以如下參數剛到新的文件名):

python /home/ec2-user/jobs/run_job.py data-01-25-2017--11-43am.txt 
+0

[EC2 RunCommand](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/run-command.html)? –

回答

2

亞馬遜S3可以被配置爲觸發在創建新對象時使用AWS Lambda函數。但是,Lambda函數無法訪問您的Amazon EC2實例。這不是一個合適的架構使用。

一些替代選項(這些都是獨立的選項,而不是多個步驟):

  • 而不是在Amazon EC2實例中運行的命令,把你的代碼在lambda函數(無EC2實例需要)。 (最佳選項!)
  • 配置Amazon S3爲將消息推送到Amazon SQS隊列中。讓EC2實例上的代碼定期輪詢隊列。當它收到消息時,在S3中處理該對象。
  • 將Amazon S3配置爲發送消息給Amazon SNS主題。將您的應用程序的終點(實際上是API)訂閱到SNS隊列,以便在創建新對象時收到消息。
+0

感謝您的選擇!以下關於第一個選項的問題: 如果python代碼很大(例如幾百行或更多) - 是否仍適合這種情況? 另外 - 當它執行 - 沒有關於環境,坐騎等,可以知道在那一刻? – Joe

+0

你的Python代碼的大小在Lambda中並不重要,但是執行時間限制在5分鐘,'/ tmp'目錄中只有500MB空間。您可以選擇更大的內存大小來執行更多/更快的處理(這也會增加CPU分配)。如果你的情況是「當* this *發生時,運行* that * code」,那麼Lambda是理想的。 –

相關問題