A client library for running dbt projects on Google Cloud Run
Project description
dbt-cloud-run-runner
A Python client library for running dbt projects on Google Cloud Run.
Installation
pip install dbt-cloud-run-runner
Usage
from dbt_cloud_run_runner import Client
# Service account for GCS and Cloud Run operations
# This service account needs:
# - Storage Admin on the GCS bucket
# - Cloud Run Admin in the project
gcp_service_account_key = {"type": "service_account", ...}
# Initialize the client
client = Client(
gcp_project="your-gcp-project",
gcs_bucket="your-gcs-bucket",
service_account_key=gcp_service_account_key, # Required: for GCS and Cloud Run
region="us-central1", # optional, defaults to us-central1
)
# Prepare a dbt project for BigQuery
# This method performs several side effects:
# 1. Generates a profiles.yml file for BigQuery
# 2. Zips your local dbt project (excluding target/ directory)
# 3. Uploads profiles.yml, the dbt project zip, and service account credentials to GCS
# 4. Generates pre-signed URLs (valid for 2 hours by default) for the Cloud Run job
#
# Returns: DbtCloudRunSetup object containing:
# - GCS blob paths (gs://bucket/path format) for all uploaded files
# - Pre-signed URLs for downloading inputs and uploading outputs
# - The Docker image to use
#
# Note: The service_account_key here is different from the one passed to Client.
# This one is used for BigQuery access inside the dbt container.
setup = client.prepare_bigquery(
service_account_key={"type": "service_account", ...}, # For BigQuery access
target_project="your-bigquery-project",
target_dataset="your_dataset",
path_to_local_dbt_project="./path/to/dbt/project",
image="us-docker.pkg.dev/delphiio-prod/public-images/dbt-runner:v0.1.1",
url_expiration_hours=2, # Optional: override default 2-hour URL expiration
)
# Run the dbt project on Cloud Run
execution_id = client.run(setup)
print(f"Execution started: {execution_id}")
# Wait for completion
status = client.wait_for_completion(execution_id)
print(f"Execution finished with state: {status.state.value}")
# Or poll status manually
status = client.get_status(execution_id)
print(f"Current state: {status.state.value}")
prepare_bigquery() Method
The prepare_bigquery() method prepares your dbt project for execution on Cloud Run. It performs several operations with side effects:
Side Effects
-
Generates
profiles.yml: Creates a BigQuery profile configuration file that will be used by dbt inside the container. -
Zips the dbt project: Packages your local dbt project directory into a zip file, automatically excluding the
target/directory (which contains compiled artifacts). -
Uploads to GCS: Uploads three files to Google Cloud Storage:
profiles.yml- The dbt profile configurationdbt_project.zip- Your zipped dbt projectcredentials.json- Your service account key (for BigQuery authentication)
-
Generates pre-signed URLs: Creates time-limited signed URLs (default: 2 hours) that allow the Cloud Run container to:
- Download the dbt project and profiles.yml
- Upload the compiled output (
target/directory) and logs
Return Value
Returns a DbtCloudRunSetup object containing:
-
Blob paths (in
gs://bucket/pathformat):profiles_yml_blob- Location of the uploaded profiles.ymldbt_project_blob- Location of the uploaded dbt project zipcredentials_blob- Location of the uploaded service account keyoutput_blob- Where the compiled dbt output will be storedlogs_blob- Where the execution logs will be stored
-
Pre-signed URLs:
profiles_yml_url- URL to download profiles.ymldbt_project_url- URL to download the dbt project zipcredentials_url- URL to download the service account keyoutput_url- URL to upload the compiled output (PUT request)logs_url- URL to upload execution logs (PUT request)
-
Image: The Docker image identifier to use for the Cloud Run job
Important Notes
-
URL Expiration: Pre-signed URLs expire after 2 hours by default (configurable via
url_expiration_hoursparameter). Make sure to callclient.run(setup)before the URLs expire. -
GCS Storage: Files are uploaded to
gs://{bucket}/dbt-runs/{run_id}/whererun_idis a unique identifier generated for each call toprepare_bigquery(). -
Idempotency: Each call to
prepare_bigquery()creates a new run with a unique ID, so you can safely call it multiple times without conflicts.
Features
- Automatic GCS setup: Uploads your dbt project and credentials to GCS with signed URLs
- Cloud Run job management: Creates and manages Cloud Run jobs automatically
- BigQuery integration: Generates
profiles.ymlfor BigQuery targets - Status monitoring: Track execution status with polling or wait for completion
Requirements
- Python 3.9+
- Google Cloud project with Cloud Run and GCS enabled
- Two service accounts (can be the same, but often different):
- GCS/Cloud Run service account (passed to
Client()):- Cloud Run Admin (
roles/run.admin) in the project - Storage Admin (
roles/storage.admin) on the GCS bucket - Must have a private key (for signing URLs)
- Cloud Run Admin (
- BigQuery service account (passed to
prepare_bigquery()):- BigQuery access for the target project/dataset
- This is the account that dbt will use to query BigQuery
- GCS/Cloud Run service account (passed to
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dbt_cloud_run_runner-0.3.0.tar.gz.
File metadata
- Download URL: dbt_cloud_run_runner-0.3.0.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a697dece5260671a24b7e2c6ebc939a02e3f2f6c649aabf4346195cf7c20755e
|
|
| MD5 |
9a29fc5d28f0882b827378bf8b7e7f80
|
|
| BLAKE2b-256 |
eea09840e51595ea5c7b4848dbce9495ccd309b7b89c2bcff064957a3d11e082
|
File details
Details for the file dbt_cloud_run_runner-0.3.0-py3-none-any.whl.
File metadata
- Download URL: dbt_cloud_run_runner-0.3.0-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d16484d652fa088ea6f7bf42553fe64055d9a1429b027bf8d1a09b858dd18cd4
|
|
| MD5 |
86fb1d989b00afba68952cab0252a6fe
|
|
| BLAKE2b-256 |
b4d3c5592e9383fb64bafc4209c37b960a658626fc8a5d623453123333c367b4
|