Conéctate a Cloud SQL desde Cloud Functions

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 Cloud Functions.

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.

Cloud Functions es una solución de procesamiento ligera que permite a los desarrolladores crear funciones individuales y de un solo propósito que respondan a eventos de Cloud sin necesidad de administrar un servidor o entorno de ejecución.

Configura una instancia de Cloud SQL

  1. Crea una instancia de Cloud SQL para MySQL

  2. Busca el INSTANCE_CONNECTION_NAME de la instancia en la página Detalles de la instancia. El nombre 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 lasAPI

Configura Cloud Functions

Cloud Functions no requiere ninguna configuración especial, solo debes asegurarte de que la cuenta de servicio usada tenga los permisos correctos.

Cloud Functions 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-YOUR_PROJECT_NUMBER@gcf-admin-robot.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 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 (recomendado)
  • Cloud SQL Editor
  • Cloud SQL Admin

O bien, puedes asignar los siguientes permisos de IAM de forma manual:

  • 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 configurado de forma adecuada, puedes conectar tu servicio 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.

Python

# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
    # Equivalent URL:
    # mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
    sqlalchemy.engine.url.URL(
        drivername='mysql+pymysql',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_socket': '/cloudsql/{}'.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.

Node.js

let pool;
const createPool = async () => {
  pool = await mysql.createPool({
    user: process.env.DB_USER, // e.g. 'my-db-user'
    password: process.env.DB_PASS, // e.g. 'my-db-password'
    database: process.env.DB_NAME, // e.g. 'my-database'
    // If connecting via unix domain socket, specify the path
    socketPath: `/cloudsql/${process.env.CLOUD_SQL_CONNECTION_NAME}`,
    // If connecting via TCP, enter the IP and port instead
    // host: 'localhost',
    // port: 3306,

    //...
  });
};
createPool();
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 caerse debido al propio servidor de la base de datos o a la infraestructura subyacente a Cloud Functions. Para mitigar este problema, te recomendamos que uses una biblioteca cliente que admita grupos de conexión que reconecten las conexiones interrumpidas de clientes de forma automática.

Además, te recomendamos que uses un grupo de conexiones de alcance global, ya que esto mejora la probabilidad de que tu función vuelva a usar la misma conexión para las invocaciones posteriores de la función y cierra la conexión de forma natural cuando se expulsa la instancia (reducción del ajuste de escala automático).

Para obtener ejemplos más detallados sobre cómo usar los grupos de conexiones, consulta la página sobre cómo 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).

Cuando se usa un grupo de conexiones, es importante configurar la cantidad máxima de conexiones en 1. Esto puede parecer contradictorio, sin embargo, Cloud Functions limita las ejecuciones simultáneas a 1 por instancia. Esto significa que nunca ocurrirá que una sola instancia de función procese dos solicitudes al mismo tiempo. Por lo que, en la mayoría de los casos, se requiere una sola conexión de base de datos.

Siempre que sea posible, asegúrate de inicializar un grupo de conexiones solo para las funciones que necesiten usarlo. Si una función implementada inicializa un grupo de conexiones que no necesita, podría crear conexiones que no se usan y que generan costos. Para obtener más detalles sobre cómo funcionan las variables globales en Cloud Functions, consulta Sugerencias.

Para obtener ejemplos más detallados sobre cómo limitar la cantidad de conexiones, consulta la página sobre cómo administrar las conexiones de las base de datos.

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

Enviar comentarios sobre...

Cloud SQL para MySQL