You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DBT与AWS MWAA集成触发只读文件系统错误如何解决

问题根因

AWS MWAA 的 /usr/local/airflow/dags 目录为系统默认只读挂载目录,你当前将dbt项目存放在该路径下,dbt执行时默认会在项目根目录生成target文件夹存储编译产物、运行日志等内容,写入只读目录就触发了权限报错。即使关闭了partial parsing功能,dbt仍然会生成manifest.json、编译后的SQL文件等内容写入target目录,因此报错依然存在。

可行解决方法
  • 方法1:在Operator中添加命令参数指定可写输出目录
    MWAA 为任务预留了可写的临时目录 /tmp,你可以在DbtRunOperator中通过dbt_cmd_flags参数指定dbt的输出路径到/tmp下,修改后的代码示例如下:
dbt_run = DbtRunOperator(
    task_id='dbt_run',
    dbt_bin='/usr/local/airflow/.local/bin/dbt',
    profiles_dir='/usr/local/airflow/dags/dbt/',
    dir='/usr/local/airflow/dags/dbt/learn/',
    # 新增以下参数,指定输出路径到可写临时目录
    dbt_cmd_flags=[
        "--target-path", "/tmp/dbt/target",
        "--log-path", "/tmp/dbt/logs"
    ]
)

如果有依赖包安装需求,还可以追加"--packages-install-path", "/tmp/dbt/packages"参数到flags列表中。

  • 方法2:修改dbt项目配置默认输出路径
    你也可以直接在dbt项目的dbt_project.yml文件中添加全局配置,将所有输出路径默认指定到可写目录:
target-path: "/tmp/dbt/target"
log-path: "/tmp/dbt/logs"
packages-install-path: "/tmp/dbt/packages"

该配置无需修改DAG代码,dbt运行时会自动读取配置写入对应路径。

  • 可选补充:持久化运行产物
    如果需要留存dbt的编译产物、运行日志等内容,可以在dbt任务后新增一个任务,将/tmp/dbt下的文件同步到你自己的S3存储桶中即可。

内容的提问来源于stack exchange,提问作者Satya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:15:03