Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Gestiona las conexiones con Google Cloud

Puede interactuar con sus clústeres de Atlas mediante Google Cloud Functions y Google Cloud Run.

Utiliza las siguientes mejores prácticas para gestionar adecuadamente las conexiones entre las funciones de Google Cloud y Atlas:

  • Crea su función en la nube con una conexión a la base de datos con alcance global en lugar de una conexión a la base de datos con alcance de función.

    No definas un nuevo objeto cliente cada vez que invoques tu función. Hacerlo provoca que el controlador cree una nueva conexión a la base de datos con cada llamada de función. Esto puede ser costoso y puede hacer que tu aplicación exceda los límites de conexión a la base de datos. Para obtener el mejor rendimiento, siga estas directrices:

    1. Cree el objeto cliente una vez.

    2. Almacena el objeto para que tu función pueda reutilizar el cliente entre invocaciones de la función.

    El ejemplo de conexión reutiliza las conexiones existentes de la base de datos para acelerar la comunicación con la base de datos y mantener el número de conexiones a la base de datos a un nivel razonable en relación con el tráfico de la aplicación.

    Si tienes una función que se conecta a un clúster con muchas particiones, podrías experimentar problemas de rendimiento. Por ejemplo, con un clúster Atlas de diez particiones, el driver se conecta por defecto a las treinta instancias de mongos. Puedes utilizar la opción srvMaxHosts en tu cadena de conexión para establecer el número máximo de hosts a los que se conecta el driver. Para mejorar el rendimiento del controlador, activa srvMaxHosts=3. Por ejemplo:

    mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3

    Para obtener más información, consulta Opciones de conexión.

  • Se debe restringir el acceso a la red al clúster de Atlas.

    Conéctese a su clúster de Atlas a través de una red privada utilizando una conexión peering de red entre su clúster de Atlas y su función de Google Cloud, o, alternativamente, un extremo privado, para que pueda permitir solo direcciones IP privadas desde su lista de acceso IP.

    Si no utilizas la red privada, considera conectarte a tu clúster Atlas a través de un puerta de enlace NAT. De lo contrario, debe permitir que todas las direcciones IP (0.0.0.0/0) accedan a su clúster Atlas.

    Advertencia

    Al agregar el CIDR 0.0.0.0/0 se permite el acceso desde cualquier lugar. Esta configuración puede exponer tu implementación al acceso no autorizado, exfiltración de datos y otras actividades maliciosas. Restringe el acceso a direcciones IP de confianza o rangos CIDR siempre que sea posible y utiliza credenciales sólidas para todos los usuarios de bases de datos cuando permitas el acceso desde Internet pública.

    Nota

    Si se añade el CIDR 0.0.0.0/0 a la lista de acceso de un proyecto, Atlas envía un correo electrónico de alerta a todos los usuarios a los que se les haya otorgado un rol en el proyecto de forma directa o indirecta a través de la pertenencia al equipo (si al equipo se le otorga un rol en el proyecto).

  • Establecer maxIdleTimeMS en 60000 para cerrar automáticamente las conexiones después de 1 minuto de inactividad. Ajustar maxIdleTimeMS puede ayudar a reducir la ocurrencia de errores de tiempo de espera en las funciones sin servidor.
  • Configura la simultaneidad. Cuando creas una nueva función de Google Cloud:

    • Selecciona el entorno 2nd gen, que puede gestionar múltiples solicitudes concurrentes. La 2na generación también reduce la carga de conexión en el servidor al permitir que la función comparta un único MongoClient con muchas invocaciones concurrentes.

    • Aumenta la configuración de concurrencia para minimizar los inicios en frío y mejorar la latencia.

    Nota

    Si aumentas la configuración de concurrencia, es posible que necesites aumentar la CPU para obtener el mejor rendimiento. Para obtener más información, consulta Concurrencia.

El siguiente ejemplo conecta una función de Google Cloud Node.js a una implementación de Atlas. Sustituye <YOUR-ATLAS-CONNECTION-STRING> por tu cadena de conexión de Atlas.

const { MongoClient } = require('mongodb');
let client;
async function getConnection() {
if (!client) {
const client = new MongoClient('<YOUR-ATLAS-CONNECTION-STRING>');
client.on('connectionCreated', () => {
console.log('New connection created successfully.');
});
// Connect to the database in the global scope
await client.connect();
}
return client;
}