Conéctate a Cloud SQL desde App Engine

En esta página se muestran información y ejemplos para conectarse a una instancia de Cloud SQL desde un servicio que se ejecuta en App Engine.

Cloud SQL es un servicio de bases de datos completamente administrado que facilita la configuración, el mantenimiento y la administración de bases de datos relacionales de PostgreSQL y MySQL en la nube.

App Engine es una plataforma sin servidores completamente administrada para desarrollar y alojar aplicaciones web a gran escala. Puedes elegir entre varios idiomas, bibliotecas y marcos de trabajo populares para desarrollar tu aplicación. Luego, deja que App Engine se encargue del aprovisionamiento de servidores y del escalamiento de las instancias de tu aplicación a pedido.

Configura una instancia de Cloud SQL

  1. Crea una instancia de Cloud SQL para PostgreSQL.

    .
  2. Busca el INSTANCE_CONNECTION_NAME de la instancia en la página Detalles de la instancia. Usa el formato PROJECT_ID:REGION:INSTANCE_ID y se usa para identificar la instancia de Cloud SQL a la que te conectaste.

  3. Habilita la API de Administrador de Cloud SQL, si todavía no lo hiciste:

    Habilita las API

Configura App Engine

Estándar

App Engine no requiere ninguna configuración especial, solo debes asegurarte de que la cuenta de servicio que usas tenga los permisos correctos.

Flexible

Actualiza el archivo app.yaml de tu proyecto con la opción más adecuada. Puedes usar una lista de instancias separadas por comas para especificar varias opciones a la vez.

Habilita un socket de dominio Unix

Para habilitar un socket de dominio Unix, agrega lo siguiente al archivo app.yaml de tu proyecto:

beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>

Habilita un puerto TCP

Para habilitar un puerto TCP local, agrega lo siguiente al archivo app.yaml de tu proyecto:

beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<PORT>

En App Engine se usa una cuenta de servicio para autorizar tus conexiones a Cloud SQL. Esta cuenta de servicio debe tener los permisos de IAM correctos para conectarse de manera adecuada. A menos que se configure de otra manera, la cuenta de servicio predeterminada tiene el formato service-PROJECT_ID@gae-api-prod.google.com.iam.gserviceaccount.com.

Cuando conectes recursos en dos proyectos diferentes, asegúrate de que ambos proyectos tengan habilitadas las funciones de IAM correctas y de que la cuenta de servicios tenga otorgados los permisos correctos.

Asegúrate de que la cuenta de servicio de tu servicio tenga una de las siguientes funciones de IAM:

  • Cloud SQL Client (preferido)
  • Cloud SQL Editor
  • Cloud SQL Admin

O bien, puedes asignar los siguientes permisos de IAM:

  • cloudsql.instances.connect
  • cloudsql.instances.get

Para obtener instrucciones detalladas sobre cómo agregar funciones de IAM a una cuenta de servicio, consulta la página sobre cómo otorgar funciones a cuentas de servicio.

Conéctate a Cloud SQL

Una vez que tu sistema esté configurado de forma adecuada, puedes conectarlo a tu instancia de Cloud SQL mediante el socket de dominio Unix ubicado en /cloudsql/INSTANCE_CONNECTION_NAME. Estas conexiones se encriptan de manera automática sin ninguna configuración adicional.

En el entorno flexible de App Engine también se admite la conexión a través de TCP. Si configuraste una instancia con un puerto TCP, configura tu aplicación para conectarla a 172.17.0.1:PORT en su lugar.

Python

# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
    # Equivalent URL:
    # postgres+pg8000://<db_user>:<db_pass>@/<db_name>?unix_sock=/cloudsql/<cloud_sql_instance_name>/.s.PGSQL.5432
    sqlalchemy.engine.url.URL(
        drivername='postgres+pg8000',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_sock': '/cloudsql/{}/.s.PGSQL.5432'.format(
                cloud_sql_connection_name)
        }
    ),
    # ... Specify additional properties here.
    # ...
)
Para ver este fragmento en el contexto de una aplicación web, consulta el código fuente en GitHub.

Java

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

// 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"

// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);

// ... Specify additional connection properties here.

// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);
Para ver este fragmento en el contexto de una aplicación web, consulta el código fuente en GitHub.

C#

var connectionString = new NpgsqlConnectionStringBuilder(
    Configuration["CloudSql:ConnectionString"])
// ConnectionString set in appsetings.json formatted as:
// "Uid=aspnetuser;Pwd=;Host=cloudsql;Database=votes"
{
    // Connecting to a local proxy that does not support ssl.
    SslMode = SslMode.Disable
};
connectionString.Pooling = true;
// ...
NpgsqlConnection connection =
    new NpgsqlConnection(connectionString.ConnectionString);
Para ver este fragmento en el contexto de una aplicación web, consulta el código fuente en GitHub.

Prácticas recomendadas y más información

Puedes usar el proxy de Cloud SQL cuando pruebes tu aplicación de forma local. Consulta la guía de inicio rápido sobre cómo usar el proxy para pruebas locales si quieres obtener instrucciones detalladas.

Grupos de conexiones

Las conexiones a bases de datos subyacentes pueden interrumpirse, ya sea por el servidor de la base de datos o por la infraestructura subyacente. Para mitigar esto, te recomendamos que uses una biblioteca cliente que admita grupos de conexiones y reconexión automática.

Para obtener ejemplos más detallados sobre cómo usar los grupos de conexiones, consulta Administrar conexiones de bases de datos.

Límites de conexión

Cloud SQL impone un límite máximo en las conexiones simultáneas. Estos límites pueden variar según el motor de base de datos elegido (consulta Cuotas y límites).

App Engine tiene la capacidad de crear más instancias de forma automática a medida que aumenta la carga, lo que puede causar que excedas estos límites. Para evitar este problema, limita la cantidad máxima de instancias de App Engine. Para obtener más información, consulta Elementos de escalamiento.

Puedes limitar la cantidad máxima de conexiones de cada instancia mediante un grupo de conexiones. Para obtener ejemplos más detallados sobre cómo limitar la cantidad de conexiones, consulta la página sobre cómo administrar conexiones de bases de datos.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Cloud SQL para PostgreSQL