Développement d’applications Node.js serverless avec Azure Functions

Générez et exécutez des API HTTP et des applications Node.js pilotées par les événements avec Azure Functions. Utilisez ensuite le reste de cet article pour choisir le chemin d’intégration et d’hébergement serverless appropriés pour votre application.

Qu’est-ce qu’une ressource d’application de fonction ?

Une application de fonction est une unité logique pour le déploiement et l’exécution de votre code de fonction dans une seule ressource Azure dans un emplacement géographique spécifique. La ressource peut contenir une fonction unique ou de nombreuses fonctions, qui s’exécutent indépendamment les unes des autres, mais partagent les mêmes ressources de calcul, connectivité et paramètres. Functions fournit une gamme complète de modèles basés sur des déclencheurs pour vous aider à commencer rapidement. Vous pouvez ajouter votre code et potentiellement d’autres liaisons de sortie et d’entrée.

Les paramètres de ressource de l’application de fonction incluent des configurations serverless courantes telles que les variables d’environnement, l’authentification, la journalisation et CORS.

Fonctions durables avec état persistant

Bien que les exécutions de fonctions dans Azure soient intrinsèquement sans état, Durable Functions conservent l’état et gèrent les fonctions de longue exécution dans Azure. Utilisez-les lorsque vous avez besoin d’orchestrations, de réessais ou de flux de travail en plusieurs étapes qui dépassent le cadre d’une seule requête. Pour commencer, consultez Créer votre première fonction durable en JavaScript.

Les applications web statiques incluent des fonctions

Lorsque vous développez une application cliente frontale statique (comme Angular, React ou Vue), qui a également besoin d’API serverless, utilisez applications web statiques avec des fonctions pour regrouper les deux.

Proxy de l’application cliente à l’API

Si vous envisagez de déployer votre API avec votre application web statique, vous n’avez pas besoin de proxyr les appels d’API de votre application cliente. Le proxy est établi pour vous lorsque vous déployez l’application de fonction en tant qu’application managée.

Lorsque vous développez localement votre application web statique à l’aide de Azure Functions, l’interface CLI Azure Static Web Apps fournit le proxy local.

Paramètres de sécurité courants à configurer pour votre fonction Azure

Les paramètres courants suivants doivent être configurés pour garantir la sécurité de votre fonction Azure :

  • Authentification et autorisation :
    • Utilisez l’ID Microsoft Entra (anciennement Azure Active Directory) pour une authentification robuste. Configurez votre application de fonction pour exiger des jetons OAuth2 pour les charges de travail de production.
    • Évitez d’utiliser des clés de fonction pour les applications sensibles. Au lieu de cela, intégrez à Microsoft Entra ID ou validez les jetons JWT dans votre code de fonction.
    • Utilisez des identités managées pour authentifier votre application de fonction avec d’autres ressources Azure, ce qui garantit que chaque fonction obtient uniquement l’accès dont elle a besoin.
  • Paramètres de configuration :
    • Paramètres d’application : créez des paramètres d’application pour les paramètres qui n’ont pas d’impact sur la sécurité.
    • Secrets et clés : pour tous les paramètres qui ont un impact sur la sécurité, utilisez cette approche hiérarchisé :
      1. Tout d’abord, utilisez l’ID Microsoft Entra pour l’authentification lorsqu’il est pris en charge.
      2. Pour les intégrations qui ne prennent pas en charge Entra ID, stockez les secrets dans Azure Key Vault et extrayez ces paramètres à partir de votre coffre de clés.
      3. N’incorporez jamais de secrets dans des fichiers de code ou de configuration.
    • Pour obtenir d’autres paramètres de sécurité de plateforme, consultez Sécurisation d’Azure Functions.
  • Sécurité réseau :
    • CORS : configurez vos domaines clients. N’utilisez pas *, pour indiquer tous les domaines.
    • Intégration de réseau virtuel : utilisez des points de terminaison privés ou une intégration de réseau virtuel pour limiter l’exposition du réseau et restreindre le trafic entrant à partir de sources approuvées.
  • HTTPS et chiffrement :
    • Paramètre TLS/SSL pour HTTPS - Par défaut, votre API accepte les requêtes HTTP et HTTPS. Activez HTTPS uniquement dans les Paramètres TLS/SSL. Étant donné que votre application de fonction est hébergée sur un sous-domaine sécurisé (*.azurewebsites.net), vous pouvez l’utiliser immédiatement (avec https) et retarder l’achat d’un nom de domaine et l’utilisation d’un certificat pour le domaine jusqu’à ce que vous soyez prêt.
  • Déploiement et surveillance :
    • Emplacements de déploiement : créez un emplacement de déploiement, tels que stage ou preflight, et déployez sur cet emplacement. Permutez cet emplacement de préproduction avec la production quand vous êtes prêt. Ne prenez pas l’habitude de pousser manuellement vers la production. Votre base de code doit être capable d’indiquer la version ou le commit présent sur un slot. Si vous utilisez Flex Consumption, utilisez les déploiements sans temps d’arrêt au lieu des slots.
    • Activez Application Insights pour la télémétrie en temps réel, les alertes et la détection des anomalies pour surveiller vos fonctions et journaux d’audit pour une activité suspecte.

Pour obtenir des conseils de sécurité complets, consultez Sécurisation d’Azure Functions.

Options d’hôte pour Azure Functions

Vous pouvez héberger Azure Functions de différentes façons en fonction de vos besoins :

Plans d’hébergement de ressources Azure Functions

Lorsque vous créez une ressource d’application de fonction, choisissez parmi ces plans d’hébergement Functions :

  • Plan de consommation (hérité) : payez uniquement le temps d’exécution de vos fonctions, grâce à une mise à l’échelle automatique.
  • Plan Flex Consumption : fournit un contrôle amélioré avec des instances toujours prêtes pour réduire les démarrages à froid, l’intégration de réseau virtuel et les tailles d’instance configurables (512 Mo à 4 Go). Ce plan est recommandé pour les nouvelles charges de travail Linux nécessitant des fonctionnalités de sécurité et de performances d’entreprise. Ce plan utilise la facturation basée sur l’exécution similaire au plan Consommation, mais avec des coûts supplémentaires pour les fonctionnalités telles que les instances toujours prêtes.
  • Plan Premium : offre des performances améliorées avec des instances préchauffées, une connectivité de réseau virtuel et des durées d’exécution plus longues.
  • Plan Dédié (App Service) : exécutez des fonctions sur des machines virtuelles dédiées pour des coûts prévisibles et un contrôle total sur l’environnement d’exécution.

Pour plus d’informations sur le choix du plan d’hébergement approprié, consultez les options d’hébergement d’Azure Functions.

Ressource Azure Container Apps

Vous pouvez également déployer Azure Functions sur une ressource Azure Container Apps en tant que charges de travail conteneurisées. Cette option offre un contrôle total sur l’environnement de conteneur et est idéale lorsque vous avez besoin de dépendances personnalisées, de processus de longue durée ou de combinaison de fonctions avec d’autres microservices conteneurisés. Pour plus d’informations, consultez Azure Functions sur Azure Container Apps vue d’ensemble.

Conditions préalables pour le développement d’Azure Functions

  • Node.js LTS : utilisez la dernière version de support à long terme (LTS) pour obtenir les meilleures mises à jour de compatibilité et de sécurité avec Azure Functions.
  • Azure Functions Core Tools : utilisez la version principale actuelle pour le développement et le débogage locaux.

Fonction JavaScript simple pour les requêtes HTTP

Une fonction est une fonction asynchrone exportée qui contient des informations sur la requête et le contexte. La capture d’écran partielle suivante du portail Azure montre le code d’une fonction.

Utilisez l’un des exemples de modèle de programmation v4 suivants comme point de départ de votre projet de fonction.

import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function status(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    return {
        status: 200,
        jsonBody: {
            env: process.env
        }
    };
};

app.http('status', {
    route: "status",
    methods: ['GET'],
    authLevel: 'anonymous',
    handler: status
});

Une fois l’application démarrée, accédez à http://localhost:7071/api/status pour tester le point de terminaison localement.

Développer des fonctions localement avec Visual Studio Code et des extensions

Créez votre première fonction à l’aide de Visual Studio Code. Visual Studio Code simplifie la plupart des détails avec l’extension Azure Functions.

Cette extension vous aide à créer des fonctions JavaScript et TypeScript avec des modèles courants.

Intégrer à d’autres services Azure

Les fonctions serverless suppriment la majeure partie de la configuration et de la gestion du serveur, ce qui vous permet de vous concentrer seulement sur le code dont vous avez besoin.

  • Fonctions de faible code : Avec Azure Functions, vous créez des fonctions déclenchées par d’autres services Azure ou cette sortie vers d’autres services Azure à l’aide de liaisons de déclencheur. Le modèle de programmation v4 inscrit tous les déclencheurs et liaisons directement dans votre code, ce qui rend le type de configuration sécurisé et intuitif.
  • Fonctions à code élevé : Pour plus de contrôle, utilisez les kits de développement logiciel (SDK) Azure pour coordonner et contrôler d’autres services Azure. Utilisez des identités managées pour authentifier en toute sécurité vos fonctions avec d’autres ressources Azure sans gérer les informations d’identification.

Étapes suivantes