python - 当新对象到达 S3 存储桶时触发 Lambda 函数

标签 python amazon-s3 amazon-ec2 lambda

我有名为“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/

相关文章:

python - 如何修复 "TypeError: int() argument must be a string, a bytes-like object or a number, not ' NoneType'"

python - 从元类调用 __new__ 时出错

amazon-s3 - AWS Glue 数据目录作为 Databricks 等外部服务的 Metastore

amazon-s3 - s3文件到本地系统php

amazon-web-services - 如何通过 CloudFormation 通过实例元数据服务启用 ec2 标签访问

amazon-web-services - 如何在 CloudFormation 中将主 ec2 实例上的 IP 地址传递给从属 ec2 实例

python - 执行 .py python 会出现 apache 错误 2(内部服务器错误)

python - 用枢轴点 Python 拟合曲线

python - 嵌套列表和列表推导式

angular - 如何在 S3 上上传预渲染文件并在我们的网页初始加载时访问它?