| Fiche technique | |
|---|---|
| Fournisseur : | Azure |
| Type de produit : | Service infonuagique |
| Catégorie : | Fonctions événementielle |
| Site Web : | https://azure.microsoft.com/services/functions/ |
Azure Functions
L'Azure Functions permet une plateforme de calcul sans serveur basée sur les événements (requête HTTP, un planificateur de tâche,...) pouvant également résoudre des problèmes d'orchestration complexes. Le service Azure Functions permet de créer et déboguer localement sans configuration supplémentaire, déployer et opérer à grande échelle dans l'infonuagique, et intégrer des services à l'aide de déclencheurs et de liaisons.
Voici les caractéristiques de Azure Functions :
- Exécution basée sur des événements : Azure Functions est conçu pour réagir à des événements déclenchés par des sources variées : une requête HTTP, un message dans une file Azure Service Bus, l'arrivée d'un fichier sur un blob, un changement dans une base de données Azure Cosmos DB,... Le code ne s'exécute que lorsqu'un événement survient, ce qui optimise les ressources et les coûts.
- Architecture serverless : Avec Azure Functions, Microsoft gère automatiquement les serveurs, le dimensionnement, la haute disponibilité et la mise à l'échelle. Vous vous concentrez uniquement sur le code métier. Cela permet un développement rapide et une gestion allégée, surtout pour les tâches unitaires ou les microservices.
- Mise à l'échelle automatique : Le service ajuste automatiquement le nombre d'instances en fonction de la charge. Si plusieurs événements arrivent en même temps, Azure Functions crée dynamiquement des instances supplémentaires pour les traiter en parallèle, sans intervention de ta part.
- Multilingue : Azure Functions prend en charge plusieurs langages de programmation : C#, JavaScript / TypeScript (Node.js), Python, Java, PowerShell, Go (en préversion ou via extensions). Cela offre une grande flexibilité pour les équipes de développement.
- Intégration facile avec d'autres services Azure : Les fonctions peuvent être facilement connectées à d'autres services Azure grâce à des liaisons (bindings) : Azure Storage, Azure Event Grid, Azure Service Bus, Azure Cosmos DB,... Cela permet de créer des applications intégrées avec peu de code.
- Modèles de déclencheurs variés :
| Modèle de déclencheur | Description |
|---|---|
| Timer Trigger | Pour exécuter du code à intervalles réguliers (cron jobs). |
| HTTP Trigger | Pour exposer une API. |
| Queue/Blob Trigger | Pour réagir à des messages ou des fichiers. |
| Facturation à l'usage | Avec le plan de consommation, vous ne payez que pour le temps réel d'exécution du code (à la milliseconde près) et les ressources utilisées. C'est particulièrement économique pour les applications irrégulières ou à trafic variable. |
Liste des commandes
Voici la liste des commandes Azure CLI proposé pour le service Azure Functions :
| Nom | Description |
|---|---|
| az functionapp | Cette commande permet de gérer les applications de fonction. |
| az functionapp app | Cette commande permet de gérer l'application Azure Functions. |
| az functionapp app up | Cette commande permet de déployer sur Azure Functions via des actions GitHub. |
| az functionapp config | Cette commande permet de configurer une application de fonction. |
| az functionapp config access-restriction | Cette commande permet d'appeler des méthodes affichant, définissant, ajoutant et supprimant les restrictions d'accès sur une application de fonction. |
| az functionapp config access-restriction add | Cette commande permet d'ajouter une restriction d'accès à la functionapp. |
| az functionapp config access-restriction remove | Cette commande permet de supprimer une restriction d'accès de la functionapp. |
| az functionapp config access-restriction set | Cette commande permet de définir si le site SCM utilise les mêmes restrictions que le site principal. |
| az functionapp config access-restriction show | Cette commande permet d'afficher les paramètres de restriction d'accès pour functionapp. |
| az functionapp config appsettings | Cette commande permet de configurer les paramètres de l'application de fonction. |
| az functionapp config appsettings delete | Cette commande permet de supprimer les paramètres d'une application de fonction. |
| az functionapp config appsettings list | Cette commande permet d'afficher les paramètres d'une application de fonction. |
| az functionapp config appsettings set | Cette commande permet de mettre à jour les paramètres d'une application de fonction. |
| az functionapp config container | Cette commande permet de gérer les paramètres du conteneur d'application de fonction. |
| az functionapp config container delete | Cette commande permet de supprimer les paramètres d'un conteneur d'application de fonction. |
| az functionapp config container set | Cette commande permet de définir les paramètres d'un conteneur d'application de fonction. |
| az functionapp config container show | Cette commande permet de demander des détails sur les paramètres d'un conteneur d'application de fonction. |
| az functionapp config hostname | Cette commande permet de configurer les noms d'hôte pour une application de fonction. |
| az functionapp config hostname add | Cette commande permet de lier un nom d'hôte à une application de fonction. |
| az functionapp config hostname delete | Cette commande permet de dissocier un nom d'hôte d'une application de fonction. |
| az functionapp config hostname get-external-ip | Cette commande permet de demander l'adresse IP externe pour une application de fonction. |
| az functionapp config hostname list | Cette commande permet d'afficher la liste de toutes les liaisons de nom d'hôte pour une application de fonction. |
| az functionapp config set | Cette commande permet de définir la configuration de l'application de fonction. |
| az functionapp config show | Cette commande permet de demander les détails de la configuration d'une application de fonction. |
| az functionapp config ssl | Cette commande permet de configurer les certificats SSL. |
| az functionapp config ssl bind | Cette commande permet de lier un certificat SSL à une application de fonction. |
| az functionapp config ssl create | Cette commande permet de créer un certificat géré pour un nom d'hôte dans une application de fonction. |
| az functionapp config ssl delete | Cette commande permet de supprimer un certificat SSL d'une application de fonction. |
| az functionapp config ssl import | Cette commande permet d'importer un certificat SSL dans une application de fonction à partir de Key Vault. |
| az functionapp config ssl list | Cette commande permet d'afficher la liste des certificats SSL pour une application de fonction. |
| az functionapp config ssl show | Cette commande permet d'afficher les détails d'un certificat SSL pour une application de fonction. |
| az functionapp config ssl unbind | Cette commande permet de dissocier un certificat SSL d'une application de fonction. |
| az functionapp config ssl upload | Cette commande permet de téléverser un certificat SSL dans une application de fonction. |
| az functionapp cors | Cette commande permet de gérer le partage de ressources inter-origines CORS (Cross-Origin Resource Sharing). |
| az functionapp cors add | Cette commande permet d'ajouter les origines autorisées. |
| az functionapp cors remove | Cette commande permet de supprimer les origines autorisées. |
| az functionapp cors show | Cette commande permet d'afficher les origines autorisées. |
| az functionapp create | Cette commande permet de créer une application de fonction. |
| az functionapp delete | Cette commande permet de supprimer une application de fonction. |
| az functionapp deployment | Cette commande permet de gérer les déploiements d'applications de fonction. |
| az functionapp deployment container | Cette commande permet de gérer le déploiement continu basé sur des conteneurs. |
| az functionapp deployment container config | Cette commande permet de configurer le déploiement continu via des conteneurs. |
| az functionapp deployment container show-cd-url | Cette commande permet de demander l'URL pouvant être utilisée pour configurer les webhook pour un déploiement continu. |
| az functionapp deployment list-publishing-credentials | Cette commande permet de demander les détails des informations d'identification de publication d'application de fonction disponibles. |
| az functionapp deployment list-publishing-profiles | Cette commande permet de demande les détails des profils de déploiement d'application de fonction disponibles. |
| az functionapp deployment slot | Cette commande permet de gérer les emplacements de déploiement des applications de fonction. |
| az functionapp deployment slot auto-swap | Cette commande permet de configurer le remplacement automatique des emplacements de déploiement. |
| az functionapp deployment slot create | Cette commande permet de créer un emplacement de déploiement. |
| az functionapp deployment slot delete | Cette commande permet de supprimer un emplacement de déploiement. |
| az functionapp deployment slot list | Cette commande permet d'afficher la liste de tous les emplacements de déploiement. |
| az functionapp deployment slot swap | Cette commande permet de modifier les emplacements de déploiement pour une application de fonction. |
| az functionapp deployment source | Cette commande permet de gérer le déploiement des applications de fonction via le contrôle de code source. |
| az functionapp deployment source config | Cette commande permet de gérer le déploiement à partir de dépôts git ou Mercurial. |
| az functionapp deployment source config-local-git | Cette commande permet de demander une URL pour un point de terminaison de dépôt git à cloner et à pousser pour le déploiement de l'application de fonction. |
| az functionapp deployment source config-zip | Cette commande permet d'effectuer le déploiement à l'aide du déploiement kudu zip push pour une application de fonction. |
| az functionapp deployment source delete | Cette commande permet de supprimer une configuration de déploiement de contrôle de source. |
| az functionapp deployment source show | Cette commande permet de demander les détails d'une configuration de déploiement de contrôle de code source. |
| az functionapp deployment source sync | Cette commande permet de synchroniser depuis le référentiel. Nécessaire uniquement en mode d'intégration manuelle. |
| az functionapp deployment source update-token | Cette commande permet de mettre à jour le jeton de contrôle de source mis en cache dans le service d'application Azure. |
| az functionapp deployment user | Cette commande permet de gérer les informations d'identification des utilisateurs pour le déploiement. |
| az functionapp deployment user set | Cette commande permet de mettre à jour les informations d'identification de déploiement. |
| az functionapp deployment user show | Cette commande permet de demander l'utilisateur de publication. |
| az functionapp devops-pipeline | Cette commande permet d'indiquer l'intégration spécifique à Azure Function avec Azure DevOps. |
| az functionapp devops-pipeline create | Cette commande permet de créer une ligne de tuyau Azure DevOps pour une application de fonction. |
| az functionapp function | Cette commande permet de gérer les fonctions de l'application de fonction. |
| az functionapp function delete | Cette commande permet de supprimer une fonction. |
| az functionapp function keys | Cette commande permet de gérer les touches de fonction. |
| az functionapp function keys delete | Cette commande permet de supprimer une touche de fonction. |
| az functionapp function keys list | Cette commande permet d'afficher la liste de toutes les touches de fonction. |
| az functionapp function keys set | Cette commande permet de créer ou mettre à jour une touche de fonction. |
| az functionapp function show | Cette commande permet de demander les détails d'une fonction. |
| az functionapp hybrid-connection | Cette commande permet d'appeler les méthodes affichant la liste, ajoutant et supprimant les connexions hybrides de functionapp. |
| az functionapp hybrid-connection add | Cette commande permet d'ajouter une connexion hybride à une application de fonction. |
| az functionapp hybrid-connection list | Cette commande permet de liste des connexions hybrides sur une application de fonction. |
| az functionapp hybrid-connection remove | Cette commande permet de supprimer une connexion hybride d'une application de fonction. |
| az functionapp identity | Cette commande permet de gérer l'identité du service géré de l'application Web. |
| az functionapp identity assign | Cette commande permet d'attribuer une identité de service géré à l'application Web. |
| az functionapp identity remove | Cette commande permet de désactiver l'identité de service géré de l'application Web. |
| az functionapp identity show | Cette commande permet d'afficher l'identité du service géré de l'application Web. |
| az functionapp keys | Cette commande permet de gérer les touches de l'application de fonction. |
| az functionapp keys delete | Cette commande permet de supprimer une touche d'application de fonction. |
| az functionapp keys list | Cette commande permet d'afficher la liste de toutes les touches de l'application de fonction. |
| az functionapp keys set | Cette commande permet de créer ou de mettre à jour une touche d'application de fonction. |
| az functionapp list | Cette commande permet d'afficher la liste des applications de fonction. |
| az functionapp list-consumption-locations | Cette commande permet d'afficher la liste des emplacements disponibles pour l'exécution des applications de fonction. |
| az functionapp log | Cette commande permet de gérer les journals de bord des applications de fonction. |
| az functionapp log deployment | Cette commande permet de gérer les journals de bord de déploiement des applications de fonction. |
| az functionapp log deployment list | Cette commande permet d'afficher la liste des journals de bord de déploiement des déploiements associés à l'application de fonction. |
| az functionapp log deployment show | Cette commande permet d'afficher les journals de bord de déploiement du dernier déploiement ou d'un déploiement spécifique si l'identificateur de déploiement est spécifié. |
| az functionapp plan | Cette commande permet de gérer les plans App Service pour une Azure Function. |
| az functionapp plan create | Cette commande permet de créer un plan App Service pour une Azure Function. |
| az functionapp plan delete | Cette commande permet de supprimer un App Service Plan. |
| az functionapp plan list | Cette commande permet d'afficher la liste des App Service Plan. |
| az functionapp plan show | Cette commande permet de demander les plans App Service pour un groupe de ressources ou un ensemble de groupes de ressources. |
| az functionapp plan update | Cette commande permet de mettre à jour un plan App Service pour une fonction Azure. |
| az functionapp restart | Cette commande permet de redémarrer une application de fonction. |
| az functionapp show | Cette commande pemret de demander les détails d'une application de fonction. |
| az functionapp start | Cette commande permet de démarrer une application de fonction. |
| az functionapp stop | Cette commande permet d'arrêter une application de fonction. |
| az functionapp update | Cette commande permet de mettre à jour une application de fonction. |
| az functionapp vnet-integration | Cette commande permet d'appeler des méthodes affichant la liste, ajoutant et supprimant les intégrations de réseaux virtuels d'une application de fonction. |
| az functionapp vnet-integration add | Cette commande permet d'ajouter une intégration de réseau virtuel régional à une application de fonction. |
| az functionapp vnet-integration list | Cette commande permet de demander la liste des intégrations de réseau virtuel sur une application de fonction. |
| az functionapp vnet-integration remove | Cette commande permet de supprimer une intégration de réseau virtuel régional de functionapp. |
Azure Functions vs AWS Lambda vs API
Les Azure Functions et AWS Lambda représentent des approches serverless permettant d'exécuter du code uniquement lorsqu'un événement survient, avec une facturation basée sur le nombre d'appels et le temps d'exécution. Ces solutions offrent une mise à l'échelle automatique et un déploiement rapide, mais elles sont limitées en durée d'exécution et peuvent subir des temps de démarrage à froid. Elles sont idéales pour des tâches ponctuelles, comme le traitement de fichiers ou des microservices légers. En comparaison, une API classique repose sur un serveur ou un conteneur toujours actif, facturé en continu même sans trafic. Elle offre plus de contrôle, une exécution sans limite de temps et la possibilité de gérer des logiques complexes ou des connexions persistantes. Toutefois, elle demande davantage de gestion de l'infrastructure et un coût fixe plus élevé. En résumé, les fonctions serverless conviennent aux charges variables, tandis qu'une API traditionnelle reste adaptée aux besoins persistants et complexes.
| Critère | Azure Functions | AWS Lambda | API Classique |
|---|---|---|---|
| Modèle | Serverless FaaS | Serverless FaaS | API hébergée (serveur/containeur) |
| Facturation | À l'usage (exécutions) | À l'usage (exécutions) | Temps serveur (fixe + usage) |
| Durée maximum exécution | ~10 minute (consommation) | 15 minute | Illimitée |
| Mise à l'échelle | Automatique | Automatique | Manuelle ou auto-scaling |
| Écosystème | Azure (Blob, Event Hub.) | AWS (S3, DynamoDB,...) | Agnostique (choix libre) |
| Idéal pour | Automatisations, API légères | Traitement d'événements infonuagique | API complexes, long-running jobs |
Programmation
C#
Voici un exemple C# d'un programme en C# avec Azure Functions. Il s'agit d'une fonction HTTP déclenchée lorsqu'on envoie une requête (comme depuis un navigateur ou Postman), et retournant un message personnalisé (MyFunctionApp/HttpHello.cs) :
- using System.IO;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Azure.WebJobs;
- using Microsoft.Azure.WebJobs.Extensions.Http;
- using Microsoft.AspNetCore.Http;
- using Microsoft.Extensions.Logging;
- using Newtonsoft.Json;
-
- namespace MyFunctionApp
- {
- public static class HttpHello
- {
- [FunctionName("HttpHello")]
- public static async Task<IActionResult> Run(
- [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
- ILogger log)
- {
- log.LogInformation("Fonction HTTP déclenchée.");
-
- string name = req.Query["name"];
-
- if (string.IsNullOrEmpty(name))
- {
- // Si pas de paramètre dans l'URL, on regarde le corps de la requête
- string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
- dynamic data = JsonConvert.DeserializeObject(requestBody);
- name = data?.name;
- }
-
- string responseMessage = string.IsNullOrEmpty(name)
- ? "Veuillez fournir un nom dans la requête."
- : $"Bonjour, {name} ! Cette fonction Azure fonctionne bien.";
-
- return new OkObjectResult(responseMessage);
- }
- }
- }
Vous déployez localement avec Azure Functions Core Tools ou dans Azure. Ensuite, vous envoyez une requête HTTP : En GET : http://localhost:7071/api/HttpHello?name=Alice ou en POST (JSON) : { "name": "Alice" }
Dynamics 365
Voici un exemple de programme Azure Functions en C# interagissant avec Dynamics 365 (Dataverse), en lisant ou écrivant des données dans une entité (comme contacts, comptes,...).
Pour cette exemple, un environnement Dataverse et Dynamics 365 sont requis. Enregistrer une application Azure AD pour accéder à Dataverse (avec autorisations user_impersonation). Ensuite, installer le paquet NuGet :
| Microsoft.PowerPlatform.Dataverse.Client |
Voici l'exemple du code C# d'Azure Function + Dataverse :
- using System;
- using System.IO;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Azure.WebJobs;
- using Microsoft.Azure.WebJobs.Extensions.Http;
- using Microsoft.AspNetCore.Http;
- using Microsoft.Extensions.Logging;
- using Newtonsoft.Json;
- using Microsoft.PowerPlatform.Dataverse.Client;
- using Microsoft.Xrm.Sdk;
-
- namespace D365FunctionApp
- {
- public static class CreateContactFunction
- {
- [FunctionName("CreateContact")]
- public static async Task<IActionResult> Run(
- [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
- ILogger log)
- {
- log.LogInformation("Requête reçue pour créer un contact dans Dynamics 365.");
-
- string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
- dynamic data = JsonConvert.DeserializeObject(requestBody);
-
- string firstName = data?.firstName;
- string lastName = data?.lastName;
-
- if (string.IsNullOrEmpty(firstName) || string.IsNullOrEmpty(lastName))
- {
- return new BadRequestObjectResult("Paramètres 'firstName' et 'lastName' requis.");
- }
-
- try
- {
- // Connexion à Dataverse
- string connectionString = Environment.GetEnvironmentVariable("DataverseConnection");
-
- using (ServiceClient serviceClient = new ServiceClient(connectionString))
- {
- // Création d'un nouvel enregistrement contact
- Entity contact = new Entity("contact");
- contact["firstname"] = firstName;
- contact["lastname"] = lastName;
-
- Guid contactId = serviceClient.Create(contact);
-
- return new OkObjectResult($"Contact créé avec l'ID : {contactId}");
- }
- }
- catch (Exception ex)
- {
- log.LogError($"Erreur : {ex.Message}");
- return new StatusCodeResult(500);
- }
- }
- }
- }
Exemple de chaîne de connexion (dans local.settings.json) :
- {
- "IsEncrypted": false,
- "Values": {
- "AzureWebJobsStorage": "UseDevelopmentStorage=true",
- "FUNCTIONS_WORKER_RUNTIME": "dotnet",
- "DataverseConnection": "AuthType=ClientSecret;Url=https://votre-org.crm.dynamics.com;ClientId=xxxx;ClientSecret=yyyy;TenantId=zzzz"
- }
- }
Test de la fonction avec une requête HTTP POST (JSON) :
- {
- "firstName": "Jean",
- "lastName": "Tremblay"
- }
On obtiendra un résultat ressemblant à ceci avec un GUID :
Contact créé avec l'ID : a1b2c3d4-e5f6-7890-1234-56789abcdef0Concurrent
Les concurrents sont très nombreux : Alibaba Cloud Function Compute, AWS Lambda, Google Cloud Functions, IBM Cloud Functions, Oracle Functions,...