ArticleInfrastructure & Cloud
Comment Microsoft fait grandir Azure Functions
Depuis son lancement en 2016, la plateforme serverless Functions de Microsoft a connu plusieurs mises à jour majeures pour embrasser plus étroitement les tendances de développement autour de Kubernetes et de la GenAI.

Il y a encore quelques années, on ne pouvait pas vraiment s'empêcher de parler de serverless. Puis le terme a semblé disparaître, dépassé d'abord par Kubernetes puis la GenAI. Mais bien sûr, comme la plupart des technologies, le serverless est toujours là, fournissant du calcul à la demande qui fait partie de la plupart des design d'environnements cloud native modernes. Lancée en 2016, la plateforme serverless de Microsoft, Azure Functions - servant à automatiser la gestion des événements et la maintenance des infrastructures - a continué d'évoluer, en prenant en charge des API et des langages mis à jour au fil du temps. Mais aussi en devenant partie intégrante des modèles et pratiques recommandés par Azure, prenant en charge tout ce qui va de l'IA à l'Internet des objets.
Ce qui reste la clé d'Azure Functions, c'est sa capacité à fournir une capacité à la demande sur la base du principe "payez pour ce que vous utilisez". Avec les outils serverless, il n'est pas nécessaire de provisionner l'infrastructure ; à la place, vous écrivez un code stateless orientés événements. Ce modèle est la clé la plus importante d'une informatique serverless car il permet de traiter et d'utiliser les données au fur et à mesure qu'elles arrivent. Par conséquent, on peur considérer le serverless comme un composant clé des applications modernes basées sur les messages, en tirant parti des technologies de publication et d'abonnement comme Azure Event Grid et le format de messagerie CloudEvents basé sur des standards ouverts. A l'occasion de sa dernière conférence Build 2024, Microsoft a d'ailleurs livré une série de mises à jour majeures d'Azure Functions pour l'aligner plus étroitement sur les tendances de développement actuelles, y compris la capacité de fonctionner dans des environnements Kubernetes managés et de prendre en charge les applications d'IA à la demande construites autour d'Azure OpenAI.
Exécuter Azure Container Functions dans Azure Container Apps
Azure Container Apps de Microsoft est un environnement Kubernetes managé, où l'on se préoccupe uniquement des conteneurs d'application et des règles de mise à l'échelle. Il n'est pas nécessaire de travailler avec la plateforme Kubernetes sous-jacente, car une grande partie de ses fonctionnalités ont été automatisées. Si Azure Functions est serverless, Azure Container Apps (ACA) est peut-être davantage à considérer comme un environnement "platformless". L'une des principales caractéristiques de Functions est sa portabilité, avec la possibilité de concevoir des applications et un runtime de base dans des conteneurs pour le déploiement et les tests. C'est une option utile, et Microsoft a profité de sa Build pour annoncer qu'ACA prend désormais en charge les conteneurs de fonctions dans le cadre d'un ensemble de services hébergés dans des conteneurs. Grâce à la prise en charge de la mise à l'échelle en fonction des événements, ACA devient l'hébergeur idéal pour Functions pour lancer des conteneurs à la demande.
Le conteneur héberge le même runtime que celui utilisé ailleurs dans Azure, contribuant à utiliser sa chaîne d'outils existante avec les mêmes intégrations qu'une implémentation standard de Functions. Cela inclut les mêmes bindings, avec ACA automatisant la mise à l'échelle, en utilisant l'autoscaling basé sur les événements de Kubernetes (KEDA). Une différence importante est qu'au lieu d'être facturées en tant qu'instances Functions, celles managées par ACA le seront dans le cadre d'un plan utilisant soit un modèle de consommation serverless, soit un autre plan dédié plus complexe. Dans ce cas, les environnements Functions peuvent accéder aux ressources GPU, ce qui peut aider à accélérer les modèles d'IA locaux. Les conteneurs qui hébergent Functions sont basés sur Linux, avec des images différentes pour chaque option linguistique. L'outil de développement en ligne de commande de Functions créera l'image correcte pour l'utilisateur avec l'option -docker dans le cadre de la création d'un nouveau projet Functions. Il faudra alors maintenir cette image à jour pour s'assurer de disposer des derniers correctifs de sécurité, ce qui nécessitera de redéployer cette image à une fréquence mensuelle, car de nouvelles images seront régulièrement publiées.
Utiliser Azure Functions avec Azure OpenAI
La conférence Build 2024 a été largement dominée par les investissements de Microsoft en matière d'IA. Azure Functions n'a peut-être pas (encore) son propre Copilot, mais il fait désormais partie de la chaîne d'outils de programmation de l'IA de Microsoft, avec un ensemble d'API pour utiliser Functions pour des tâches en GenAI mais aussi répondre aux sollicitations d'Azure OpenAI. Le déclenchement de Functions à partir d'Azure OpenAI permet de fournir un agent serverless. Les invites appelent des instances Functions qui peuvent être effectuées en langage naturel. D'autres outils permettent de mettre à jour et de lire des index de recherche vectorielle, ce qui permet d'utiliser Functions pour maintenir son répertoire sémantique local. Microsoft a présenté, en bêta, une extension de Functions multilangues. En fonction du choix d'outils de développement, l'utilisateur pourra commencer par installer le paquet d'extension dans son instance Functions. Par exemple, lorsque l'on utilise C#, il est possible d'utiliser NuGet pour installer le paquet à partir de la CLI .NET. Ces paquets devront être installés pour la base de données vectorielle choisie, comme Azure AI Search ou la nouvelle recherche vectorielle DiskANN de Cosmos DB.
Une option utile est la possibilité de concevoir Functions pour assister un workload Azure OpenAI, en l'utilisant comme une compétence dans une opération Prompt Flow. Lorsqu'un chatbot détecte une demande qui doit être transmise à votre fonction, sur la base de la description de la fonction, il transmet les données sous la forme d'une chaîne. Votre fonction peut alors traiter cette chaîne, par exemple en l'ajoutant à la base de données d'une autre application. Si vous préférez, vous pouvez utiliser une fonction pour créer un chatbot (ou au moins une interaction générative d'IA) sur la base d'un déclencheur externe. Cela vous permet de générer dynamiquement des invites, en utilisant une fonction pour contrôler votre IA, en fournissant des filtres et en évitant les attaques connues par injection d'invites. Une simple interaction envoie une requête à un point de terminaison Azure OpenAI et obtient une réponse qui peut être transmise à une autre fonction. Il y a beaucoup de choses qui peuvent être faites en utilisant des techniques d'informatique sans serveur avec Azure OpenAI. Azure Functions fonctionne bien en tant que plug-ins et compétences pour des outils tels que Prompt Flow ou Semantic Kernel, allant au-delà des chatbots de base et utilisant Azure OpenAI comme base d'un agent alimenté par l'IA, sans interaction directe entre le grand modèle de langage et vos utilisateurs. Il est intéressant de réfléchir à la manière dont vous pouvez utiliser les capacités combinées d'un LLM et d'Azure Functions, en tant qu'application basée sur la génération augmentée de recherche (RAG) ou en tant qu'interface en langage naturel pour des applications plus complexes.
La facturation de la consommation flexible prend en charge de nouveaux modèles d'application
Outre les dernières fonctionnalités de développement d'applications, Azure Functions bénéficie d'une nouvelle option de facturation. Le plan de consommation Flex est une extension du plan existant, ajoutant plus de flexibilité autour de l'infrastructure sous-jacente. Les instances sont construites sur des serveurs Linux, avec un support pour les environnements de programmation familiers de Functions, y compris le code C# .NET 8 et Node.js. Bien qu'une grande partie de la valeur de l'informatique sans serveur réside dans la capacité à ignorer l'infrastructure et à s'exécuter simplement avec les ressources disponibles, il existe toujours un besoin pour certaines options fixes qui contrôlent la façon dont votre fonction se déploie et les ressources qu'elle peut utiliser. Il s'agit notamment d'utiliser un réseau privé, de choisir la taille de la mémoire pour ses instances hôtes et de prendre en charge différents modèles de montées à l'échelle (scale-out). L'utilisateur pourra considérer ce plan comme une option premium, ajoutant des fonctionnalités axées sur les grandes implémentations nécessitant des réponses rapides. La mise à l'échelle est toujours pilotée par les événements, mais il est désormais possible d'avoir jusqu'à 1 000 instances au lieu d'un maximum de 200. Parallèlement, ces instances prennent en charge les déploiements rapides, ainsi qu'un nombre défini prêtes à fonctionner à tout moment. Cette approche permet ainsi de réduire la latence des applications, en faisant tourner des instances supplémentaires toujours prêtes à fonctionner dès que votre ensemble actuel devient actif. Les instances à mémoire plus importante ont accès à plus de bande passante réseau et à plus de CPU.
Outre l'option de mémoire par défaut de 2048 Mo, les plans de consommation Flex permettent des instances plus importantes grimpant jusqu'à 4096 Mo. Cela peut aider les applications qui ont besoin d'une plus grande mémoire ou de plus de calcul, par exemple, l'exécution de recherches vectorielles pour les applications RAG axées sur les événements. La prise en charge des réseaux virtuels privés est une autre option importante pour l'informatique sans serveur en entreprise, car elle garantit que les liens vers d'autres services Azure et vers le stockage restent à l'intérieur de votre propre réseau sécurisé. Les technologies serverless telles que Azure Functions restent un outil important pour la création d'applications cloud native modernes. Elles fournissent un framework pour une mise à l'échelle rapide et aident à maintenir les coûts au minimum, n'étant facturées que lorsqu'elles sont en cours d'exécution. Comme elles répondent aux événements et aux messages, elles sont un compagnon utile de Kubernetes et des plateformes d'IA modernes, offrant un moyen efficace d'ajouter rapidement de nouvelles instances Functions et de nouveaux services à ses applications Azure.
