Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
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

Tutorial: Usar MongoDB con Azure Functions

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

Antes de comenzar, sigue los siguientes pasos:

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

  • Crear recursos en la nube de Azure.

  • Inicializa el proyecto local.

  • Instale el controlador de MongoDB para Nodo.js.

  • Configura la conexión de la base de datos a la base de datos sample_mflix.

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

  • Prueba la función localmente.

  • Implementa 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 Azureadmitida:

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

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

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

A continuación, ejecuta el siguiente comando para crear una cuenta de almacenamiento. Utiliza la misma región y nombre de grupo del código anterior y proporciona un nombre único para la cuenta de almacenamiento, sustituyendo el marcador <STORAGE_NAME> por este nombre único:

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

Por último, ejecuta el siguiente comando para crear la aplicación de Function:

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

Ejecuta el siguiente comando para iniciar un proyecto de función local:

func init MongoExample

Cuando se le indique, seleccione node como tiempo de ejecución de trabajador y javascript como lenguaje.

Ejecuta los siguientes comandos para navegar 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 se edita en pasos posteriores.

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

func azure functionapp fetch-app-settings <APP_NAME>

Este comando descarga todas las configuraciones de la aplicación desde Azure, incluidas la configuración de la cuenta de almacenamiento, y rellena el archivo local.settings.json de tu proyecto.

3

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

npm install mongodb

Este comando añade el controlador a tu proyecto y lo registra en package.json para que esté disponible cuando implementes.

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 del handler para reutilizar las conexiones existentes entre invocaciones. Si creas una nueva conexión dentro del handler, cada invocación abre una nueva conexión y corre el riesgo de agotar el número máximo de conexiones simultáneas que admite tu base de datos. Definir el cliente a nivel de módulo mantiene la cantidad de conexiones proporcional al tráfico.

Dependiendo de tu versión de Node.js, puedes encontrar un error relacionado con la resolución de DNS al intentar conectarte a MongoDB. Si esto ocurre, añade 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
}
});

Abre local.settings.json y añade los siguientes campos al objeto Values, sustituyendo cada marcador de posición por tus 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 tu cadena de conexión de MongoDB Atlas, ve al tablero Atlas, selecciona tu clúster y haz clic en Connect. Para saber cómo recuperar su 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 la colección especificadas por sus variables de entorno y devuelve hasta 10 documentos. Si ocurre 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 el servidor se inicia, la CLI muestra la URL local de tu función. Navega 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 se pueden recuperar datos, se debe verificar que la 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 cuando realiza pruebas localmente. Para obtener más información, consulte Configurar entradas de listas de acceso IP.

7

Configura tus variables de entorno en Azure ejecutando los siguientes comandos, reemplazando cada marcador de posición con tus 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

Implemente 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 se complete la implementación, la CLI mostrará una URL pública para tu función. Debido a que la función utiliza authLevel: "anonymous", es accesible sin una clave.

Nota

Para implementaciones en producción, considere cambiar authLevel a "function" o "admin" y distribuir la clave adecuada a los clientes autorizados. Para obtener más información, consulta la Trabajar con claves de acceso en Azure Functions documentación.

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