【问题标题】:How to use DBT with AWS Managed Airflow?如何将 DBT 与 AWS Managed Airflow 结合使用?
【发布时间】:2021-08-22 14:01:10
【问题描述】:

希望你做得很好。 我想检查是否有人在 aws mwaa 气流中启动并运行 dbt。

我尝试了 this onethis python 包但没有成功,但由于某种原因失败(找不到 dbt 路径等)。

是否有人设法使用 MWAA (Airflow 2) 和 DBT 而无需构建 docker 映像并将其放置在某个地方?

谢谢!

【问题讨论】:

  • 我听说 dbt 有时可能存在与 Airflow 冲突的依赖项。您能否添加一些您遇到的错误?
  • 我会照顾它,但基本上我无权访问 $PATH,因为 AWS 向我公开的用户和我也可以从 DBT 调用 main() 对象。跨度>

标签: amazon-web-services airflow dbt mwaa


【解决方案1】:

使用 pypi airflow-dbt-python 包为我们简化了 dbt_ 到 MWAA 的设置,因为它避免了需要修改插件文件中的 PATH 环境变量。但是,我还没有通过 airflow-dbtairflow-dbt-python 包成功运行 dbt_,因为 MWAA 工作器似乎是一个只读文件系统,所以一旦 dbt_ 尝试编译到目标目录,就会出现以下错误发生:

File "/usr/lib64/python3.7/os.py", line 223, in makedirs
    mkdir(name, mode)
OSError: [Errno 30] Read-only file system: '/usr/local/airflow/dags/dbt/target'

【讨论】:

  • 我也和你一样的情况,期待找到答案。
  • MWAA 只读文件系统问题可以通过将 dbt_profile.yml 文件中的目标路径设置为 /tmp(MWAA 工作程序上唯一的可写区域)来解决,即 目标路径:“/tmp/dbt/target”。但是,我们需要将 dbt deps 进程移动到我们的 CI/CD 管道构建中,以便将 dbt_modules 的内容作为项目的一部分复制到 MWAA S3 存储桶中,然后在所有工作人员之间传播。
【解决方案2】:

我已经通过以下步骤解决了这个问题:

  1. dbt-core==0.19.1 添加到您的requirements.txt
  2. 将 DBT cli 可执行文件添加到 plugins.zip 中
#!/usr/bin/env python3
# EASY-INSTALL-ENTRY-SCRIPT: 'dbt-core==0.19.1','console_scripts','dbt'
__requires__ = 'dbt-core==0.19.1'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('dbt-core==0.19.1', 'console_scripts', 'dbt')()
    )

从这里你有两个选择:

  1. dbt_bin operator argument 设置为/usr/local/airflow/plugins/dbt
  2. 按照docs/usr/local/airflow/plugins/ 添加到$PATH

环境变量设置器示例:

from airflow.plugins_manager import AirflowPlugin
import os

os.environ["PATH"] = os.getenv(
    "PATH") + ":/usr/local/airflow/.local/lib/python3.7/site-packages:/usr/local/airflow/plugins/"


class EnvVarPlugin(AirflowPlugin):
    name = 'env_var_plugin'

插件压缩包内容:

plugins.zip
├── dbt (DBT cli executable)
└── env_var_plugin.py (environment variable setter)

【讨论】:

  • 感谢 Yonatan 的回答。你能解释一下你在上面的回答中说的是哪个plugins.zip吗?
  • @Smit 当然,看看 MWAA 文档docs.aws.amazon.com/mwaa/latest/userguide/…
  • 你有plugins文件夹的例子吗?
  • @AmitBaranes 使用附加插件文件(环境设置器)编辑了答案
  • 我确信它适用于 0.19.1,气流 2.0.2。你是如何调用 dbt 可执行文件的? dbt 对吗?不是 dbt.py
猜你喜欢
  • 2021-09-07
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多