Uso de Azure Functions para desarrollar código sin servidor de Node.js

Azure Functions proporciona infraestructura de código sin servidor, lo que le permite crear puntos de conexión HTTP a petición y con capacidad de respuesta. El código sin servidor se compone de código JavaScript o TypeScript que se ejecuta en respuesta a varios eventos.

Las funciones se ejecutan sobre un servicio web, como código o un contenedor de Docker, que se abstrae para que pueda centrarse en el código del punto de conexión. Las funciones también permiten desencadenar otra función para que una secuencia de trabajo de funciones pueda reemplazar la funcionalidad del servidor de back-end hospedado existente y eliminar la necesidad de administrar ese servidor.

¿Qué es un recurso de función?

Un recurso de Azure Functions es una unidad lógica para todas las funciones relacionadas en una única ubicación geográfica de Azure. El recurso puede contener una sola función o muchas funciones, que pueden ser independientes entre sí o relacionadas con desencadenadores de entrada o de salida. Puede seleccionar entre muchas funciones comunes o crear las suyas propias.

Puede seleccionar entre muchas funciones comunes o crear las suyas propias.

La configuración de recursos de función incluye configuraciones típicas sin servidor, como variables de entorno, autenticación, registro y CORS.

Funciones duraderas y con estado

Las funciones de Durable Functions conservan el estado o administran funciones de ejecución prolongada en Azure. Creación de su primera función durable en JavaScript.

Las aplicaciones web estáticas incluyen funciones

Al desarrollar una aplicación cliente de front-end estática (como Angular, React o Vue), que también necesita API sin servidor, use aplicaciones web estáticas con funciones para agruparlas juntas.

Proxy de la aplicación cliente a la API

Si tiene previsto implementar la API con la aplicación web estática, no es necesario usar la propiedad de proxy package.json de npm en la aplicación cliente. El proxy se establecerá de forma automática, incluido el desarrollo local y remoto.

Si tiene previsto implementar la API de forma independiente de su cliente, es posible que tenga que establecer y usar la propiedad de proxy package.json de npm en la aplicación cliente. El proxy sería necesario para el desarrollo local entre un cliente en ejecución (como una aplicación de React) y Function API. Al implementar ambas en plataformas de hospedaje, revise los requisitos de uso del servicio para comprender cómo adaptarse a sus necesidades de proxy.

Opciones de seguridad comunes que debe configurar para Azure Functions

Se deben configurar las siguientes opciones comunes para proteger la instancia de Azure Functions:

  • Parámetros de configuración
    • Parámetros de configuración: cree la configuración de la aplicación para los parámetros que no afectan a la seguridad. Para cualquier parámetro que afecte a la seguridad, cree una instancia de Azure Key Vault y extraiga esos parámetros de Key Vault.
    • Cadenas de conexión: almacene estas cadenas en la opción Cadenas de conexión de la aplicación. Estos valores se cifran en reposo.
    • Estado de FTP en los parámetros de plataforma: de forma predeterminada, se permiten todos. Tiene que seleccionar Solo FTPS o deshabilitar FTP por completo para mejorar la seguridad.
  • API CORS: configure los dominios de cliente. No use *, ya que indica todos los dominios.
  • Configuración de TLS/SSL para HTTPS: de forma predeterminada, la API acepta solicitudes HTTP y HTTPS. Habilite Solo HTTPS en la configuración de TLS/SSL. Dado que la aplicación de funciones se hospeda en un subdominio seguro, puede usarla inmediatamente (con https) y retrasar la compra de un nombre de dominio y el uso de un certificado para el dominio hasta que esté listo.
  • Ranuras de implementación: cree una ranura de implementación, como stage o preflight e insértela en esa ranura. Cambie esta ranura de almacenamiento provisional a producción cuando esté listo. No acostumbre a insertar manualmente en producción. El código base debe ser capaz de indicar la versión o confirmación que se encuentra en una ranura.

Función de JavaScript simple para solicitudes HTTP

Una función es una función asincrónica exportada con información de la solicitud y el contexto. La siguiente captura de pantalla parcial de Azure Portal muestra el código de la función.

Captura de pantalla parcial de una función de Azure en Azure Portal.

Desarrollo local de funciones con Visual Studio Code y extensiones

Cree su primera función mediante Visual Studio Code. Visual Studio Code simplifica muchos de los detalles con la extensión de Azure Functions.

Esta extensión le ayuda a crear funciones de JavaScript y TypeScript con plantillas comunes.

Este es un ejemplo en JavaScript de una función HTTP para Azure:

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
}

Este es un ejemplo en TypeScript de una función HTTP para Azure:

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('HTTP trigger function processed a request.');
    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };

};

export default httpTrigger;

Configuración de la función

Las funciones se configuran con el archivo function.json. Esta configuración permite configurar el modo en que se desencadena la función ("direction": in) y lo que devuelve la función ("direction": out). También permite establecer variables de entorno y otra información necesaria para que funcione la función. Más información sobre desencadenadores y enlaces.

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

Desarrollo de funciones de forma remota mediante Azure Portal

Cuando crea una función de Azure con Azure Portal, puede configurar la función, escribir el código dentro de una plantilla rellenada previamente y probar la función.

El portal solo crea funciones de JavaScript, no de TypeScript. Si desea desarrollar con TypeScript, descargue la función o cree la función localmente en Visual Studio Code con la extensión de Azure Functions.

Funciones de poco o mucho código

Las funciones sin servidor eliminan gran parte de la configuración y administración del servidor, para que pueda centrarse solo en el código que necesita.

  • Funciones de poco código: con Azure Functions, puede crear funciones desencadenadas por otros servicios de Azure o que se generan para otro servicio de Azure mediante enlaces de desencadenador.
  • Funciones de mucho código: para obtener más control, use los SDK de Azure para coordinar y controlar otros servicios de Azure.

Integración de Cosmos DB

Cosmos DB proporciona actualmente la siguiente integración de funciones:

Tipo API Descripción
Enlace de API & SQL Conectar api SQL con enlaces (código bajo) o @azure/COSMOS SDK.
Solo API MongoDB Use cualquier paquete npm de MongoDB con la cadena de conexión de Cosmos DB proporcionada en Azure Portal para el recurso. Los paquetes habituales de MongoDB incluyen Mongoose y MongoDB.

Pasos siguientes

La guía para el desarrollador de JavaScript para Azure Functions es un buen punto de partida.

Use el módulo de Microsoft Learn para obtener información sobre cómo habilitar las actualizaciones automáticas en una aplicación web mediante Azure Functions y SignalR Service.