我想知道是否可以在aws lambda内部运行气流。我正在尝试建立更少服务器且使用气流的ETL管道。我不是很热衷于为此使用docker。任何指导将不胜感激。
答案 0 :(得分:2)
我认为这是不可能的。即使您设法将所有必需的依赖项和Airflow本身部署为Lambda,该服务也有一些hard limits that cannot be changed,这将阻止Airflow作为服务运行。例如,Lambda函数的最大运行时间为15分钟,而Airflow Scheduler必须连续运行。
使用AWS服务,您可以获得与Airflow大致相同的功能:Glue用于编写ETL作业,StepFunctions用于管理它们。
答案 1 :(得分:0)
这可能不是一个好主意,但仅在概念验证中,它是可行的。
标准Airflow部署具有一个或多个运行中的Web服务器。用我的几千个DAG文件,Web服务器的启动将近20分钟,尽管我使用的1.10.2与1.8和1.10相比有所改善。
它还有一个调度程序,该调度程序基本上总是在运行。
最后,如果您有celery executor,则希望工作节点运行拾取任务。 OTOH,如果您有kubernetes执行程序,那么调度程序会为排队的工作创建工人吊舱(我认为)。这些也应该一直运行。
现在,在AWS中,您可以创建一个包含所有Airflow依赖项的zip文件,一个配置文件以及一个填充脚本,以获取S3中最新的DAG文件。调度程序具有循环限制参数,因此您可以将其设置为单个循环(或无限个DAG文件,为什么不设置50个循环,通常每个文件<1s)。然后,您可以使用一些外部触发器来定期运行该触发器。假设您知道仅将DAG安排在大约10分钟的时间,并且您的任务通常需要大约7-9分钟,然后每10分钟触发一次以运行该安排程序,则它可能会起作用。通过将Celery与SQS结合使用,您可以在队列中有任何东西时启动作为AWS lambda的工作任务。或使用Kubernetes,您可以将EKS集群保留下来,让调度程序将其推向工作。
然后,棘手的部分最终成为了Web服务器。确实可以使用EC2或ECS或EKS泊坞映像并仅在需要时启动和停止它是正确的,但它确实使用了大量资源来构建DAG包。像调度程序一样;但这样做之后才开始处理请求,因此它根本不太适合在AWS Lambda中运行。我的意思是……如果您完全重建了UI,以便其中的大多数都是S3中的静态文件,并且只有一些请求会触发lambda以从DB中获取数据……是的,这是可行的。但是您会运行大量自定义的Airflow。
在这一点上,您想知道,如果我需要在AWS Lambda中进行大量开发来支持这一点,那么使用RDS和Lambda但不使用Airflow来开发所需的整个DAG流又需要做多少工作?