Bruin 项目(Project)核心概念详解:bruin init 初始化、.bruin.yml 环境与连接管理实战(Data Engineering Zoomcamp)
【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 👇🏼项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp
本指南聚焦 Data Engineering Zoomcamp 第 5 模块(Data Platforms with Bruin)中「Project」这一核心概念:它是一切数据管道的根目录与配置边界,决定了数据资产、连接与密钥如何被组织、隔离与共享。读完本文,你将掌握如何用bruin init初始化项目、读懂并编写.bruin.yml中的环境(environments)与连接(connections)配置、通过default_environment安全地切换开发与生产环境,并理解 Project 与 Pipeline、Asset 之间的边界关系。
什么是 Bruin Project
在 Bruin 中,Project(项目)是存放你整条 Bruin 数据管道的根目录。它是一切数据资产、配置文件与连接的承载基础——你可以把 Project 理解为「一个数据工程的代码仓库单元」,其中既包含描述「跑什么」的资产(assets)与管道(pipelines),也包含描述「连哪里、用什么凭据」的项目级配置。
一个关键的边界原则是:Project 是配置的边界(boundary for configuration)——本地密钥(secrets)被排除在版本控制之外,而不同的环境各自选择自己的连接。也就是说,环境(environment)与连接(connection)的作用域是「项目级」的,管道与资产在项目内部按需引用它们。
这一设计与本模块的定位一致:Bruin 将数据摄取、转换、编排、数据质量检查、元数据与血缘(lineage)整合进一个项目,而不是分散到五六个独立工具中分别配置(见 01-introduction.md)。Project 正是这套「整合」的物理与逻辑起点。
初始化项目:bruin init
项目必须通过bruin init初始化,CLI 才能正确理解目录结构并导航文件。最基本的初始化命令如下:
bruin init zoomcamp my-pipeline cd my-pipelinezoomcamp是要使用的模板名称——本模块课程统一使用 zoomcamp 模板,它直接生成与 NYC Taxi 数据管道配套的项目骨架(在 02-getting-started.md 与 03-nyc-taxi-pipeline.md 中均以bruin init zoomcamp my-pipeline或bruin init zoomcamp my-taxi-pipeline作为标准起点)。my-pipeline是项目目录名,可以按需替换。
bruin init会替你完成三件基础设施级的工作:
- 从模板生成项目结构(如
pipeline/目录、pipeline.yml、assets/目录等); - 初始化 git 仓库——Bruin 要求项目处于 git 初始化状态,
bruin init会自动完成; - 创建
.gitignore并把.bruin.yml加入其中——保证含密钥的本地配置永远不会被误提交。
初始化后的项目骨架
以本模块实战模板为例,初始化后的目录结构大致如下(详细结构见 03-nyc-taxi-pipeline.md):
zoomcamp/ ├── .bruin.yml # 环境与连接配置(本地文件,被 .gitignore 排除) ├── README.md └── pipeline/ ├── pipeline.yml # 管道名、调度、默认连接 └── assets/ ├── ingestion/ ├── staging/ └── reports/其中.bruin.yml位于项目根目录,是本文的核心;pipeline.yml与assets/属于管道与资产层,会在本模块后续的 Pipelines 与 Assets 两篇核心概念中展开。
.bruin.yml:项目级配置中心
.bruin.yml位于项目根目录,定义了三类内容:环境(environments)、连接(connections)与密钥(secrets)。
重要安全原则:
.bruin.yml总是被加入.gitignore。它只保存在本地,绝不应被推送到代码仓库——因为它包含数据库连接信息与密钥。这也是bruin init会自动生成.gitignore并预先排除该文件的原因。
环境(Environments)
环境用于为不同阶段(开发、生产、预发布等)定义各自的连接。下面是一个同时包含本地开发环境与云端生产环境的完整示例(沿用原文档的配置骨架):
default_environment: default environments: default: connections: duckdb: - name: duckdb-default path: duckdb.db motherduck: - name: motherduck token: <your-token> production: connections: bigquery: - name: bq-prod project: my-project dataset: production这个例子里:
default环境面向本地开发:duckdb连接指向本地文件duckdb.db(课程实战中本地数据库即 DuckDB),motherduck连接则以 token 方式配置;production环境面向生产:bigquery连接指向 GCP 项目my-project的production数据集。
环境隔离带来的直接收益:
- 既可以在本地跑管道,也可以放到服务器上跑,而不会暴露生产凭据;
- 不同团队可以拥有不同的连接访问权限;
- 默认落在
dev(开发)环境,防止误触生产环境运行。
连接类型(Connection Types)
Bruin 内置连接覆盖了主流数据库与数仓:
- 本地/嵌入式:DuckDB、MotherDuck;
- 关系型数据库:PostgreSQL、MySQL;
- 云数据仓库:BigQuery、Redshift、Snowflake;
- 自定义连接:用于 API Key、密钥(secrets)等场景。
从本模块实战看,本地开发阶段最常用的是duckdb连接(只需name与path两个字段),而部署到云端后则可切换为bigquery等生产连接——这正是「同一个项目、不同环境选择各自连接」的典型落地方式。
默认环境(Default Environment)
通过default_environment指定默认使用的环境:
default_environment: dev设置后,管道默认在dev环境上运行,除非显式指定使用 production。这保证了日常开发与测试操作不会意外打到生产数据库。
连接在管道层的作用域(Connection Scoping)
连接虽然定义在项目层(.bruin.yml),但每个管道会在pipeline.yml中声明自己使用哪些连接。例如:
name: nyc_taxi schedule: daily start_date: "2022-01-01" default_connections: duckdb: duckdb-default这种「项目定义、管道引用」的设计(详见 07-core-concepts-pipelines.md)在大型组织中有实际意义:不同团队可以持有不同的凭据,管道只初始化自己运行所需的连接,从而避免不必要的密钥暴露,并在部门之间形成安全隔离。这也印证了开篇的原则——Project 是配置的边界,密钥留在本地,环境各自选择连接。
快速参考命令
# 初始化一个新项目 bruin init zoomcamp my-pipeline # 进入项目目录 cd my-pipeline # 检查项目结构是否合法(不实际运行) bruin validate .bruin validate .会校验项目级结构、语法与依赖关系,是初始化后第一个值得执行的命令,也是日常改动的安全网;- 完整的命令行能力(如
bruin run、bruin lineage、bruin query等)属于 Core Concepts: Commands 的主题,这里不再展开。
结合本模块实战:NYC Taxi 管道中的 Project 配置
本模块作业要求基于 zoomcamp 模板构建一条从摄取到报表的完整 NYC Taxi 管道(见 homework.md),其第一步就是初始化项目并配置.bruin.yml:
- 安装 Bruin CLI:
curl -LsSf https://getbruin.com/install/cli | sh - 初始化 zoomcamp 模板:
bruin init zoomcamp my-pipeline - 在
.bruin.yml中配置一个 DuckDB 连接 - 按 03-nyc-taxi-pipeline.md 完成教程
实战中的.bruin.yml通常简化为单个default环境加一个 DuckDB 连接:
default_environment: default environments: default: connections: duckdb: - name: duckdb-default path: duckdb.db作业第 1 题考察的正是项目级结构认知:Bruin 项目的必需文件是.bruin.yml加pipeline/(内含pipeline.yml与assets/),连接定义集中在.bruin.yml,而管道与资产定义在pipeline/内。理解 Project 这一层,后续配置管道、资产与变量时就不会混淆「配置放哪里、作用域到哪一级」的问题。
最佳实践小结
- 永远不要提交
.bruin.yml——它包含连接与密钥,bruin init生成的.gitignore已默认排除; - 善用环境区分阶段——本地用 DuckDB/MotherDuck,生产用 BigQuery 等云数仓,切换环境即可切换连接,无需改动资产代码;
- 显式设置
default_environment为开发环境——防止误操作把本地或测试任务跑在生产上; - 初始化后立即
bruin validate .——尽早确认项目结构合法,避免后续问题叠加; - 保持「项目定义连接、管道引用连接」的边界——凭据最小化暴露,团队间安全隔离。
延伸阅读
- 本模块开篇:Introduction to Bruin
- 安装与项目结构:Getting Started with Bruin
- 实战演练:Building an End-to-End Pipeline with NYC Taxi Data
- 下一个核心概念:Core Concepts: Pipelines 与 Core Concepts: Assets
【免费下载链接】data-engineering-zoomcampData Engineering Zoomcamp is a free 9-week course on building production-ready data pipelines. Join the course here 👇🏼项目地址: https://gitcode.com/GitHub_Trending/da/data-engineering-zoomcamp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考