Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Tutorial: Cómo usar MongoDB con Azure Functions

En este tutorial, crearás una función de Azure activada por HTTP que consulta datos de MongoDB Atlas mediante el controlador de MongoDB para Node.js. También aprenderás a gestionar las conexiones a la base de datos en un entorno sin servidor y a implementar tu función en la nube de Azure.

Antes de comenzar, sigue los siguientes pasos:

  • Implemente un clúster de MongoDB Atlas, configure el acceso a la red y los usuarios de la base de datos, y cargue los conjuntos de datos de ejemplo. Para obtener más información, consulte la MongoDB Get Started guía.

  • Instale y configure la CLI de Azure.

  • Instale y configure las herramientas principales de Azure Functions.

  • Instale Node.js versión 18 o posterior.

Este tutorial lo guía a través de los siguientes pasos:

  • Crear recursos en la nube de Azure.

  • Inicializa el proyecto local.

  • Instala el controlador de MongoDB para Node.js.

  • Configure la conexión a la base de datos sample_mflix database.

  • Escribe una función para consultar la colección sample_mflix.movies y recuperar documentos que representen películas.

  • Prueba la función localmente.

  • Implementar en Azure.

1

Ejecute el siguiente comando para crear un grupo de recursos, reemplazando <GROUP_NAME> por un nombre para su grupo y <AZURE_REGION> por una región de Azure compatible:

az group create \
--name <GROUP_NAME> \
--location <AZURE_REGION>

Opcionalmente, si utiliza Azure por primera vez, es posible que deba ejecutar los siguientes comandos para registrar el proveedor de recursos de Functions:

az provider register --namespace Microsoft.Storage
az provider register --namespace Microsoft.Web

A continuación, ejecute el siguiente comando para crear una cuenta de almacenamiento. Utilice la misma región y nombre de grupo del código anterior y proporcione un nombre único para la cuenta de almacenamiento, reemplazando el marcador de posición <STORAGE_NAME> con este nombre único:

az storage account create \
--name <STORAGE_NAME> \
--location <AZURE_REGION> \
--resource-group <GROUP_NAME> \
--sku Standard_LRS

Finalmente, ejecute el siguiente comando para crear la aplicación de funciones:

az functionapp create \
--resource-group <GROUP_NAME> \
--consumption-plan-location <AZURE_REGION> \
--runtime node \
--functions-version 4 \
--name <APP_NAME> \
--storage-account <STORAGE_NAME>
2

Ejecute el siguiente comando para inicializar un proyecto de función local:

func init MongoExample

Cuando se le solicite, seleccione node como entorno de ejecución del trabajador y javascript como idioma.

Ejecute los siguientes comandos para acceder al directorio del proyecto y crear una nueva función activada por HTTP:

cd MongoExample
func new --name GetMovies --template "HTTP trigger"

El comando crea el archivo src/functions/GetMovies.js, que editarás en pasos posteriores.

Para vincular tu proyecto local con la aplicación de Azure Functions, ejecuta el siguiente comando desde el directorio del proyecto:

func azure functionapp fetch-app-settings <APP_NAME>

Este comando descarga todos los ajustes de la aplicación desde Azure, incluida la configuración de la cuenta de almacenamiento, y rellena el archivo local.settings.json de su proyecto.

3

Desde la raíz de tu proyecto, ejecuta el siguiente comando para instalar el controlador de MongoDB para Node.js:

npm install mongodb

Este comando agrega el controlador a su proyecto y lo registra en package.json para que el controlador esté disponible cuando lo implemente.

4

Abre src/functions/GetMovies.js y reemplaza su contenido con el siguiente código:

GetMovies.js
const { app } = require("@azure/functions");
const { MongoClient } = require("mongodb");
const mongoClient = new MongoClient(
process.env.MONGODB_ATLAS_URI
);
app.http("GetMovies", {
methods: ["GET"],
authLevel: "anonymous",
handler: async (request, context) => {
// Query logic added in the next step
}
});

Tip

Defina mongoClient fuera de la función controladora para reutilizar las conexiones existentes entre invocaciones. Si crea una nueva conexión dentro de la controladora, cada invocación abrirá una nueva conexión y corre el riesgo de agotar el número máximo de conexiones simultáneas que admite su base de datos. Definir el cliente a nivel de módulo mantiene el número de conexiones proporcional al tráfico.

Dependiendo de tu versión de Node.js, es posible que encuentres un error relacionado con la resolución de DNS al intentar conectarte a MongoDB. Si esto ocurre, agrega el siguiente código a tu archivo src/functions/GetMovies.js antes de crear la instancia de MongoClient:

GetMovies.js
const { app } = require("@azure/functions");
const { MongoClient } = require("mongodb");
// Forces DNS servers explicitly before connecting to MongoDB
require("node:dns/promises").setServers(["1.1.1.1", "8.8.8.8"]);
const mongoClient = new MongoClient(
process.env.MONGODB_ATLAS_URI
);
app.http("GetMovies", {
methods: ["GET"],
authLevel: "anonymous",
handler: async (request, context) => {
// Query logic added in the next step
}
});

Abra local.settings.json y agregue los siguientes campos al objeto Values, reemplazando cada marcador de posición con sus valores reales:

{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<storage-connection-string>",
"FUNCTIONS_WORKER_RUNTIME": "node",
"MONGODB_ATLAS_URI": "<atlas-connection-string>",
"MONGODB_ATLAS_DATABASE": "sample_mflix",
"MONGODB_ATLAS_COLLECTION": "movies"
},
"ConnectionStrings": {}
}

Para recuperar su cadena de conexión de MongoDB Atlas, navegue al panel de control de Atlas, seleccione su clúster y haga clic. ConnectPara obtener información sobre cómo recuperar la cadena de conexión de almacenamiento de Azure, consulte Configurar una cadena de conexión en la documentación de Azure.

5

En src/functions/GetMovies.js, reemplace el comentario // Query logic added in the next step dentro del controlador con el siguiente código:

try {
const database = mongoClient.db(
process.env.MONGODB_ATLAS_DATABASE
);
const collection = database.collection(
process.env.MONGODB_ATLAS_COLLECTION
);
const results = await collection
.find({})
.limit(10)
.toArray();
return { jsonBody: results };
} catch (error) {
return {
status: 500,
jsonBody: { message: "Internal server error." }
};
}

Cuando la función recibe una solicitud, se conecta a la base de datos y a la colección especificadas por las variables de entorno y devuelve hasta 10 documentos. Si se produce un error, la función devuelve una respuesta 500 que contiene el mensaje de error.

6

Desde la raíz de tu proyecto, ejecuta el siguiente comando para iniciar tu función:

func start

Cuando se inicia el servidor, la interfaz de línea de comandos (CLI) muestra la URL local de tu función. Accede a http://localhost:7071/api/GetMovies en tu navegador o envía una solicitud utilizando una herramienta como cURL o Postman.

Nota

Si el servidor se inicia pero no puede recuperar datos, verifique que su dirección IP local esté incluida en la lista de acceso a la red de Atlas. Las reglas de IP del centro de datos de Azure que configuró para producción no se aplican al realizar pruebas localmente. Para obtener más información, consulte Configurar entradas de la lista de acceso a IP.

7

Configure sus variables de entorno en Azure ejecutando los siguientes comandos, reemplazando cada marcador de posición con sus valores reales:

az functionapp config appsettings set \
--name <APP_NAME> \
--resource-group <GROUP_NAME> \
--settings MONGODB_ATLAS_URI=<atlas-connection-string>
az functionapp config appsettings set \
--name <APP_NAME> \
--resource-group <GROUP_NAME> \
--settings MONGODB_ATLAS_DATABASE=sample_mflix
az functionapp config appsettings set \
--name <APP_NAME> \
--resource-group <GROUP_NAME> \
--settings MONGODB_ATLAS_COLLECTION=movies

Implementa tu función ejecutando el siguiente comando:

func azure functionapp publish <APP_NAME>
Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in <APP_NAME>:
GetMovies - [httpTrigger]
Invoke url: https://<APP_NAME>.azurewebsites.net/api/getmovies

Cuando finaliza el despliegue, la CLI muestra una URL pública para su función. Dado que la función utiliza authLevel: "anonymous", se puede acceder a ella sin necesidad de una clave.

Nota

Para implementaciones en producción, considere cambiar authLevel por "function" o "admin" y distribuir la clave correspondiente a los clientes autorizados. Para obtener más información, consulte la documentación sobre cómo trabajar con claves de acceso en Azure Functions.

Para obtener más información sobre los conceptos abordados en este tutorial, consulta los siguientes recursos:

Volver

Implementar una aplicación en Vercel

En esta página