在S3触发的AWS中运行ETL python脚本

时间:2018-08-16 11:19:30

标签: amazon-web-services aws-lambda

我是AWS的新手,不知道如何执行以下操作。当我在S3中放置一个对象时,我想启动一个python脚本,该脚本进行一些转换并将其返回到S3中的另一个路径。我尝试了lambda函数,但是该过程需要300秒钟以上。我也用Glue作业尝试过它,但是当我将文件放入S3时我不知道如何触发它。

有人知道怎么做吗?也许我使用了错误的AWS工具。

2 个答案:

答案 0 :(得分:0)

一种选择是使用SQS

  1. 创建SQS队列。
  2. 设置S3以在将新对象添加到源存储桶时将通知发送到SQS队列。参见Configuring Amazon S3 Event Notifications
  3. EC2实例上设置Python脚本,并在代码中侦听SQS队列。
  4. 脚本完成后,将Python脚本的输出上传到目标S3存储桶中。

能否将Python处理分解为更小的步骤?如果可以让您的代码在Lambda限制内运行,我绝对建议您使用Lambda而不是管理EC2。

答案 1 :(得分:0)

您的问题的简单解决方案在这里: 既然您已经提到,您需要执行AWS Glue作业来执行此操作。而且,您所不知道的是将文件放置在s3中时如何触发粘合作业,我正在回答这个问题。 您可以使用boto3模块编写一个AWS lambda,该模块可以基于s3事件触发,并在lambda函数中设置setup.start_job_run命令。

response = client.start_job_run(
    JobName='string')

https://boto3.readthedocs.io/en/latest/reference/services/glue.html#Glue.Client.start_job_run

注意::我坚信Glue是正确的工具,而不是lambda来满足您提到的要求,因为AWS lambda有超时限制。 300秒后将超时。