Conectarse con los conectores de Cloud SQL

Los conectores de Cloud SQL son bibliotecas que proporcionan encriptación y autorización basada en IAM cuando se conectan a una instancia de Cloud SQL. No pueden proporcionar una ruta de red a una instancia de Cloud SQL, si aún no hay una.

Otras formas de conectarte a una instancia de Cloud SQL son usar un cliente de base de datos o el proxy de autenticación de Cloud SQL. Consulta la página Descripción general de las conexiones para obtener más información sobre cómo conectarte a una instancia de Cloud SQL.

En esta página, se analizan los siguientes conectores de Cloud SQL:

  • El conector de Java de Cloud SQL
  • El conector de Python de Cloud SQL

Antes de comenzar

Para poder conectarte a una instancia de Cloud SQL, debes haber hecho lo siguiente:

Configuración

Java

El conector de Java de Cloud SQL es una biblioteca que proporciona encriptación y autorización basadas en IAM cuando se conecta a una instancia de Cloud SQL. No puede proporcionar una ruta de red a una instancia de Cloud SQL si aún no hay una.

Instalación

Si deseas obtener instrucciones para desarrollar y usar los controladores para JDBC y R2DBC con el conector de Java de Cloud SQL, consulta los siguientes vínculos:

JDBC: Conéctate a Postgres con JDBC.

R2DBC: Conéctate a Postgres con R2DBC

Para ver ejemplos de esta biblioteca que se usa en el contexto de una aplicación, consulta estas aplicaciones de muestra.

Autenticación

Esta biblioteca usa las credenciales predeterminadas de la aplicación para autenticar la conexión con el servidor de Cloud SQL.

Para activar las credenciales de forma local, usa el siguiente comando de gcloud:

    gcloud auth application-default login
    

Conéctate con IntelliJ

Para conectar IntelliJ a tu instancia de Cloud SQL, debes agregar la biblioteca como un JAR con dependencias en la sección Archivos adicionales en la página de configuración del controlador. Por ejemplo, los archivos de fat JAR precompilados se pueden encontrar en la página Versiones del conector de Java de Cloud SQL para este propósito.

Python

El conector de Python de Cloud SQL es una biblioteca que se puede usar junto con un controlador de base de datos a fin de permitir a los usuarios con permisos suficientes para conectarse a una base de datos de Cloud SQL sin tener que incluir IP en la lista de entidades permitidas ni administrar certificados SSL de forma manual.

El controlador compatible actual para PostgreSQL es pg8000.

Instalación

Para instalar la actualización más reciente, sigue estas instrucciones.

Authentication

Esta biblioteca usa las credenciales predeterminadas de la aplicación para autenticar la conexión con el servidor de Cloud SQL.

Para activar las credenciales de forma local, usa el siguiente comando de gcloud:

    gcloud auth application-default login
    

Uso

Java

Para ver este fragmento en el contexto de una aplicación web, consulta el archivo README en GitHub.

// Note: For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections
// which is preferred to using the Cloud SQL Proxy with Unix sockets.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// The following URL is equivalent to setting the config options below:
// jdbc:postgresql:///<DB_NAME>?cloudSqlInstance=<CLOUD_SQL_CONNECTION_NAME>&
// socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<DB_USER>&password=<DB_PASS>
// See the link below for more info on building a JDBC URL for the Cloud SQL JDBC Socket Factory
// https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory#creating-the-jdbc-url

// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:postgresql:///%s", DB_NAME));
config.setUsername(DB_USER); // e.g. "root", "postgres"
config.setPassword(DB_PASS); // e.g. "my-password"

config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);

// The ipTypes argument can be used to specify a comma delimited list of preferred IP types
// for connecting to a Cloud SQL instance. The argument ipTypes=PRIVATE will force the
// SocketFactory to connect with an instance's associated private IP.
config.addDataSourceProperty("ipTypes", "PUBLIC,PRIVATE");

// ... Specify additional connection properties here.
// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);

Python

Consulta Cómo usar el conector para obtener instrucciones detalladas sobre el uso de la biblioteca. Consulta el ejemplo de código de prueba de conexión en GitHub.

# The Cloud SQL Python Connector can be used along with SQLAlchemy using the
# 'creator' argument to 'create_engine'
def init_connection_engine() -> sqlalchemy.engine.Engine:
    def getconn() -> pg8000.dbapi.Connection:
        conn: pg8000.dbapi.Connection = connector.connect(
            os.environ["POSTGRES_CONNECTION_NAME"],
            "pg8000",
            user=os.environ["POSTGRES_USER"],
            password=os.environ["POSTGRES_PASS"],
            db=os.environ["POSTGRES_DB"],
        )
        return conn

    engine = sqlalchemy.create_engine(
        "postgresql+pg8000://",
        creator=getconn,
    )
    engine.dialect.description_encoding = None
    return engine

Soluciona problemas

Configuración de firewall

El proxy de autenticación de Cloud SQL establece conexiones con instancias de Cloud SQL mediante el puerto 3307. Puede que las aplicaciones protegidas por un firewall deban configurarse para permitir conexiones salientes en el puerto TCP 3307. Una conexión bloqueada por un firewall suele dar como resultado un error que indica error de conexión. Por ejemplo, com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure.

Versiones del controlador

Asegúrate de usar la versión más reciente de los conectores de Cloud SQL y el controlador de base de datos para evitar incompatibilidades. Algunas versiones anteriores de controladores no son compatibles.

Rutas de conexión

Los conectores de Cloud SQL proporcionan autorización para las conexiones, pero no proporcionan rutas de acceso nuevas a la conectividad. Por ejemplo, para conectarte a una instancia de Cloud SQL mediante una dirección IP privada, tu aplicación ya debe tener acceso a VPC. Para conectarte a una instancia de Cloud SQL con una dirección IP pública, tu aplicación debe estar en una red autorizada.

Depura problemas de conexión

Para obtener más ayuda sobre problemas de conexión, consulta las páginas Solución de problemas y Cómo solucionar problemas de conexión.

¿Qué sigue?