2017-01-26 26 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是理想的。 –

相关问题