El despliegue automatizado de APIs en la nube es una práctica esencial en el desarrollo moderno. Deno, con su seguridad integrada y soporte nativo para TypeScript, es una excelente opción para construir APIs escalables y eficientes. Azure Functions, por otro lado, permite ejecutar código sin preocuparse por la infraestructura subyacente.
En este artículo, aprenderás cómo desplegar automáticamente una API de Deno en Azure Functions usando GitHub Actions.
1. ¿Por qué Usar Deno con Azure Functions?
Las ventajas de utilizar Deno con Azure Functions incluyen:
✅ Ejecuta código sin servidores: Solo pagas por las ejecuciones realizadas.
✅ Compatibilidad con TypeScript: No requiere configuración adicional.
✅ Seguridad mejorada: Deno requiere permisos explícitos.
✅ Escalabilidad automática: Azure Functions escala dinámicamente según la carga.
✅ Despliegue automatizado: Se puede integrar con GitHub Actions para CI/CD.
2. Configuración del Proyecto Deno
2.1 Instalación de Deno
Si no tienes Deno instalado, usa el siguiente comando:
curl -fsSL https://deno.land/x/install/install.sh | sh
deno --version
2.2 Creación de una API en Deno
Primero, creamos una API REST básica usando el framework Oak:
mkdir deno-api && cd deno-api
echo "{}" > deps.ts
echo "{}" > server.ts
echo "{}" > routes.ts
echo "{}" > controllers.ts
deps.ts
(Dependencias)
export { Application, Router } from "https://deno.land/x/oak/mod.ts";
server.ts
(Servidor Principal)
import { Application } from "./deps.ts";
import router from "./routes.ts";
const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());
console.log("API Deno corriendo en http://localhost:8080");
await app.listen({ port: 8080 });
routes.ts
(Definición de Rutas)
import { Router } from "./deps.ts";
import { getHello } from "./controllers.ts";
const router = new Router();
router.get("/hello", getHello);
export default router;
controllers.ts
(Controlador de Rutas)
import { Context } from "https://deno.land/x/oak/mod.ts";
export const getHello = (ctx: Context) => {
ctx.response.body = { message: "Hola desde Deno y Azure!" };
};
3. Configuración de Azure Functions
3.1 Crear un Azure Function App
- Ingresa a Azure Portal.
- Dirígete a Azure Functions y selecciona Crear Función.
- Configura los siguientes parámetros:
- Nombre de la función:
deno-api-func
- Lenguaje: Custom Handler
- Plan de ejecución: Consumo (Pay-as-you-go)
- Sistema Operativo: Linux
- Región: La más cercana a tu ubicación.
- Nombre de la función:
- Presiona Crear y Desplegar.
3.2 Configurar Variables de Entorno
En el portal de Azure, dirígete a Configuración > Variables de Entorno y añade:
DENO_VERSION=1.38.0
PORT=8080
4. Creación de host.json
y function.json
Para que Azure Functions entienda nuestra API, debemos crear archivos de configuración.
host.json
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
function.json
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
5. Automatización con GitHub Actions
Para desplegar automáticamente nuestra API Deno en Azure Functions, usaremos GitHub Actions.
5.1 Crear un archivo de Workflow
En el repositorio de GitHub, crea la ruta .github/workflows/deploy.yml
y agrega lo siguiente:
name: Deploy Deno API to Azure Functions
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Deno
uses: denoland/setup-deno@v1
with:
deno-version: v1.x
- name: Deploy to Azure Functions
uses: Azure/functions-action@v1
with:
app-name: "deno-api-func"
package: "."
publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}
5.2 Configurar Secretos en GitHub
- Entra a tu repositorio en GitHub.
- Ve a Settings > Secrets and Variables > Actions.
- Agrega un secreto llamado
AZURE_FUNCTIONAPP_PUBLISH_PROFILE
con el contenido del perfil de publicación de Azure.
6. Despliegue y Prueba
6.1 Ejecutar el Despliegue
Cada vez que hagas git push
a la rama main
, GitHub Actions ejecutará el despliegue automáticamente.
git add .
git commit -m "Deploy API Deno en Azure Functions"
git push origin main
6.2 Probar la API en Azure
Cuando el despliegue finalice, podrás acceder a la API con:
curl https://deno-api-func.azurewebsites.net/api/hello
Debería responder:
{ "message": "Hola desde Deno y Azure!" }
7. Conclusión
El deploy automatizado de APIs Deno en Azure Functions ofrece una solución escalable y eficiente sin preocuparse por la infraestructura. GitHub Actions facilita la automatización del proceso CI/CD.