El paradigma serverless permite construir aplicaciones sin necesidad de gestionar servidores, proporcionando escalabilidad automática y optimización de costos. En este artículo, exploraremos cómo crear aplicaciones serverless utilizando Deno y Azure Functions, combinando la eficiencia de Deno con la potencia de la nube de Azure.
¿Por qué usar Deno y Azure Functions?
Beneficios de Deno
Deno es un runtime moderno para JavaScript y TypeScript con varias características que lo hacen ideal para aplicaciones serverless:
- Seguridad integrada: Requiere permisos explícitos para acceder a archivos, red y entorno.
- Soporte nativo para TypeScript: No necesita configuración adicional.
- Gestión de dependencias simplificada: Se utilizan URLs en lugar de
node_modules
. - Rápido y eficiente: Basado en V8 y Rust, ofrece un excelente rendimiento.
Beneficios de Azure Functions
Azure Functions es una plataforma serverless que permite ejecutar código en la nube sin administrar infraestructura:
- Escalabilidad automática: Se adapta a la demanda sin intervención manual.
- Modelo de pago por uso: Solo se cobra por el tiempo de ejecución.
- Integración con otros servicios de Azure: Como bases de datos, colas y almacenamiento.
Configuración del Entorno
1. Instalar Deno
Para instalar Deno en tu máquina local, ejecuta:
curl -fsSL https://deno.land/x/install/install.sh | sh
Verifica la instalación con:
deno --version
2. Configurar Azure Functions
Para trabajar con Azure Functions, necesitamos la Azure Functions Core Tools y una suscripción activa en Azure.
Instalar las herramientas de Azure Functions
npm install -g azure-functions-core-tools@4 --unsafe-perm true
Iniciar sesión en Azure
az login
Crear un nuevo proyecto de Azure Functions
func init my-deno-function --worker-runtime custom cd my-deno-function
Creación de una Función Serverless con Deno
Vamos a crear una función HTTP que reciba una solicitud y devuelva una respuesta utilizando Deno.
1. Crear la Función HTTP
Ejecuta el siguiente comando para generar la función:
func new --name helloDeno --template "HTTP trigger" --language JavaScript
Esto generará una carpeta helloDeno
con los archivos necesarios. Ahora, modificamos helloDeno/index.ts
para usar Deno:
export default async function (context: any, req: Request): Promise<void> {
context.log("Deno Serverless Function ejecutada");
const name = req.url.searchParams.get("name") || "Mundo";
context.res = {
body: `Hola, ${name} desde Deno y Azure Functions!`
};
}
2. Modificar el archivo function.json
Editamos helloDeno/function.json
para definir los métodos HTTP permitidos:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get", "post"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
Despliegue en Azure
1. Crear un recurso de Azure Functions
Antes de desplegar, necesitamos un grupo de recursos y una cuenta de almacenamiento:
az group create --name deno-serverless --location eastus
az storage account create --name denostorage --location eastus --resource-group deno-serverless --sku Standard_LRS
Luego, creamos una instancia de Azure Functions:
az functionapp create --resource-group deno-serverless --consumption-plan-location eastus --runtime custom --functions-version 4 --name myDenoFunctionApp --storage-account denostorage
2. Desplegar la función en Azure
Ahora podemos desplegar nuestra función con:
func azure functionapp publish myDenoFunctionApp
Si el despliegue es exitoso, obtendremos una URL donde la función está disponible:
https://myDenoFunctionApp.azurewebsites.net/api/helloDeno
Podemos probarla enviando una solicitud HTTP:
curl "https://myDenoFunctionApp.azurewebsites.net/api/helloDeno?name=Juan"
Integración con una Base de Datos
Para conectar nuestra función con una base de datos, podemos usar Azure Cosmos DB.
Crear una cuenta de Cosmos DB:
az cosmosdb create --resource-group deno-serverless --name denoCosmosDB
Obtener la cadena de conexión:
az cosmosdb keys list --resource-group deno-serverless --name denoCosmosDB --type connection-strings
Modificar la función para leer datos de Cosmos DB:
import { Client } from "https://deno.land/x/postgres/mod.ts"; const client = new Client({ user: "usuario", database: "denoDB", hostname: "tu-host", password: "tu-password", port: 5432 }); export default async function (context: any, req: Request): Promise<void> { await client.connect(); const result = await client.query("SELECT * FROM usuarios"); await client.end(); context.res = { body: JSON.stringify(result.rows) }; }
Conclusión
Desarrollar aplicaciones serverless con Deno y Azure Functions nos permite crear aplicaciones altamente escalables y eficientes sin preocuparnos por la infraestructura. Deno, con su seguridad y rendimiento, y Azure Functions, con su escalabilidad automática, forman una combinación poderosa para aplicaciones modernas.
¡Explora estas tecnologías y crea tus propias soluciones serverless con Deno y Azure!