我有名为“files”的 S3 存储桶。每天都有新文件到达那里。示例:
/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
最佳答案
Amazon S3 可以配置为在创建新对象时触发 AWS Lambda 函数。但是,Lambda 函数无权访问您的 Amazon EC2 实例。这不是一个合适的架构。
一些替代选项(这些是单独的选项,而不是多个步骤):
- 不要在 Amazon EC2 实例上运行命令,而是将代码放入 Lambda 函数(不需要 EC2 实例)。 (最好的选择!)
- 配置 Amazon S3 以将消息推送到 Amazon SQS 队列。让 EC2 实例上的代码定期轮询队列。当它收到消息时,在 S3 中处理该对象。
- 配置 Amazon S3 以向 Amazon SNS 主题发送消息。将应用程序的端点(实际上是 API)订阅到 SNS 队列,以便在创建新对象时接收消息。
关于python - 当新对象到达 S3 存储桶时触发 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864456/