繁体   English   中英

如何在 AWS Lambda 中运行 DBT?

[英]How to run DBT in AWS Lambda?

我目前已经对我的 DBT 解决方案进行了 docker 化,并在 AWS Fargate 中启动它(从 Airflow 触发)。 但是,Fargate 需要大约 1 分钟才能开始运行(镜像拉取 + 资源配置 + 等),这对于长时间运行的执行(数小时)来说非常有用,但对于短时间执行(1-5 分钟)则不然。

我试图在 AWS Lambda 而不是 AWS Fargate 中运行我的 docker 容器以进行短期执行,但我在这次迁移过程中遇到了几个问题。

我无法修复的问题与运行dbt deps --profiles-dir. && dbt run -t my_target --profiles-dir. --select my_model dbt deps --profiles-dir. && dbt run -t my_target --profiles-dir. --select my_model

Running with dbt=0.21.0
Encountered an error:
[Errno 38] Function not implemented

它说没有实现 function,但我看不到任何地方是 function。正如在安装 dbt 包(redshift 和 dbt_utils)时出现的那样,我尝试下载它们并将它们包含在 docker 图像中(设置本地路径在packages.yml ),但没有任何改变。 此外,DBT 在此阶段不写入任何日志(我在dbt_project.yml中将日志路径设置为/tmp ,以便它可以在 Lambda 中具有写入权限),所以我是盲人。

深入研究这个问题,我发现这可能与 AWS Lamba 中的多处理问题有关(我的 docker 图像包含 python 个脚本),如https://github.com/dbt-labs/dbt-core/issues/中所述2992 我使用subprocess进程库从 python 运行 DBT。

由于它可能是一个多处理问题,我也尝试在profiles.yml中设置"threads": 1但它并没有解决问题。

有没有人在 AWS Lambda 中成功部署 DBT?

我最近一直在尝试这样做,我发现的总结是这似乎是可能的,但不值得。

您可以很容易地构建一个 Lambda 层,其中包括 dbt 和您要使用的提供程序,但您还需要修补多处理行为并从 Lambda 代码中调用 dbt.main。 跳过所有这些跃点后,您将得到一个 dbt 实例,该实例被限制在 memory 上相对较小的上限,最长运行时间为 15 分钟,并且被限制为单个线程。

这个讨论给出了一个粗略的例子,说明在 Lambda 中运行它需要什么: https://github.com/dbt-labs/dbt-core/issues/2992#issuecomment-919288906

综上所述,我很乐意将 dbt 放在 Lambda 上,我希望 dbt 的多处理有一天会支持它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM