
使用 Google Cloud Run Jobs 部署 dlt 数据管道完整实战指南【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dltdltdata load tool是开源的 Python 数据加载库。本文将讲解如何把基于 dlt 的数据管道以Google Cloud Run Jobs的形式部署到云端从dlt init初始化管道代码、创建 Procfile 定义启动命令到用gcloud run jobs deploy发布、配置环境变量含 Secret Manager 集成以及手动触发与定时调度。读完本文你将掌握一套完整的本地开发 → 云端托管 → 密钥管理 → 定时运行的 dlt 管道部署方案。本文面向已具备一定 GCP 基础知识的开发者涉及 Cloud Run Jobs、IAM 权限与 GCP Service Account 等概念。仓库内的实现代码位于 dlt/_workspace 目录部署相关模板可在 deploy/dlt 目录下查看。1. 准备工作初始化 dlt 管道1.1 选择数据源与目标库本指南以 dlt 的Notion verified source为例进行部署其详细说明见 Notion 官方 verified source 文档。你也可以替换为任意其他 verified source如 github.md、stripe.md或者使用自定义 source。执行以下命令初始化 Notion verified source并以BigQuery作为目标目的地dlt init notion bigquery命令执行完毕后会在当前主目录生成管道运行所需的文件与配置目录包括notion_pipeline.py—— 管道示例脚本Notion 数据源 BigQuery 目标requirements.txt—— Python 依赖清单.dlt/config.toml—— 非敏感配置.dlt/secrets.toml—— 敏感凭据切勿提交到代码仓库从源码看dlt init的实际工作由 dlt/_workspace/cli/_init_command.py 中的初始化逻辑完成它会校验 source 名称必须是合法的 Python 标识符仅允许小写字母、数字与下划线探测 source 类型template/core/verified创建.dlt配置目录并根据目标目的地此处为 BigQuery生成对应的 pipeline 脚本与依赖声明。依赖既可能写入requirements.txt也可能写入pyproject.toml取决于初始化时指定的依赖系统。初始化生成的 pipeline 脚本结构可参考仓库中的模板例如 rest_api_pipeline.pydef load_github() - None: pipeline dlt.pipeline( pipeline_namerest_api_github, destinationduckdb, dataset_namerest_api_data, ) load_info pipeline.run(github_source()) print(load_info)即创建一个dlt.pipeline实例指定管道名、目的地、数据集名调用pipeline.run(source)执行加载。1.2 创建 Procfile 指定启动命令在管道主目录下新建名为Procfile的文件内容如下web: python3 notion_pipeline.py该文件指示 Cloud Run Job 使用python3解释器运行notion_pipeline.py。Procfile 是部署的关键入口Cloud Run Jobs 启动容器后会按照其中定义的进程命令执行管道逻辑。1.3 补充依赖dlt init生成的requirements.txt已包含 dlt 核心依赖与源/目的地相关依赖。若管道需要额外依赖例如自定义处理逻辑引用的第三方库请直接追加到requirements.txt中Cloud Run 构建容器时会基于该文件安装依赖。提示部署前请先本地验证管道可运行。可参考 Notion 文档 中的步骤pip install -r requirements.txt安装依赖然后运行python notion_pipeline.py最后用dlt pipeline notion show检查加载结果。2. 使用 gcloud 部署 Cloud Run Jobs在终端中进入包含notion_pipeline.py的目录执行以下命令gcloud run jobs deploy notion-pipeline-job \ --source . \ --tasks 1 \ --max-retries 5 \ --cpu 4 \ --memory 4Gi \ --region us-central1 \ --project dlthub-sandbox参数说明参数含义备注notion-pipeline-jobJob 名称可在 Cloud Console 中识别该任务--source .构建上下文为当前目录会将目录下全部文件含Procfile、requirements.txt打包进容器镜像--tasks 1并行任务数dlt 管道单实例运行即可可适当调大以并行执行--max-retries 5任务失败最大重试次数适用于处理瞬时性错误如网络抖动--cpu 4分配的 vCPU 数按管道计算量调整--memory 4Gi分配的内存按数据规模调整--region us-central1部署区域建议与 BigQuery 数据集所在区域接近以减少跨区流量--project dlthub-sandboxGCP 项目 ID替换为你自己的项目关于任务超时Cloud Run Jobs 默认任务超时为 10 分钟可通过配置提升至最多 1440 分钟24 小时。数据量较大或源 API 响应缓慢的管道建议调大超时上限避免任务被强制终止。关于服务账号权限每个 GCP 项目都有关联的默认服务账号通常形如project-idproject-id.iam.gserviceaccount.com。部署后需为该项目默认服务账号授予roles/run.invoker角色Cloud Run Job 才能被触发执行包括手动触发与后续的定时触发。若管道目标为 BigQuery还需确认该服务账号具备 BigQuery 数据写入权限如roles/bigquery.dataEditor与roles/bigquery.jobUser否则任务运行时会因凭据不足而失败。3. 在 Cloud Run 中配置环境变量重要安全原则切勿将密钥直接写入secrets.toml后随代码一起部署。secrets.toml会被打进容器镜像任何能拉取该镜像的人都能读取到你的密钥。正确做法是使用环境变量或Google Secret Manager二者均可避免敏感信息进入镜像层。Cloud Run 提供了两种注入方式下面分别说明。3a. 直接在 Job 配置中添加变量进入 Google Cloud Console打开已部署的 Cloud Run Job点击VIEW AND EDIT JOB CONFIGURATION查看并编辑任务配置。在CONTAINERS VARIABLE AND SECRETS容器 变量与密钥下点击ADD VARIABLE添加变量。按管道所需参数填写变量名。若该变量在secrets.toml中以下划线分隔的小写形式声明则必须将变量名大写并将点替换为双下划线。例如secrets.toml中的sources.notion.api_key环境变量名应为SOURCES__NOTION__API_KEY。填入对应的值如 Notion API Key。点击Done并更新任务配置。这一映射规则源于 dlt 的环境变量解析机制dlt 的环境变量提供方EnvironProvider实现见 dlt/common/configuration/providers/environ.py会把配置段 键名拼接后统一转为大写并以__作为层级分隔符。例如密钥路径sources.notion.api_key会被规范化为环境变量SOURCES__NOTION__API_KEY。通用规则如下secrets.toml/config.toml中的写法对应的环境变量名sources.notion.api_keySOURCES__NOTION__API_KEYdestination.bigquery.credentials.client_emailDESTINATION__BIGQUERY__CREDENTIALS__CLIENT_EMAILruntime.dlthub_telemetryRUNTIME__DLTHUB_TELEMETRYdlt 解析配置时按优先级依次查找环境变量、config.toml、secrets.toml与默认值环境变量优先级最高因此云上部署可通过环境变量直接覆盖本地配置文件中的值。3b. 使用 GCP Secret Manager在 GCP 中提前创建 Secret例如名为notion_secret值为 Notion API Key。进入 Cloud Run Job点击VIEW AND EDIT JOB CONFIGURATION。在Containers VARIABLE AND SECRETS ADD VARIABLE下点击Add a secret reference添加密钥引用选择已创建的 Secret如notion_secret。将REFERENCE A SECRET设置为以环境变量方式挂载mounted as an environment variable。在Environment Variable字段填写与管道参数对应的环境变量名。同样遵循大写 双下划线的命名规范例如管道所需的sources.notion.api_key声明为SOURCES__NOTION__API_KEY。选择要引用的 Secret 及版本。点击Done并更新任务配置。为 Cloud Run 服务账号授予roles/secretmanager.secretAccessor角色Secret Manager Secret Accessor。该服务账号通常是创建 Job 时所在 GCP 项目的默认服务账号。缺少此角色时任务启动阶段读取 Secret 会报权限错误。使用 Secret Manager 的优势密钥不进入容器镜像、支持版本管理与轮换且可在多个 Job 间复用。从 dlt 源码看环境变量提供方还会尝试从 Kubernetes/Docker 风格的密钥文件路径/run/secrets/name读取密钥这说明 dlt 的密钥注入机制与云原生容器生态是兼容的。4. 监控与触发 Cloud Run Job4.1 手动触发在 Cloud Console 打开该 Cloud Run Job点击EXECUTE执行即可手动触发一次运行。执行后可在任务运行记录中查看日志与状态dlt 管道运行时的加载信息也会输出到标准输出可在 Cloud Logging 中检索。4.2 定时触发Scheduled Trigger如需定期自动化运行管道可在 GCP 中创建Cloud Scheduler定时任务通过 Pub/Sub 或 HTTP 目标调用 Cloud Run Job 的触发端点。调度频率可按管道需求设置如每天一次、每小时一次。注意定时触发同样依赖服务账号的roles/run.invoker权限。4.3 运行状态确认管道执行完毕后可回到本地或使用 BigQuery 查询验证数据落库情况dlt pipeline notion show若在 Cloud Run 中执行更推荐直接查询目标 BigQuery 数据集确认表结构与行数与预期一致。5. 完整部署流程回顾本地初始化dlt init notion bigquery生成管道脚本、.dlt配置目录与requirements.txt。编写启动文件创建Procfile写入web: python3 notion_pipeline.py按需补充requirements.txt依赖。移除本地敏感信息清理secrets.toml中的真实密钥改为环境变量或 Secret Manager 注入。部署执行gcloud run jobs deploy notion-pipeline-job --source . ...并授予服务账号roles/run.invoker以及 Secret 读取、BigQuery 写入等所需角色。配置密钥在 Job 配置中添加环境变量或引用 Secret Manager 中的 Secret。触发与监控手动点击 EXECUTE 或配置 Cloud Scheduler 定时任务通过 Cloud Logging 与目标库查询确认运行结果。6. 常见问题与注意事项任务超时被杀默认 10 分钟超时大管道请上调至合适值上限 1440 分钟。密钥泄露风险secrets.toml会进入镜像务必改用环境变量或 Secret Manager。权限不足报错触发失败检查roles/run.invoker读取 Secret 失败检查roles/secretmanager.secretAccessor写 BigQuery 失败检查 BigQuery 相关角色。区域与成本--cpu、--memory直接影响计费按管道实际负载配置避免过度分配。重试语义--max-retries 5针对任务级失败重试幂等性好的管道dlt 支持主键去重与增量加载可安全开启。至此你的 dlt 管道已经运行在 Google Cloud Run 之上既可以手动触发也可以按计划自动运行享受 Google Cloud 全托管的弹性与可靠性。【免费下载链接】dltdata load tool (dlt) is an open source Python library that makes data loading easy ️项目地址: https://gitcode.com/GitHub_Trending/dl/dlt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考