| name | databricks-prod-checklist |
| description | Execute Databricks production deployment checklist and rollback procedures.
Use when deploying Databricks jobs to production, preparing for launch,
or implementing go-live procedures.
Trigger with phrases like "databricks production", "deploy databricks",
"databricks go-live", "databricks launch checklist".
|
| allowed-tools | Read, Bash(databricks:*), Grep |
| version | 1.0.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
Databricks Production Checklist
Overview
Complete checklist for deploying Databricks jobs and pipelines to production.
Prerequisites
- Staging environment tested and verified
- Production workspace access
- Unity Catalog configured
- Monitoring and alerting ready
Instructions
Step 1: Pre-Deployment Configuration
Security
Infrastructure
Step 2: Code Quality Verification
Testing
databricks bundle validate -t prod
databricks bundle run -t staging test-job
databricks runs get --run-id $RUN_ID | jq '.state.result_state'
Code Review
Step 3: Job Configuration
resources:
jobs:
etl_pipeline:
name: "prod-etl-pipeline"
tags:
environment: production
team: data-engineering
cost_center: analytics
schedule:
quartz_cron_expression: "0 0 6 * * ?"
timezone_id: "America/New_York"
email_notifications:
on_failure:
- "oncall@company.com"
on_success:
- "data-team@company.com"
webhook_notifications:
on_failure:
- id: "slack-webhook-id"
max_concurrent_runs: 1
timeout_seconds: 14400
tasks:
- task_key: bronze_ingest
job_cluster_key: etl_cluster
notebook_task:
notebook_path: /Repos/prod/pipelines/bronze
timeout_seconds: 3600
- task_key: silver_transform
depends_on:
Step 4: Deployment Commands
echo "=== Pre-flight Checks ==="
databricks workspace list /Repos/prod/
databricks clusters list | grep prod
databricks secrets list-scopes
echo "=== Deploying ==="
databricks bundle deploy -t prod
databricks bundle summary -t prod
databricks jobs list | grep prod-etl
echo "=== Verification Run ==="
RUN_ID=$(databricks jobs run-now --job-id $JOB_ID | jq -r '.run_id')
echo "Run ID: $RUN_ID"
databricks runs get --run-id $RUN_ID --wait
Step 5: Monitoring Setup
from databricks.sdk import WorkspaceClient
from datetime import datetime, timedelta
def check_job_health(w: WorkspaceClient, job_id: int) -> dict:
"""Check job health metrics."""
runs = list(w.jobs.list_runs(
job_id=job_id,
completed_only=True,
limit=10,
))
if not runs:
return {"status": "NO_RUNS", "healthy": False}
successful = sum(1 for r in runs if r.state.result_state == "SUCCESS")
success_rate = successful / len(runs)
durations = [
(r.end_time - r.start_time) / 1000 / 60
for r in runs if r.end_time
]
avg_duration = sum(durations) / len(durations) if durations else 0
last_run = runs[0]
last_state = last_run.state.result_state
return {
"status": "HEALTHY" success_rate > ,
: success_rate > last_state == ,
: success_rate,
: avg_duration,
: last_state,
: datetime.fromtimestamp(last_run.start_time / ),
}
Step 6: Rollback Procedure
#!/bin/bash
JOB_ID=$1
PREVIOUS_VERSION=$2
echo "=== ROLLBACK INITIATED ==="
echo "Job: $JOB_ID"
echo "Target Version: $PREVIOUS_VERSION"
echo "Pausing job..."
databricks jobs update --job-id $JOB_ID --json '{"settings": {"schedule": null}}'
echo "Cancelling active runs..."
databricks runs list --job-id $JOB_ID --active-only | \
jq -r '.runs[].run_id' | \
xargs -I {} databricks runs cancel --run-id {}
echo "Rolling back to version $PREVIOUS_VERSION..."
databricks bundle deploy -t prod --force
echo "Re-enabling schedule..."
echo "Triggering verification run..."
databricks jobs run-now --job-id $JOB_ID
echo "=== ROLLBACK COMPLETE ==="
Output
- Deployed production job
- Health checks passing
- Monitoring active
- Rollback procedure documented
Error Handling
| Alert | Condition | Severity |
|---|
| Job Failed | result_state = FAILED | P1 |
| Long Running | Duration > 2x average | P2 |
| Consecutive Failures | 3+ failures in a row | P1 |
| Data Quality | Expectations failed | P2 |
Examples
Production Health Dashboard Query
SELECT
job_id,
job_name,
COUNT(*) as total_runs,
SUM(CASE WHEN result_state = 'SUCCESS' THEN 1 ELSE 0 END) as successes,
AVG(execution_duration) / 60000 as avg_minutes,
MAX(start_time) as last_run
FROM system.lakeflow.job_run_timeline
WHERE start_time > current_timestamp() - INTERVAL 7 DAYS
GROUP BY job_id, job_name
ORDER BY total_runs DESC
Pre-Production Verification
databricks bundle validate -t prod && \
databricks bundle deploy -t prod --dry-run && \
echo "Validation passed, ready to deploy"
Resources
Next Steps
For version upgrades, see databricks-upgrade-migration.