Implémentation d’une solution fondée sur les Azure App Services
Il existe de multiples façons de bâtir une solution tirant partie d’une plateforme Cloud comme Azure. L’une d’entre-elles consiste à utiliser des services PaaS (Platform as a Service). Ce type de service offre de nombreux intérêts :
- Ne pas avoir à se soucier de l’infrastructure liée au stockage local, au réseau ou au système d’exploitation (ni à ses mises à jour…)
- Offrir une haute disponibilité garantissant une continuité de service pour les applicatifs hébergés
- Adapter automatiquement le dimensionnement des ressources (et la facturation qui en résulte) en fonction de l’utilisation (« autoscaling »)
- Accélérer l’implémentation et le déploiement
- ….
Parmi les nombreux services PaaS que propose la plateforme Azure, les Azure App Service sont sans conteste ceux qui offrent la plus grande simplicité pour développer, configurer et déployer de multiples types d’applications.
Pour illustrer leurs capacités, je me suis fixé comme objectif de développer une solution offrant des interfaces Web et Mobiles fondées sur ces services et exploitant des ressources Azure complémentaires comme les services de stockage, de recherche ou de gestion d’identité.
Voici donc une série d’articles qui, je l’espère, vous permettra d’accélérer votre découverte de ces environnements et qui sera organisée de la façon suivante :
- Solution et choix d’implémentation
- Mise en œuvre d’un service de recherche
- Consommation du service de recherche par une application Web
- Exposition du service de recherche
- Consommation du service de recherche par une application Universelle
- Gestion d’identité
- Code et configuration de l’application
Solution et choix d’implémentation
Le cahier des charges de notre application sera le suivant :
- Publication et archivage de documents dans le stockage Azure
- Définition d’un index sur les différents attributs souhaités
- Indexation et recherche des documents correspondants depuis une application Web et depuis une application universelle
- Chaque document dispose d’un compteur lui-même indexé. Une sélection du document doit permettre de le downloader et d’incrémenter ce compteur.
Comme expliqué en préambule, les Azure App Services constituent la dernière génération de service PaaS Azure. Ils sont conçus pour bâtir les applications web ou mobiles, exposer des APIs, et automatiser des processus métier en proposant un outil de conception intégrant plus de 50 connecteurs pour des systèmes d'entreprise (SAP, Siebel, Oracle…), des services SaaS (Office 365, Salesforce,…) ou des services liés au monde de l’Internet (Facebook, Twitter, Dropbox,…).
Azure App Service unifie les fonctions historiques d'Azure Web Sites, Azure Mobile Services et Azure Biztalk Services. Il les complète avec des fonctions orientées DevOps (intégration continue avec Visual Studio Online ou des solutions de Source Control Management Open Source comme GitHub, possibilité de de créer de multiples environnements de déploiement pour la même application, tests en production,…). Il centralise les configurations liées à leur sécurité, leur administration, leur dimensionnement et leur facturation (via le concept de plan App Service). Enfin, l’ensemble des services d’infrastructure sous-jacents sont gérés et les systèmes d’exploitation sont automatiquement mis à jour pour éliminer les vulnérabilités pour lesquelles des correctifs sont disponibles.
App Service facilite donc l'assemblage de multiples types d'application en une solution unique. Dans notre contexte, nous nous limiterons à l’utilisation de ses composantes Web Apps et API Apps.
Construire l’architecture de la solution consiste à identifier les différents services que nous allons pouvoir directement utiliser ainsi que les compléments que nous allons devoir développer spécifiquement pour atteindre les objectifs que nous nous sommes fixés.
Parmi les services nativement mis à disposition par la plateforme Azure, nous allons réutiliser le service « Azure Storage » pour le stockage, le service « Azure Search » pour la recherche, le service « Azure Active Directory » pour la gestion d’identité ainsi que les capacités offertes par API App et Web App pour développer et déployer les composantes spécifiques de notre application.
L’architecture de la solution cible est décrite dans le schéma suivant :
L’implémentation de la solution se déroulera donc sur plusieurs étapes. Certaines très rapides, seront de simples opérations de configuration sur le portail Azure. D’autres nécessiteront le développement des éléments requis par la solution.
Le diagramme suivant décrit l’enchainement des actions permettant d’obtenir la solution cible.
La solution est composée de multiples projets :
- Le projet « Doc.Search.Model », une librairie définissant le modèle décrivant les attributs d’un document et offrant quelques fonctions utilitaires complémentaires (notamment l’obtention de ces attributs à partir du stockage Azure de ce document).
- Le projet « BuildIndex.Search.App », une application console de définition et de construction de l’index à partir de documents déjà contenus dans le stockage Azure.
- Le projet « Doc.Search.Portal », correspondant à la Web App qui va permettre de publier et rechercher des documents.
- Le projet « Doc.Search.API », qui sera déployé en tant qu’API App pour exposer l’accès au service de recherche documentaire.
- Le projet « Doc.Search.App », correspondant à l’application universelle qui va interagir avec l’API App pour offrir la recherche de documents.
Le diagramme suivant illustre les interactions entre les différentes composantes de l’application et décrit le contenu de la librairie « Doc.Search.Model », notamment le descriptif de la classe « DocumentProperties ».
Maintenant que les fondations de notre solution sont établies, nous allons pouvoir la construire, brique par brique. Dans le prochain article, nous étudierons les possibilités offertes par le service « Azure Search » et nous verrons comment l’utiliser pour bâtir notre application.