我目前已对 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
Running with dbt=0.21.0
Encountered an error:
[Errno 38] Function not implemented
Run Code Online (Sandbox Code Playgroud)
它说没有实现任何功能,但我看不到该功能的任何地方。正如在安装 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 . 我使用该库从 python 运行 DBT subprocess。
由于这可能是一个多处理问题,我也尝试"threads": 1在profiles.yml中进行设置,但它没有解决问题。
有人在 AWS Lambda 中成功部署 DBT 吗?
小智 6
我最近一直在尝试这样做,我发现的总结是这似乎是可能的,但不值得。
您可以非常轻松地构建一个包含 dbt 和您想要使用的提供程序的 Lambda 层,但您还需要修补多处理行为并从 Lambda 代码中调用 dbt.main。一旦跳过所有这些跃点,您将得到一个 dbt 实例,该实例的内存上限相对较小,最大运行时间为 15 分钟,并且被限制为单个线程。
此讨论给出了在 Lambda 中运行所需的粗略示例: https: //github.com/dbt-labs/dbt-core/issues/2992#issuecomment-919288906
话虽如此,我很乐意将 dbt 放在 Lambda 上,并且希望 dbt 的多处理有一天能够支持它。
| 归档时间: |
|
| 查看次数: |
3635 次 |
| 最近记录: |