【问题标题】:Trigger Lambda function when a new object arrives in S3 bucket当新对象到达 S3 存储桶时触发 Lambda 函数
【发布时间】:2018-04-24 19:47:20
【问题描述】:

我有名为“文件”的 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

【问题讨论】:

标签: python amazon-s3 amazon-ec2 lambda


【解决方案1】:

Amazon S3 可以配置为在创建新对象时触发 AWS Lambda 函数。但是,Lambda 函数无权访问您的 Amazon EC2 实例。它不是一个合适的架构。

一些替代选项(这些是单独的选项,不是多个步骤):

  • 不是在 Amazon EC2 实例上运行命令,而是将您的代码放入 Lambda 函数中(不需要 EC2 实例)。 (最好的选择!)
  • 配置 Amazon S3 以将消息推送到 Amazon SQS 队列。让 EC2 实例上的代码定期轮询队列。当它收到消息时,在 S3 中处理该对象。
  • 配置 Amazon S3 以向 Amazon SNS 主题发送消息。将应用程序的端点(实际上是 API)订阅到 SNS 队列,以便在创建新对象时接收消息。

【讨论】:

  • 首先感谢您的选择!关于第一个选项的以下问题:如果 python 代码很大(例如几百行或更多) - 它仍然适合这种情况吗?此外 - 当它执行时 - 在那一刻没有任何关于环境、坐骑等的信息?
  • Python 代码的大小在 Lambda 中并不重要(很多),但执行时间限制为 5 分钟,/tmp 目录中只有 500MB 的空间。您可以选择更大的内存大小来进行更多/更快的处理(这也会增加 CPU 分配)。如果您的情况是“当 this 发生时,运行 that 代码”,那么 Lambda 是理想的。
  • 注意:several hundreds of lines or more - 这完全没问题,但非常庞大的代码库(大量库)可能会达到允许的 250MB 未压缩代码/依赖项的限制。详情请见AWS Lambda Limits
猜你喜欢
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2020-05-09
  • 1970-01-01
相关资源
最近更新 更多