Unix 소켓을 통해 Python으로 PostgreSQL용 Cloud SQL에 연결

Unix 소켓을 사용하여 PostgreSQL용 Cloud SQL 인스턴스에 데이터베이스 연결을 설정합니다. SQLAlchemy 라이브러리를 사용하여 pg8000 드라이버용으로 특별히 구성된 연결 엔진을 만듭니다. 스크립트는 환경 변수에서 데이터베이스 사용자, 비밀번호, 데이터베이스 이름, Unix 소켓 경로와 같은 필요한 연결 매개변수를 가져옵니다. 이 방법은 Cloud SQL 인스턴스와 동일한 Google Cloud 리전에서 실행되는 애플리케이션에 특히 유용하며, TCP 연결에 대한 IP 허용 목록을 구성할 필요 없이 데이터베이스와 안전하고 효율적으로 통신할 수 있습니다.

더 살펴보기

이 코드 샘플이 포함된 자세한 문서는 다음을 참조하세요.

코드 샘플

Python

PostgreSQL용 Cloud SQL에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import os

import sqlalchemy


def connect_unix_socket() -> sqlalchemy.engine.base.Engine:
    """Initializes a Unix socket connection pool for a Cloud SQL instance of Postgres."""
    # Note: Saving credentials in environment variables is convenient, but not
    # secure - consider a more secure solution such as
    # Cloud Secret Manager (https://cloud.google.com/secret-manager) to help
    # keep secrets safe.
    db_user = os.environ["DB_USER"]  # e.g. 'my-database-user'
    db_pass = os.environ["DB_PASS"]  # e.g. 'my-database-password'
    db_name = os.environ["DB_NAME"]  # e.g. 'my-database'
    unix_socket_path = os.environ[
        "INSTANCE_UNIX_SOCKET"
    ]  # e.g. '/cloudsql/project:region:instance'

    pool = sqlalchemy.create_engine(
        # Equivalent URL:
        # postgresql+pg8000://<db_user>:<db_pass>@/<db_name>
        #                         ?unix_sock=<INSTANCE_UNIX_SOCKET>/.s.PGSQL.5432
        # Note: Some drivers require the `unix_sock` query parameter to use a different key.
        # For example, 'psycopg2' uses the path set to `host` in order to connect successfully.
        sqlalchemy.engine.url.URL.create(
            drivername="postgresql+pg8000",
            username=db_user,
            password=db_pass,
            database=db_name,
            query={"unix_sock": f"{unix_socket_path}/.s.PGSQL.5432"},
        ),
        # ...
    )
    return pool

다음 단계

다른 Google Cloud 제품의 코드 샘플을 검색하고 필터링하려면 Google Cloud 샘플 브라우저 참조하기