Skip to main content

A simple connector for GCP databases

Project description

Low Overhead GCP Database Connector.

Low-overhead connections to Google Cloud SQL databases, optionally supporting IAM Authentication.

Prerequisites

  • Google Cloud Project: A GCP project with Cloud SQL enabled.
  • Cloud SQL Instance: A PostgreSQL instance configured for IAM authentication.

IAM Authentication (Optional)

  • IAM User: A database user mapped to a Google Cloud IAM service account or user.
  • Authentication:
    • Locally: gcloud auth application-default login
    • Production: Service Account attached to the environment (VM, GKE, Cloud Run).

Poastgres

1. Psycopg3 Connection Pool

Example using psycopg (version 3) to connect to Cloud SQL. It can automatically resolve the instance IP and inject the IAM token.

Dependencies:

  • psycopg 3.3.0 or higher
  • google-auth
import psycopg
from psycopg_pool import ConnectionPool
from simple_gcp_connector.psycopg import GoogleCloudConnInfoProvider

# Use the instance connection name (project:region:instance).
INSTANCE_CONNECTION_NAME = "my-project:us-central1:my-instance"
DB_USER = "your-sa-email@your-project.iam" # note there is no .gserviceaccount.com
DB_NAME = "your-database-name" # likely postgres
DATABASE_URL = f"postgresql://{DB_USER}@IGNORED-HOST/{DB_NAME}?sslmode=require"

def create_pool():
    get_conninfo = GoogleCloudConnInfoProvider(
        DATABASE_URL,
        instance_connection_name=INSTANCE_CONNECTION_NAME
    )
    return ConnectionPool(
        conninfo=get_conninfo,
        min_size=1,
        max_size=5
    )

# Usage
with create_pool() as pool:
    with pool.connection() as conn:
        print("Connected!")
        # ... execute queries ...

2. SQLAlchemy

Use sqlalchemy to connect to Cloud SQL. If you are using the instance connection name, it will automatically resolve the instance IP and inject the IAM token unless enable_iam_auth is set to false (it's True by default).

Dependencies:

  • sqlalchemy
  • psycopg (or pg8000)
  • google-auth
import sqlalchemy
from sqlalchemy import create_engine
from simple_gcp_connector.sqlalchemy import register_connector

# Configuration
INSTANCE_CONNECTION_NAME = "my-project:us-central1:my-instance"
DB_USER = "your-sa-email@your-project.iam"
DB_NAME = "your-database-name"

engine = create_engine(
    f"postgresql+psycopg://{DB_USER}@/{DB_NAME}",
    connect_args={"sslmode": "require"}
)

register_connector(engine, instance_connection_name=INSTANCE_CONNECTION_NAME)

# Usage
with engine.connect() as connection:
    result = connection.execute(sqlalchemy.text("SELECT 1"))
    print(result.fetchone())

Note on Cloud SQL Proxy

If you are using the Cloud SQL Auth Proxy (sidecar or local process), you don't need instance_connection_name. You can simply point to 127.0.0.1.

# Psycopg w/ Proxy
get_conninfo = GoogleCloudConnInfoProvider("postgresql://user@127.0.0.1:5432/db")

# SQLAlchemy w/ Proxy
engine = create_engine("postgresql+psycopg://user@127.0.0.1:5432/db")
register_connector(engine)

Setup Notes

  • Ensure the Service Account (or user) has the Cloud SQL Client role and is added as an IAM user in the Cloud SQL instance.
  • If youa enable_iam_authentication flag must be set to on for your Cloud SQL instance.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simple_gcp_connector-0.1.3.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simple_gcp_connector-0.1.3-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file simple_gcp_connector-0.1.3.tar.gz.

File metadata

  • Download URL: simple_gcp_connector-0.1.3.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for simple_gcp_connector-0.1.3.tar.gz
Algorithm Hash digest
SHA256 57746cafb297629a79e9e6bef782c709baee2ad134d463348e5197905a82dad8
MD5 586b522e779bf736edd0ac1305d0a59c
BLAKE2b-256 ff0f1c6351115947ecde9dbdadcc89dc0288a72a461a8b819b435b1d1379870f

See more details on using hashes here.

File details

Details for the file simple_gcp_connector-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: simple_gcp_connector-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for simple_gcp_connector-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 29c91dfeef4d8b056a66722ad2ac82741a9421e36c9d02e27874fe1f36694a4d
MD5 3a099f7dbf8664dd47cf73bd847710d5
BLAKE2b-256 95b5ecadbf8913031edbef9f20f252341e502afcda2b0620f46954e7a1ee7ab9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page