Les applications de fonction (Function Apps)
Introduction
Une application de fonction (Function App) est une ressource Azure qui héberge une ou plusieurs fonctions Azure Functions (serverless). Elle est leur unité de déploiement et permet de gérer leur configuration ainsi que leur environnement d’exécution. Les fonctions regroupées dans une même application partagent notamment des paramètres d’application et une pile d’exécution.
Distinguer une fonction et une application de fonction
Une fonction implémente un traitement exécuté en réponse à un déclencheur : une requête HTTP, une planification ou l’arrivée d’un message dans une file d’attente, par exemple. Une application de fonction représente l’environnement Azure dans lequel ces fonctions sont déployées et exécutées.
Choisir un hébergement
Lors de la création d’une application de fonction, il faut choisir son plan d’hébergement, qui détermine les ressources de calcul disponibles, les possibilités de mise à l’échelle, les fonctionnalités réseau et les modalités de facturation.
| Hébergement | Description |
|---|---|
| Consommation flexible | Offre serverless avec adaptation automatique à la charge et facturation à l’utilisation. Des instances toujours prêtes peuvent être configurées pour réduire les délais de démarrage. |
| Functions Premium | Propose des instances préchauffées et une mise à l’échelle automatique. Convient aux applications nécessitant une faible latence et des ressources plus importantes. |
| App Service | Exécute les fonctions sur les ressources d’un plan App Service. Ces ressources peuvent être partagées avec d’autres applications et sont facturées indépendamment du nombre d’exécutions. |
| Environnement Container Apps | Héberge les fonctions dans des conteneurs Linux, avec leurs dépendances, au sein d’un environnement Azure Container Apps. |
| Consommation (Windows) | Offre serverless historique sous Windows, avec mise à l’échelle automatique et facturation liée aux exécutions. |
Microsoft recommande l'hébergement Consommation flexible pour les nouvelles applications serverless, lorsque les besoins et les dépendances techniques le permettent.
Configurer l’application
Une application de fonction centralise les paramètres nécessaires à l’exécution des traitements. Les paramètres d’application permettent notamment de définir l’adresse d’un service, le nom d’une file d’attente ou une option de fonctionnement. Ils sont accessibles au code sous forme de variables d’environnement.
Cette configuration permet d’utiliser le même code avec des valeurs différentes selon l’environnement (développement, test ou production).
Déployer et surveiller les fonctions
Les fonctions peuvent être développées et testées localement, puis déployées dans Azure depuis Visual Studio, Visual Studio Code, des outils en ligne de commande ou un pipeline d’intégration et de déploiement continus.
Après le déploiement, Azure Monitor et Application Insights permettent de suivre les exécutions, de consulter les journaux et d’analyser les erreurs ainsi que les performances.
Gestion et utilisation des clés
Dans la vue de détail d’une application de fonction du portail Azure, nous pouvons accéder à son gestionnaire de clés. Ces clés sont des secrets partagés permettant de contrôler l’appel des fonctions HTTP qui exigent une clé d’accès.
Leur portée varie selon leur type :
| Type de clé | Utilisation |
|---|---|
| Clé de fonction (Function key) | Permet d’appeler une fonction précise. Elle se gère au niveau de cette fonction. |
| Clé d’hôte (Host key) | Permet d’appeler les fonctions HTTP de l’application dont le niveau d’autorisation est Function. |
Clé principale (_master) |
Donne également accès aux API d’administration du moteur Azure Functions. Elle doit être réservée aux opérations d’administration. |
Pour appeler une fonction configurée avec AuthorizationLevel.Function, le client transmet une clé de fonction ou une clé d’hôte. Il est préférable de placer cette clé dans l’en-tête HTTP x-functions-key et d’utiliser le protocole HTTPS. Le paramètre d’URL code est également accepté, mais expose davantage la clé à un enregistrement dans des historiques ou des journaux. Cette clé doit rester confidentielle et ne doit pas être publiée dans du code source accessible au public.
Le gestionnaire permet de créer, renouveler ou supprimer des clés. Leur renouvellement impose de mettre à jour les applications clientes qui les utilisent. Ces clés doivent rester confidentielles ; elles contrôlent l’accès par possession d’un secret, sans identifier personnellement l’appelant.
Ces clés peuvent être stockées dans Azure Key Vault, sous forme de secrets. Deux usages sont possibles :
- Côté client : l’application qui appelle la fonction récupère la clé dans Key Vault, puis la transmet dans l’en-tête
x-functions-key. Cela évite de l’inscrire dans son code source. Si la clé est renouvelée, le secret correspondant doit aussi être mis à jour. - Côté Function App : Azure Functions peut utiliser directement Key Vault comme stockage de ses clés, en configurant les paramètres suivants et en donnant à son identité managée les autorisations nécessaires sur les secrets du coffre :
Pour cette seconde configuration, Microsoft recommande un coffre distinct par application de fonction, afin d’éviter les collisions entre les clés.