希望你一切顺利。我想检查是否有人在 aws mwaa 气流中启动并运行 dbt。
我已经尝试过这个和这个python 包但没有成功,但由于某种原因失败(找不到 dbt 路径等)。
有没有人设法使用 MWAA (Airflow 2) 和 DBT 而无需构建 docker 映像并将其放置在某个地方?
谢谢!
我通过执行以下步骤设法解决了这个问题:
dbt-core==0.19.1
到您的requirements.txt
#!/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')()
)
从这里你有两个选择:
环境变量设置器示例:
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)
使用 pypiairflow-dbt-python
包为我们简化了 dbt_ 到 MWAA 的设置,因为它避免了需要修改插件文件中的 PATH 环境变量。但是,我还没有通过任何一个airflow-dbt
或airflow-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'