Saltar al contenido principal

Metabase Cloud SQL Proxy Troubleshooting

This guide helps diagnose and fix Cloud SQL Proxy issues for Metabase on Cloud Run.

Quick Fix Script​

Run the automated fix script (project ID is auto-detected based on environment):

# For staging (auto-detects barto-dev)
./scripts/fix-metabase-cloudsql.sh staging

# For production (auto-detects barto-prod)
./scripts/fix-metabase-cloudsql.sh production

# Or specify project explicitly
./scripts/fix-metabase-cloudsql.sh staging barto-dev
./scripts/fix-metabase-cloudsql.sh production barto-prod

Manual gcloud Commands​

1. Check if Cloud SQL instances exist​

Staging:

# List all SQL instances
gcloud sql instances list --project=barto-dev

# Check Metabase instance (consolidated - hosts both app and metadata databases)
gcloud sql instances describe metabase-db-staging \
--project=barto-dev \
--format="table(name,state,connectionName)"

# Verify both databases exist on the instance
gcloud sql databases list --instance=metabase-db-staging --project=barto-dev

Production:

# List all SQL instances
gcloud sql instances list --project=barto-prod

# Check Metabase instance (consolidated - hosts both app and metadata databases)
gcloud sql instances describe metabase-db-production \
--project=barto-prod \
--format="table(name,state,connectionName)"

# Verify both databases exist on the instance
gcloud sql databases list --instance=metabase-db-production --project=barto-prod

2. Check current service configuration​

# Get current Cloud SQL instances annotation
gcloud run services describe flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--format="value(spec.template.metadata.annotations['run.googleapis.com/cloudsql-instances'])"

# Get current VPC connector
gcloud run services describe flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--format="value(spec.template.metadata.annotations['run.googleapis.com/vpc-access-connector'])"

# Get full service configuration
gcloud run services describe flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--format=yaml

3. Fix Cloud SQL Proxy configuration​

Staging:

gcloud run services update flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--clear-vpc-connector \
--add-cloudsql-instances=barto-dev:us-central1:metabase-db-staging,barto-dev:us-central1:flowpos-db

Production:

gcloud run services update flowpos-metabase-production \
--region=us-central1 \
--project=barto-prod \
--clear-vpc-connector \
--add-cloudsql-instances=barto-prod:us-central1:metabase-db-production,barto-prod:us-central1:flowpos-db-production

4. Verify service account permissions​

# Get project number
PROJECT_NUMBER=$(gcloud projects describe barto-dev --format="value(projectNumber)")

# Check if service account has Cloud SQL Client role
gcloud projects get-iam-policy barto-dev \
--flatten="bindings[].members" \
--filter="bindings.members:serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com AND bindings.role:roles/cloudsql.client" \
--format="value(bindings.role)"

# Grant Cloud SQL Client role if missing
gcloud projects add-iam-policy-binding barto-dev \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/cloudsql.client"

5. Check latest revision configuration​

# Get latest revision name
LATEST_REVISION=$(gcloud run revisions list \
--service=flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--format="value(name)" \
--limit=1)

# Check revision annotations
gcloud run revisions describe "$LATEST_REVISION" \
--region=us-central1 \
--project=barto-dev \
--format="yaml(spec.template.metadata.annotations)"

6. View Cloud Run logs​

# View recent logs
gcloud logging read \
"resource.type=cloud_run_revision AND resource.labels.service_name=flowpos-metabase-staging" \
--limit=50 \
--project=barto-dev \
--format="table(timestamp,severity,textPayload)"

# Filter for Cloud SQL Proxy logs
gcloud logging read \
"resource.type=cloud_run_revision AND resource.labels.service_name=flowpos-metabase-staging AND textPayload=~\"cloud.*sql.*proxy\"" \
--limit=50 \
--project=barto-dev \
--format="table(timestamp,severity,textPayload)"

7. Restart the service (to pick up configuration changes)​

# Update the service with a new revision (triggers restart)
gcloud run services update flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--no-traffic \
--tag=temp

# Then route traffic back
gcloud run services update-traffic flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--to-latest

Common Issues​

Issue: Cloud SQL instances annotation not found​

Symptoms:

  • Logs show "Connection to 127.0.0.1:5432 refused"
  • Revision annotations don't include run.googleapis.com/cloudsql-instances

Fix:

gcloud run services update flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--add-cloudsql-instances=barto-dev:us-central1:metabase-db-staging

Issue: VPC connector blocking Cloud SQL Proxy​

Symptoms:

  • VPC connector annotation is set
  • Cloud SQL Proxy cannot connect to Cloud SQL

Fix:

gcloud run services update flowpos-metabase-staging \
--region=us-central1 \
--project=barto-dev \
--clear-vpc-connector

Issue: Service account missing permissions​

Symptoms:

  • Cloud SQL Proxy fails to start
  • Permission denied errors in logs

Fix:

PROJECT_NUMBER=$(gcloud projects describe barto-dev --format="value(projectNumber)")
gcloud projects add-iam-policy-binding barto-dev \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/cloudsql.client"

Issue: Cloud SQL instances don't exist or are not RUNNABLE​

Symptoms:

  • gcloud sql instances describe fails
  • Instance state is not RUNNABLE

Fix:

  1. Verify instances exist: gcloud sql instances list --project=barto-dev
  2. Check instance state: gcloud sql instances describe <instance-name> --project=barto-dev
  3. If instance doesn't exist, create it or update the connection string in the workflow

Verification Checklist​

After fixing, verify:

  1. ✅ Cloud SQL instances exist and are RUNNABLE
  2. ✅ Service account has roles/cloudsql.client permission
  3. ✅ Cloud SQL instances annotation is set correctly
  4. ✅ VPC connector is cleared (not set)
  5. ✅ Service revision shows correct annotations
  6. ✅ Cloud SQL Proxy logs appear in Cloud Run logs

Expected Configuration​

For staging:

  • Service: flowpos-metabase-staging
  • Cloud SQL Instance: barto-dev:us-central1:metabase-db-staging (consolidated - hosts both metabase and flowpos_staging databases)
  • VPC Connector: Not set (cleared)
  • Service Account: {PROJECT_NUMBER}-compute@developer.gserviceaccount.com with roles/cloudsql.client

For production:

  • Service: flowpos-metabase-production
  • Cloud SQL Instance: barto-prod:us-central1:metabase-db-production (consolidated - hosts both metabase and flowpos_production databases)
  • VPC Connector: Not set (cleared)
  • Service Account: {PROJECT_NUMBER}-compute@developer.gserviceaccount.com with roles/cloudsql.client