Académique Documents
Professionnel Documents
Culture Documents
Iain Foulds
APPRENEZ AZURE EN
DÉJEUNANT, EN UN
MOIS SEULEMENT !
<br /> }*
///////// #
Obtenez de l’aide
pour votre projet
Parlez avec
un commercial >
CommencezIci(Azure) ;
Démarrez gratuitement
ÉCONOMISEZ 40 % SUR LES LIVRES ET VIDÉOS DES ÉDITIONS MANNING !
Manning publie des livres et des vidéos de grande qualité pour les professionnels de la technologie comme vous.
Utilisez ce code de réduction spécial pour économiser 40 % sur tous les Ebooks, les livres imprimés, les programmes
d'accès anticipé Manning (MEAP) et les cours vidéo en ligne sur manning.com , y compris sur cette sélection,de titres.
Il vous suffit d'entrer azuremsft2 dans la fenêtre de code promotionnel au moment de valider votre commande.
« Une mine d'informations : parfait pour apprendre en un seul mois les concepts de base et avancés d’Azure ! »
—Sushi Sharma, galvaniser
« Microsoft Azure devient rapidement un leader dans le domaine du Cloud public. Grâce aux exercices
décrits dans cet ouvrage, vous serez rapidement à la pointe de cette technologie. »
—Michael Bright, conseiller en développement indépendant
« Excellente introduction à Azure avec de nombreux exemples pratiques. Couvre un large éventail de
sujets actuels. »
—Sven Stumpf, ING-DiBa AG
« Azure est semblable à un océan. Ce livre vous maintient à flot en vous proposant le meilleur moyen
d'apprendre en déjeunant et en profitant de leçons riches en activités pratiques et en exemples. »
—Roman Levchenko, Microsoft MVP
« Tout ce dont les développeurs proactifs ont besoin pour exploiter Azure. »
—Rob Loranger, freelance developer
« Grâce à une approche concise axée sur la pratique, ce livre permet d'appréhender l'offre étendue
d'Azure. »
—Dave Corun, Avanade
« Le livre le plus complet sur Azure que j’ai trouvé pour commencer à développer mes projets
académiques ! »
—Marco Giuseppe Salafia, PhD student, Università degli Studi di Catania
« Il s’agit d'un ouvrage incontournable sur la plateforme Azure. Il est bien organisé, approfondi et com-
plet. Il explique les bases et guide le lecteur en créant des configurations de plus en plus complexes avec la
plateforme Azure pour fournir une évolutivité, des performances élevées et une redondance pour les appli-
cations et services hébergés. Ce livre servira à la fois de tutoriel pour les débutants et de référence pour les
utilisateurs plus expérimentés. »
—Robert Walsh, Excalibur Solutions
Apprenez Azure en
déjeunant !
deuxième édition
IAIN FOULDS
MANNING
Shelter Island
Pour plus d’informations et pour commander ce livre et d’autres ouvrages publiés par Manning,
rendez-vous sur le site www.manning.com. L'éditeur propose des remises sur ce livre si vous
commandez plusieurs exemplaires. Pour en savoir plus, veuillez contacter :
Special Sales Department
Manning Publications Co.
20 Baldwin Road
PO Box 761
Shelter Island, NY 11964
Adresse e-mail : orders@manning.com
Aucune partie de cette publication ne peut être reproduite, stockée dans un système d’extraction ou
transmise sous quelque forme ou par quelque moyen que ce soit (voie électronique, voie mécanique,
photocopies ou autres), sans autorisation écrite préalable de la part de l’éditeur.
Bon nombre des désignations utilisées par les fabricants et les vendeurs pour distinguer leurs produits
sont des marques déposées. Lorsque de telles désignations apparaissent dans le livre, si Manning
Publications avait connaissance qu'une marque avait été déposée, elles sont écrites avec une majuscule
initiale ou tout en majuscules.
Dans un souci de préservation des écrits, la politique de Manning est d'imprimer ses livres sur du
papier non acide, et nous déployons tous les efforts dans ce sens. En outre, dans un souci de
préservation des ressources de la planète, les livres Manning sont imprimés sur du papier au moins
15 % recyclé et traité sans chlore élémentaire.
ISBN 9781617297625
Imprimé aux États-Unis d'Amérique
Aux trois femmes de ma vie :
Abigail, Bethany et Charlotte
table des matières
Préface xv
remerciements xvi
à propos de ce livre xvii
à propos de l'auteur xxi
vii
viii table des matières
serveur Web 26
2.5 Comment permettre au trafic Web d'atteindre la machine
virtuelle 28
Création d'une règle autorisant le trafic Web 28 Observation du
■
3 Azure Web Apps 33
3.1 Présentation et concepts d'Azure Web Apps 34
Langages et environnements pris en charge 34 Tests
■
exemple de site HTML 39
3.3 Affichage des journaux de diagnostic 42
3.4 Exercice pratique : création et utilisation d'un emplacement
de déploiement 44
7
Haute disponibilité et redondance 90
7.1 Le besoin de redondance 90
7.2 Redondance des infrastructures avec zones de disponibilité 92
Création de ressources réseau dans une zone de disponibilité 94
Création de machines virtuelles dans une zone de disponibilité 95
■
automatique 133
9.3 Mise à l'échelle d'une application Web 136
9.4 Exercice pratique : installation d'une application sur un
VMSS ou une application Web 139
Les VMSS (Virtual Machine Scale Sets) 139 Applications Web 140
■
18 Azure Automation 269
18.1 Qu'est-ce que Azure Automation ? 269
Création d'un compte Azure Automation 271 Actifs
■
d’IoT 322
index 335
Préface
Cette deuxième édition d'Apprendre Azure en déjeunant me rappelle que tout
évolue rapidement et qu'il est toujours nécessaire d'apprendre. Fini le temps où vous
pouviez suivre un cours d’une semaine au sujet de Windows Server afin de pouvoir
l'utiliser confortablement pendant des années sans rien changer. Le monde informa-
tique n'est pas forcément devenu un endroit effrayant, mais vous devez aborder le
cloud computing avec un esprit ouvert et être prêt à vous adapter constamment.
Lorsque j'ai commencé à travailler avec Azure, il y avait presque trop de services dis-
ponibles. Je savais que je devais m'occuper de la sécurité, de la performance, de la
redondance et de l'évolutivité, mais je ne savais pas comment m'adapter après plus de
dix ans d'expérience en tant qu'administrateur de serveurs dans une structure impor-
tante du domaine cloud computing. Avec le temps, j'ai appris à utiliser les différents
services Azure qui offrent ces composants clés. Ces services fonctionnent rarement de
façon autonome, mais je ne connaissais pas la meilleure façon de les intégrer, et je ne
savais pas quel service utiliser pour chaque tâche. J'ai écrit ce livre comme si j'expliquais
à moi-même à cette période, et aux nombreuses autres personnes qui ont vécues la
même expérience, comment comprendre rapidement le fonctionnement des princi-
paux services Azure et comment les utiliser conjointement.
Ce livre fait plus de 350 pages, et pourtant il ne vous offre qu'un aperçu de ce que
vous pouvez faire avec Azure ! Pour vous offrir des connaissances solides sur les con-
cepts nécessaires à la conception de solutions réussies dans Azure, j'ai dû opérer une
sélection des sujets abordés. Ce livre ne parle pas des plus de 100 services disponibles
dans Azure et ne prétend pas détailler de façon exhaustive ceux qui sont abordés. Il se
concentre sur les principes fondamentaux de certains des services clés, propose des
exemples illustrant la manière de connecter les différents éléments de façon sécurisée,
et présente les possibilités de conception offertes par Azure.
Le cloud computing est en constante évolution. Pas de cycles de sortie de trois/qua-
tre ans, ni de vastes déploiements de mises à jour. Je crois que c'est le moment idéal
pour commencer à concevoir des solutions et à écrire du code. Les occasions d'appren-
dre quelque chose et de s'améliorer ne manquent jamais. Je vous souhaite d'apprendre
à exécuter de supers applications dans Azure, et j'espère que vous apprécierez de
découvrir les services disponibles.
xv
remerciements
De nombreuses personnes chez Manning Publications ont contribué à la publication
de cet ouvrage. Je remercie en particulier Mike Stephens pour m'avoir poussé à démar-
rer ce projet. Merci à mon éditeur Marjan Bace, à toute l'équipe éditoriale et à toute
l'équipe de production. Je remercie également les relecteurs techniques dirigés par
Aleksandar Dragosav- ljevic´—Ariel Gamino, Charles Lam, Ernesto Cardenas Canga-
huala, George Onofrei, Glen Thompson, Jose Apablaza, Juraj Borza, Michael Lang-
don, Michael Wall, Peter Kreyenhop, Rick Oller, Rob Ruetsch, Robert Walsh, et Vishal
Singh. Enfin, côté technique, merci à Karsten Strøbaek, qui a assumé les rôles de
rédacteur en chef technique et de relecteur.
Pour cette deuxième édition, je remercie grandement Phil Evans et Davanand Bahall
pour leur soutien et la liberté qu'ils m'ont offert pour mettre ce livre à jour. J'ai mené ce
projet en dehors de mes heures de travail chez Microsoft, et j'ai apprécié l'enthousi-
asme et l'implication de nombreuses personnes. Merci e ncore à David Tolkov et à Tim
Teebken, qui m'ont offert les occasions grâce auxquelles j'ai pu devenir la personne qui
a écrit cet ouvrage. Et d'ailleurs, Jean-Paul Connock, nous avons gagné une coupe Stan-
ley depuis la dernière fois !
Merci à Rick Claus pour m'avoir fourni la solide documentation technique néces-
saire sur Azure, et à Marsh Macy et Neil Peterson pour leur soutien personnel et les
conseils qu'ils m'ont apportés lors de la rédaction de la version originale de cet ouvrage.
Nous devons toutefois travailler sur le fameux bus scolaire.
xvi
À propos de ce livre
Ce livre est conçu pour vous offrir une solide base de connaissances qui vous permettra
de mener à bien vos projets Azure en tant qu'ingénieur ou développeur IT. Vous
découvrirez les solutions Infrastructure as a Service (IaaS) et Plat
form as a Service (PaaS), et saurez quand utiliser chacune de ces deux approches.
À mesure que vous avancerez dans les chapitres, vous apprendrez à dresser des plans
adéquats pour la disponibilité et l'évolutivité sans compromettre la sécurité, et sans
perdre de vue les contraintes de coûts et de performances. Quand vous aurez terminé
le livre, vous devriez être capable d'intégrer les technologies d'avenir telles que les con-
teneurs et Kubernetes, l'intelligence artificielle et le Machine Learning (AI + ML),
et l'Internet des objets (IoT).
En ce qui concerne la conception et l'exécution de vos applications et services, Azure
vous laisse le choix du système d'exploitation, des outils d'application et de la plate-
forme. Vous pouvez choisir ceux qui vous conviennent le mieux. Ce livre aborde princi-
palement les technologies non-Microsoft telles que Linux, Python et node.js. Les
exemples de commandes s'appliquent à la CLI Azure, et non à Azure PowerShell. C'est
un choix délibéré, pour vous montrer que vous pouvez utiliser Azure sans adopter Win-
dows Server, IIS ou ASP.NET.
Travailler dans le cloud implique souvent de s'adapter à différentes plateformes
et d'apprendre de nouvelles façons de procéder. C'est une autre des raisons pour
lesquelles j'ai choisi de présenter des technologies et des plateformes non-Microsoft.
Je voulais vous présenter ces nouveaux univers avant que vous ne les rencontriez en
production. Tout au long de ce livre, je vous enseigne les concepts et les étapes néces-
saires à l'intégration de services Azure de façon que vous puissiez jongler à l'envi entre
les plateformes et les langages, sans avoir à tout réapprendre.
xvii
xviii À propos de
ce livre
Feuille de route
Le livre est organisé en 4 parties et 21 chapitres :
¡ La partie 1 aborde certains des services d'infrastructure et de plateforme clés
d'Azure : mac hines virtuelles, applications Web, stockage et mise en réseau.
¡ Dans la partie 2, vous découvrirez comment mettre en place la haute disponibilité
et la redondance : modèles, ensembles et zones de disponibilité, équilibreurs de
charge, mise à l'échelle automatique, bases de données distribuées et routage de
trafic. À la fin du chapitre 12, vous devriez disposer de connaissances solides qui
vous permettront de concevoir des applications hautes performances et dis-
tribuées dans Azure.
¡ La partie 3 couvre les aspects liés à la sécurité tels que la sauvegarde et la récupéra-
tion, le chiffrement, la gestion des clés numériques et les mises à jour. Une fois
que vous aurez terminé le chapitre 16, vous aurez toutes les cartes en main pour
offrir des applications Azure stables et sécurisées.
¡ Enfin, dans la partie 4, nous pourrons nous amuser un peu en explorant de nou-
veaux aspects de l'informatique comme l'informatique Serverless et les applica-
tions conteneurisées. Ces chapitres présentent des domaines d'Azure qui vous
donnent un aperçu de ce à quoi l'avenir des applications de production pourrait
ressembler.
Sauf pour la partie 4 (qui porte le titre fort à propos « Les technologies vraiment
intéressantes »), essayez de lire les chapitres dans l'ordre. D'un chapitre à l'autre, vous
ne travaillerez pas sur le même projet, mais chacun d'entre eux s'appuie sur les con-
naissances théoriques et les exemples pratiques des précédents.
Le chapitre 1 vous guide lors de la création d'un compte d'essai gratuit
dans Azure. Ce compte vous permet d'effectuer tous les exercices pratiques
proposés dans les chapitres. Tout au long du livre, vous trouverez également
des informations plus générales sur Azure, ainsi que des ressources qui vous
permettront de vous renseigner plus avant. Je mentionne cette page Web plusieurs
fois dans l'ouvrage (je ne suis peut-être pas le mieux placé pour être objectif), mais
je crois que http://docs.microsoft.com/azure est le meilleur endroit pour vous
documenter sur Azure de façon générale, ainsi que sur les domaines spécifiques
qui vous intéressent.
Tous les exercices pratiques peuvent être réalisés dans le portail Azure et avec Azure
Cloud Shell, un shell interactif en navigateur pour la CLI Azure et Azure PowerShell.
Vous n'avez aucun outil à installer sur votre poste, et vous pouvez utiliser n'importe quel
ordinateur sous n'importe quel système d'exploitation, à partir du moment où il est
équipé d'un navigateur Web moderne.
Des modifications mineures sont souvent apportées au portail Azure. Ce qui peut
être difficile lorsqu'on utilise un service Cloud, c'est que les choses peuvent variées d'un
jour à l'autre.
Cette deuxième édition tente de minimiser les captures d'écran du portail, mais ne
vous inquiétez pas si ce que vous voyez à l'écran est un peu différent. Les paramètres
proposés sont généralement identiques. Seule la mise en page peut varier. Si vous êtes
invité à sélectionner des options que je n'ai pas évoquées dans un exercice, générale-
ment, vous pouvez accepter sans risque les paramètres par défaut proposés.
Si vous travaillez en dehors d'Azure Cloud Shell, attention avec les exemples de com-
mandes fournis. Les shells Windows, comme PowerShell et CMD, ne traitent pas les
sauts de ligne et les caractères de continua tion de ligne de la même manière que les
shells de type *nix comme Azure Cloud Shell. Plusieurs commandes fournies à titre
d'exemple sont réparties sur plus d'une ligne. La barre oblique inverse (\) indique que
la commande continue à la ligne suivante, comme dans cet exemple :
az resource group create \
--name azuremol \
--location eastus
Vous n'êtes pas obligé d'utiliser ces barres obliques inverses, mais elles facilitent la lec-
ture des longues commandes à l'écran. Si vous choisissez de travailler en local sur votre
ordinateur avec un shell Windows, vous pouvez utiliser un accent grave (`) à la place
de la barre oblique inverse. Dans un shell Power- Shell ou CMD dans lequel vous avez
installé Python pour Windows, modifiez par exemple la commande précédente
comme ceci :
az resource group create `
--name azuremol `
--location eastus
Cela peut sembler déstabilisant, mais j'ai suivi cette convention parce que la documen-
tation officielle disponible sur https://docs.microsoft.com/azure utilise ce format.
Les commandes de la CLI Azure, utilisées dans ce livre, doivent être saisies dans un
shell de type *nix et utilisent donc une barre oblique inverse. Les commandes
Azure PowerShell doivent être saisies dans un shell de type Windows et utilisent donc
un accent grave. Vous vous ferez vite à cette différence de comportement, et pourrez
facilement jongler entre ces deux shells. Si vous n'avez pas encore l'habitude de passer
d'une plateforme à une autre, ce sera une victoire à célébrer.
Je vous recommande de consulter Windows Subsystem for Linux (WSL) si vous
exécutez Windows 10 et si vous souhaitez en savoir plus sur les systèmes basés sur CLI
Azure et *nix. Consultez https://docs.microsoft.com/windows/wsl pour obtenir
davantage d'informations. WSL et les dernières améliorations apportées à WSL2 vous
offrent une expérience native du noyau Linux, tout en exécutant Windows. Ne vous en
faites pas trop à ce sujet ! Il vous suffit de savoir que vous pouvez exécuter des
xx À proposde ce livre
commandes et des applications Linux natives sans vous soucier des différ ents sauts de
ligne ou définitions de variables. Pour vous couper le souffle, PowerShell est dispo
nible pour .NET Core, qui s’exécute également sur Linux. Vous pouvez exécuter Pow-
erShell sous Linux tout en étant sur Windows.
xxi
Partie 1
1
Azure est l'un des plus grands fournisseurs de cloud computing public pour les
services tels que les machines virtuelles (VM), les conteneurs, l'informatique Serverless
et le Machine Learning. Nous n'allons pas analyser en détail les quelque 100 services
Azure présentés dans ce livre. En revanche, vous allez enrichir vos connaissances sur
les fonctions et les services de base qui couvrent l'essentiel de ce dont vous avez besoin
pour commencer à développer et exécuter des solutions dans Azure. Nous allons
étudier un exemple type de la manière de développer et d’exécuter une application
Web. Vous verrez également comment utiliser certains services de plateforme et
d’infrastructure de base susceptibles de simplifier votre travail.
Avec Azure, nul besoin d’une baguette magique pour prévoir le nombre de
serveurs ou le volume de stockage dont vous aurez besoin au cours des trois
prochaines années. Ne perdez plus de temps à attendre l’approbation du budget,
attendre l’expédition du nouveau matériel, pour ensuite l'installer et tout configurer.
Lors de la rédaction de votre code, vous n’avez pas à vous préoccuper de savoir
quelles bibliothèques ou quelles versions logicielles sont installées.
Il vous suffit de sélectionner un bouton pour créer toutes les ressources requises.
Vous ne payez rigoureusement que pour la stricte durée d'exploitation de ces
ressources ou pour le volume de stockage ou de bande passante réseau utilisé.
Lorsque vous n’avez plus besoin des ressources, vous pouvez les désactiver ou les
supprimer. Si vous avez soudainement besoin de multiplier par 10 la puissance de
calcul, sélectionnez un bouton, attendez quelques minutes, et le tour est joué. Et tout
cela est géré par quelqu’un d’autre, ce qui vous laisse libre de vous concentrer sur
vos applications et vos clients.
vous êtes au bon endroit. En termes génériques, vous êtes probablement soit du côté
opérationnel informatique, soit du côté développement. En réalité, il existe beaucoup
de recoupements entre les deux, surtout lorsque vous travaillez dans le cloud computing.
Que vous travailliez du côté développement ou opérationnel, il est important de
comprendre les services d'infrastructure et de plateforme de base, pour développer et
exécuter des applications qui répondent le mieux aux exigences de vos clients.
Cette seconde édition présente certains de ces concepts de base dans Azure en vous
permettant d'acquérir les compétences nécessaires pour prendre des décisions
éclairées. Pour commencer la lecture de ce livre, vous devez posséder une expérience
préalable dans le domaine des machines virtuelles et connaître les bases de la mise en
réseau et du stockage. Vous devez également être capable de créer un site Web basique
et savoir ce qu’est un certificat SSL ou une base de données. Une fois les processus de
base couverts, nous aborderons succinctement les technologies nouvelles et à venir.
Pour garder une longueur d’avance sur le plan professionnel, vous devrez maîtriser les
concepts des conteneurs, de l’Internet des objets, du Machine Learning, de
l’intelligence artificielle et de l’informatique Serverless. Que vous vous définissiez
comme développeur ou professionnel de l'informatique, vous devriez trouver quelques
nouveaux domaines intéressants à explorer !
1.2.2 Tester
Voulez-vous simplement prendre connaissance du contenu ou souhaitez-vous vous
retrousser les manches et expérimenter Azure ? Tout au long du livre, vous découvrirez
des petites tâches qui vous permettent d'expérimenter rapidement de nouvelles
connaissances. Si vous en avez le temps, essayez-les. La plupart des manipulations
s'inscrivent dans un exercice pratique à la fin du chapitre, mais il est également
intéressant d'interrompre la lecture pour tester de nouveaux concepts en cours de
route. Certains de ces exercices vous guideront étape par étape, tandis que d'autres
vous feront réfléchir un peu plus, en vous apprenant à créer des solutions par vous-
même, comme vous le feriez dans la vraie vie.
Tester
Suivez les étapes de cette section pour créer votre compte gratuit Azure :
Figure 1.1 Le portail Azure est prêt à vous aider à créer vos propres applications et solutions
Création de votre environnement de laboratoire 7
Figure 1.2 Modèle Pizza as a Service. Lorsque vous passez d’un modèle de pizza faite maison, où vous
fournissez tout, à un modèle de pizza en restaurant, où vous avez juste à mettre les pieds sous la table,
les responsabilités et les exigences de gestion changent en conséquence.
Dans le modèle Pizza as a Service, quatre options vous sont proposées. Plus on avance
dans les modèles, moins on se préoccupe du processus de manger une part de pizza :
Compréhension de la plateforme Windows Azure 9
¡ Fait maison : vous devez faire la pâte ; ajouter la sauce, les garnitures et le fromage ;
faire cuire la pizza dans votre four ; sortir des boissons ; et vous attabler pour manger.
¡ Prête à cuire : vous achetez une pizza préparée. Vous avez juste besoin de la faire
cuire dans votre four, de sortir des boissons et de vous attabler pour manger.
¡ Livraison à domicile : vous commandez une pizza livrée à domicile. Vous avez juste
besoin sortir des boissons et de vous attabler pour manger.
¡ Restaurant : vous voulez sortir et déguster une pizza avec un minimum d’effort !
Maintenant que vous avez faim, observons le modèle plus traditionnel qui implique
quelques ressources de calcul (figure 1.3). Ce modèle s'apparente un peu plus à que
vous pouvez voir dans Azure.
Au fur et à mesure que vous progressez dans les modèles, vous gérez moins de ressources
sous-jacentes et pouvez concentrer davantage de temps et d’énergie à vos clients :
¡ Sur site : vous configurez et gérez l’ensemble du datacenter, dont, par exemple, les
câbles réseau, le stockage et les serveurs. Vous êtes responsable de toutes les
composantes de l’environnement d’application, de la maintenance et de la
redondance. Cette approche confère un contrôle maximum, mais génère une
importante surcharge de gestion.
¡ Infrastructure en tant que service (IaaS) : vous achetez les ressources de calcul de base
auprès d’un fournisseur qui gère l’infrastructure essentielle. Vous créez et gérez
les machines virtuelles, les données et les applications. Le fournisseur de cloud
est responsable de l’infrastructure physique, de la gestion de l’hôte et de la
résilience. Vous pouvez toujours avoir une équipe d'infrastructure pour sous-
tendre l'assistance et le déploiement des machines virtuelles, mais elle s'affranchit
du temps et des coûts de gestion de l'équipement physique.
10 Chapitre 1 Avant de commencer
Des livres entiers sont consacrés à la virtualisation, mais pour être bref : la
virtualisation divise logiquement les ressources physiques d’un serveur en ressources
virtuelles qui peuvent être accessibles en toute sécurité par des charges de travail
individuelles. Une machine virtuelle est l’une des ressources les plus courantes du
cloud computing. Une machine virtuelle contient une unité centrale virtuelle (vCPU),
une mémoire virtuelle (vRAM), un système de stockage virtuel (vDisk), et une
connectivité réseau virtuelle (vNIC), comme illustré à la figure 1.4.
Hyperviseur Hyper-V
2
Êtes-vous prêt à voir à quelle vitesse vous pouvez configurer un serveur Web dans
Azure ? Dans ce chapitre, nous abordons directement l'une des demandes les plus
courantes en matière de machines virtuelles : la construction d'un serveur Web de
base. Cette charge de travail est un excellent exemple des composants de base de
l'infrastructure en tant que service (IaaS) dans Azure.
Supposons que vous travailliez pour une pizzéria qui souhaite étendre ses activités et
accepter les commandes en ligne dans le cadre de la livraison de pizzas ou la vente à
emporter. Pour créer une présence en ligne, vous avez besoin d'un site Web. Dans les
deux premières parties de ce livre, nous explorons les différents services et fonctionnalités
d'Azure qui vous permettent de développer et d'exécuter à la fois des applications Web
IaaS et de plateforme en tant que service (PaaS). Vous pouvez commencer à prendre des
décisions éclairées quant au moment auquel développer et exécuter une machine
virtuelle pour sous-tendre un site Web, et quant à celui d'utiliser la solution PaaS pour ce
faire. La première étape consiste néanmoins à créer un serveur Web.
Dans ce chapitre, vous créerez une machine virtuelle Linux Ubuntu et
installerez un serveur Web de base. Ne vous préoccupez pas de l'utilisation
de Linux : c'est une machine virtuelle Windows que vous allez créer dans le cadre de
l'exercice pratique à la fin de ce chapitre
Ouvrez le port 80
pour permere aux
clients de parcourir
votre site. Client sur PC
Client sur
tablee
Figure 2.1 Dans ce chapitre, vous créez une machine virtuelle de base, vous vous connectez pour
installer un serveur Web, puis vous ouvrez un port réseau pour permettre aux clients d'accéder au site
Web de démonstration.
14
Notions de base de la configuration d'une machine virtuelle 15
exercice pratique ! Ubuntu est une plateforme de serveur Web répandue, et représente
un excellent moyen d'en apprendre sur l'authentification par clé publique SSH. Vous
verrez ensuite comment ouvrir un port réseau pour que les clients accèdent à votre site
Web sur Internet. Une vue d'ensemble de haut niveau de cet environnement de base
est illustrée à la figure 2.1.
Tester
Voici quelques points à prendre en compte lors de la planification des applications dans
Azure. Ces décisions semblent élémentaires et la plupart du temps, elles sont prises
automatiquement, sans nécessiter beaucoup de réflexion. Il est néanmoins important
de comprendre les besoins de votre application avant de commencer à la créer et
à l'exécuter !
¡ Dans quelles régions votre application doit-elle être exécutée ? Une région spécifique
compte-t-elle de nombreux utilisateurs ? Comment garantir la redondance ?
Si vous créez des applications internes, exécutez-les dans la région Azure la
plus proche de vos utilisateurs. Si vous avez un bureau important à Houston, au
Texas, par exemple (peut-être aimez-vous les fusées !), exécutez vos applications
et machines virtuelles Azure dans le Centre-Sud des États-Unis.
Si vous créez des applications externes, pensez-vous que des clients appartenant
à des régions spécifiques les utiliseront ? Cette configuration peut nécessiter le
déploiement de plusieurs instances dans différentes régions (et la fourniture d'une
haute disponibilité). Nous procéderons à cette configuration au chapitre 12.
¡ Avez-vous besoin de nombreuses personnalisations de machines virtuelles ?
Combien de temps le test et la validation de tous ces changements nécessitent-ils ?
À quels services incombent-ils ?
Dans un environnement traditionnel sur site, un temps considérable est
souvent consacré à la création d’images préconfigurées pour les déploiements.
Essayez de minimiser ce temps dans le Cloud. Les images préintégrées Azure
incluent les dernières mises à jour de sécurité. Elles sont testées pour vous, puis
géo-répliquées pour garantir les délais de déploiement les plus rapides.
Notions de base de la configuration d'une machine virtuelle 17
Si vous créez vos propres images, utilisez des fonctions comme Azure
Shared Image Gallery pour distribuer et répliquer ces images selon les besoins
(https://docs.microsoft.com/azure/virtual-machines/windows/
shared-image-galleries).
machines virtuelles une fois qu'elles sont opérationnelles, même si elles doivent être
arrêtées et redémarrées pour effectuer le processus.
sont également cryptés automatiquement au repos : vous n'avez rien à configurer pour
sécuriser vos données ! Encore une fois, nous étudierons ce juste plus en détail au
chapitre 4. Pour l’instant, vous pouvez généralement laisser Azure créer le disque le
plus approprié en fonction de la taille de machine virtuelle sélectionnée.
Tester
Pour vérifier vos connaissances, réfléchissez aux questions suivantes :
¡ Pour la plupart des charges de travail de production, quel type de disque offre-t-il
les meilleurs perfo rmances ?
Un disque SSD Premium est généralement celui que vous devez exécuter pour
les charges de travail de production. Ce Type de disque est souvent choisi par
défaut lorsque vous créez une machine virtuelle. Les disques SSD standard con-
stituent un deuxième choix correct, et les Ultra SSD ne doivent être utilisés que
sur des applications très gourmandes en disques qui nécessitent une faible
latence. Bien que les disques HDD standard soient un peu moins onéreux, leurs
performances sont souvent excellentes, tout comme dans les environnements vir-
tuels sur site.
¡ Quelle famille de machines virtuelles est-elle appropriée pour un serveur de base
de données ?
Une machine virtuelle à mémoire optimisée constitue une bonne option, car
les bases de données nécessitent souvent une plus grande quantité de mémoire
que les ressources processeurs. Veillez toujours à estimer les besoins en ressources
et à surveiller les performances après le déploiement. N’hésitez pas à modifier la
taille de la machine virtuelle pour obtenir les performances souhaitées.
Tester
Créons une paire de clés publiques SSH à l'aide d'Azure Cloud Shell :
Création d’une paire de clés SSH pour l’authentification 21
Figure 2.2 Sélectionnez et lancez Cloud Shell sur le portail Azure en sélectionnant l'icône Shell.
2 La première fois que vous ouvrez Cloud Shell, la création d'un système de stock-
age persistant qui sera toujours connecté à vos sessions prend quelques instants.
Ce stockage vous permet de sauvegarder et de récupérer des scripts, des fichiers
de configuration et des paires de clés SSH. Acceptez toutes les invites pour per-
mettre la création de cette solution de stockage.
3 Si nécessaire, choisissez Bash dans le menu déroulant situé dans le coin supérieur
gauche de Cloud Shell. La prise en charge de PowerShell est également dis-
ponible, bien que ce ouvrage porte principalement sur Bash et CLI Azure.
4 Pour créer une paire de clés, saisissez la commande suivante :
ssh-keygen
5 Acceptez les invites par défaut en appuyant sur la touche Entrée. En quelques
secondes, vous disposez de deux clés publiques SSH que vous pouvez utiliser
avec toutes vos machines virtuelles ! La commande ssh-keygen est par défaut
une clé de longueur de 2 048 bits et utilise le protocole RSA version 2. Il s'agit
d'un bon équilibre en termes de sécurité et c'est le type recommandé pour la
plupart des cas d'utilisation. La figure 2.3 présente un exemple d'une paire de
clés SSH définie dans Cloud Shell.
Figure 2.3 Une paire de clés SSH créée dans Azure Cloud Shell à l'aide de la commande ssh-keygen
22 Chapitre 2 Création d'une machine virtuelle
6 Pour afficher votre clé publique et l'utiliser avec une machine virtuelle, saisissez
la commande suivante :
cat .ssh/id_rsa.pub
Tester
La création d’une machine virtuelle dans Azure vous donne beaucoup de valeurs par
défaut que vous pouvez utiliser pour réduire le nombre de choix à effectuer. Pour cet
exercice, examinez les ressources créées par Azure en fonction de ce que vous avez
appris dans la section 2.2, notamment pour le réseau et le stockage :
(suite)
Un hôte bastion ou une boîte de saut sont couramment utilisés pour fournir un accès
à distance. Dans ce type de configuration, vous ne vous connectez pas directement aux
serveurs d’application à partir de votre ordinateur portable ou du bureau. Au lieu de cela,
vous vous connecter à un hôte bastion dédié, puis vous vous connectez au serveur que
vous devez gérer. Cette approche bloque l’accès à un ensemble limité d’adresses et
garantit une gestion à distance en toute sécurité.
Azure Bastion (https://docs.microsoft.com/azure/bastion) fournit une approche gérée
qui répond à ce besoin de connexion à distance sécurisée. Vous créez un hôte Azure
Bastion dans un sous-réseau dédié, puis vous utilisez cet hôte pour vous connecter aux
machines virtuelles qui exécutent vos applications. Ces machines virtuelles n’ont pas
besoin d’être accessibles au public. Vous pouvez tout faire via le portail Azure sans ouvrir
de ports réseau pour SSH ou RDP. L'hôte bastion lui-même est géré pour vous en termes
de mises à jour de sécurité et de règles appliquées aux groupes de sécurité réseau.
Tester
Si Linux est nouveau pour vous, ne vous inquiétez pas ! Suivez les étapes ci-après pour
vous connecter à votre machine virtuelle :
Figure 2.4 Sélectionnez votre machine virtuelle sur le portail Azure, puis sélectionnez Se connecter pour générer
les informations de connexion SSH.
Avec une machine virtuelle Linux, la commande SSH qui comprend votre nom
d'utilisateur et l'adresse IP publique est affichée. Copiez cette commande de
connexion SSH, telle que ssh azuremol@104.209.208.158.
Sur une machine virtuelle Windows, le bouton Connecter permet de
télécharger un fichier de connexion RDP sur votre ordinateur, pré-rempli avec
l'adresse IP publique de votre machine virtuelle.
2 Au besoin, ouvrez à nouveau Cloud Shell. Si vous êtes amené à basculer entre
Cloud Shell et le portail, vous pouvez réduire la fenêtre Cloud Shell pour la
garder disponible en arrière-plan.
3 Collez la commande SSH dans Cloud Shell, puis appuyez sur Entrée. La clé SSH
que vous avez créée précédemment est automatiquement utilisée dans le cadre
de l'authentification.
La première fois que vous vous connectez à une machine virtuelle avec une clé
SSH, il vous est demandé de l'ajouter à une liste d'hôtes approuvés. Il s'agit d'une
autre couche de sécurité qu'apporte la technologie SSH. Si quelqu'un tente
d'intercepter le trafic et de vous diriger vers une autre machine virtuelle distante,
votre client SSH local sait que quelque chose a changé et vous avertit avant que
vous vous connectiez.
Acceptez l'invite pour enregistrer la connexion à la machine virtuelle distante.
La figure 2.5 montre le processus de connexion SSH dans Azure Cloud Shell.
26 Chapitre 2 Création d'une machine virtuelle
Figure 2.5 Utilisez la chaîne de connexion affichée sur le portail Azure pour créer une connexion SSH
à votre machine virtuelle à partir de Cloud Shell.
À ce stade, soit vous voilà désormais chez vous mais à distance, soit l'invite Linux vous
est totalement étrangère. Ne vous inquiétez pas. Vous n'avez pas besoin de connaître
un grand nombre de commandes Linux, et chaque commande sera expliquée au fur
et à mesure que nous progresserons. Cela dit, je vous recommande fortement
d'acquérir au moins quelques compétences de base de l'administration Linux. Une
grande partie du cloud est basé sur les systèmes Linux, et il existe une forte tendance
en faveur des conteneurs et des micro-services à des fins de développement et de
gestion d'applications. Si vous êtes un administrateur Windows de la vieille école,
bienvenue ! Une surprise vous attend à la fin du chapitre, alors soyez patient.
Tester
Depuis votre session SSH sur la machine virtuelle, installez les packages du serveur
Web grâce à l'APT :
1 Dans Ubuntu, vous installez des packages avec un outil de paquetage avancé
(APT, Advanced Packing Tool) : il s'agit d'un outil super-puissant de gestion des
packages, qui installe automatiquement tous les packages supplémentaires
requis. Tout ce que vous avez à faire, c'est de lui demander d'installer un serveur
Web, et APT se charge d'installer tous les composants nécessaires.
Pour les besoins de cet exemple, installez la pile Web LAMP. C'est probablement
l'ensemble le plus répandu de composants Web : Linux, Apache (serveur Web),
MySQL (serveur de base de données) et PHP (langage de programmation Web) :
sudo apt update && sudo apt install -y lamp-server^
La première commande met à jour les packages disponibles, ce qui est une bonne
pratique pour vous assurer que vous pouvez installer les packages les plus récents
et les meilleurs. Une fois cette commande effectuée, exécutez la commande
suivante avec &&. Pourquoi ne pas tout simplement commencer par écrire une
nouvelle ligne pour la commande suivante ? L'instruction && n'exécute la
commande suivante que si la commande précédente a abouti. Par exemple, en
l'absence de connectivité réseau nécessaire à apt pour récupérer les
derniers packages (moquez-vous de moi, je sais très bien que vous devez disposer
d'une connectivité réseau pour vous connecter en premier lieu !), alors il n'y a
aucun intérêt à exécuter la commande install.
Si la commande update est fructueuse, la commande apt détermine ensuite les
packages supplémentaires qu'il lui faut et commence à installer lamp-server.
Pourquoi un symbole caret est-il présent à la fin (^) ? Ce symbole indique à la
commande apt d'installer l'ensemble des packages qui constituent le serveur LAMP,
et pas uniquement un seul package nommé lamp-server.
2 Le programme d'installation peut vous demander un mot de passe, ou utiliser
par défaut un mot de passe MySQL vide. Il n'est pas très sécurisé, et pour une
utilisation réelle en production, vous devez spécifier un mot de passe fort.
Au chapitre 15, nous monterons en puissance et stockerons un mot de passe fort
et sécurisé dans Azure Key Vault, qui est automatiquement injecté dans
cet Assistant d'installation MySQL.
Cela prend une minute environ pour installer tous les packages de votre pile
Web LAMP. C'est ensuite terminé.
3 Tapez exit pour vous déconnecter de votre machine virtuelle et revenir à l'invite
Cloud Shell.
Très bien ! Votre serveur Web est opérationnel et en cours d'exécution, mais pour l'in-
stant, vous n'êtes pas encore en mesure d'y accéder à partir d'un navigateur Web. Pour
ce faire, vous devez autoriser le trafic Web à atteindre la machine virtuelle.
28 Chapitre 2 Création d'une machine virtuelle
Tester
Ouvrez Azure Cloud Shell et suivez ces étapes pour voir CLI Azure en action :
1 Si vous avez fermé votre fenêtre Cloud Shell, rouvrez-la à partir du portail Azure.
Assurez-vous que le shell Bash se charge, mais pas PowerShell. Si nécessaire,
passez à la version Bash.
2 Pour voir CLI Azure et les modules installés, tapez az --version. Une liste de
modules et de numéros de version est affichée. Ce qui est génial dans Cloud
Shell, c'est qu'il possède toujours la version la plus récente et la meilleure.
REMARQUE Si vous êtes attentif, vous avez peut-être constaté que la commande
génère des informations sur la version de Python. Pourquoi cette information est-
elle importante ? Python est un langage de programmation puissant et populaire.
L'interface CLI Azure est écrite en Python, ce qui la rend multiplateforme et
disponible en vue d'une installation locale sur n'importe quel ordinateur si vous ne
voulez pas toujours utiliser Cloud Shell. Pour préserver la volonté de Microsoft de
contribuer à la communauté open source, l'interface CLI Azure est mise
à disposition sur GitHub pour que quiconque puisse apporter des contributions,
des suggestions ou signaler des problèmes (https://github.com/Azure/azure-cli).
3 Pour ouvrir un port, vous spécifiez le nom de la machine virtuelle et son groupe de
ressources, ainsi que le numéro de port. Dans le cas du trafic Web, vous devez ouvrir
le port 80. Saisissez le groupe de ressources (-g) et le nom de machine virtuelle (-n)
que vous avez spécifiés lorsque vous avez créé votre machine virtuelle :
az vm open-port -g azuremolchapter2 -n webvm --port 80
1 Sur le portail Azure, sélectionnez votre machine virtuelle si vous avez navigué
hors de celle-ci. L'adresse IP publique est répertoriée dans le coin supérieur
droit de la page de présentation de la machine virtuelle.
2 Sélectionnez l'adresse et copiez-la.
3 Dans votre navigateur Web, ouvrez un nouvel onglet ou une nouvelle fenêtre,
puis collez-y l'adresse IP publique. Le site Web d'Apache par défaut se charge,
comme illustré à la figure 2.6. Bon c'est vrai, il ne ressemble pas à une pizzeria,
mais les bases sont prêtes sur lesquelles vous pouvez générer votre code et à
commencer à développer votre application !
Figure 2.6 Pour observer votre serveur Web en action et afficher la page par défaut d'Apache 2,
saisissez l'adresse IP publique dans un navigateur Web.
¡ Dans Server Manager, recherchez une option Ajouter des rôles et des
fonctionnalités.
¡ Il vous faut installer le serveur Web (IIS).
¡ N’oubliez pas d’ouvrir un port réseau pour le trafic HTTP sur le port TCP 80.
Vous pouvez utiliser le portail si vous le souhaitez.
Figure 2.7 Pour réduire les coûts, supprimez les groupes de ressources dont vous n'avez plus besoin.
Si vous avez l'habitude de supprimer des ressources une fois que vous en avez terminé
avec elles, vous pouvez sans problème procéder ainsi dans le cadre de la lecture de ce
livre concernant les crédits Azure gratuits. Vous pouvez tout au moins annuler l'assig-
nation de votre machine virtuelle à la fin de chaque leçon, puis la relancer le lende-
main afin de contrôler le compteur de la facturation.
Houston, nous avons un problème 31
Les problèmes les plus courants avec les machines virtuelles se produisent lorsque vous
vous y connectez. Vous avez peut-être tenté de vous connecter en vue d'une
administration à distance avec SSH ou RDP, ou vous avez tenté d'accéder à vos
applications via un navigateur Web ou un client de bureau. Ces problèmes sont souvent
liés au réseau. Je ne veux pas non plus totalement incriminer les responsables de
réseau (du moins jusqu'au chapitre 5). Voici donc deux points rapides à vérifier :
32 Chapitre 2 Création d'une machine virtuelle
3
Au chapitre 2, vous avez créé une machine virtuelle et installé manuellement des
packages afin d'exécuter un serveur Web de base. Une petite faim ? Avec cette machine
virtuelle, vous pourriez créer une pizzéria en ligne. Les machines virtuelles Azure sont
principalement utilisées pour l'exécution d'applications Web, généralement à grande
échelle. Les applications Web représentent une charge de travail confortable pour les
machines virtuelles. Confortable certes, mais seulement si vous appréciez également la
maintenance qui accompagne la gestion de toutes ces machines virtuelles. Vous savez,
toutes ces choses passionnantes telles que les mises à jour logicielles, les correctifs de
sécurité, la journalisation centralisée et les rapports de conformité. Et si vous pouviez
disposer de la puissance d'un serveur Web sécurisé pour exécuter vos applications Web,
y compris la possibilité de faire évoluer automatiquement votre configuration au gré de
la demande, sans avoir besoin de vous soucier de la création et de la gestion de toutes
ces machines virtuelles ? Permettez-moi de vous présenter le service Azure Web Apps.
Dans ce chapitre, nous allons comparer l'approche IaaS (Infrastructure en tant
que service) des machines virtuelles et des serveurs Web avec l'approche PaaS
(Plateforme en tant que service). Vous découvrirez les avantages d'Azure Web Apps à
mesure que vous créerez une application Web, et verrez comment travailler avec
ses versions de production et de développement. Vous apprendrez ensuite à déployer
automatiquement votre application Web depuis un contrôle de code source tel que
GitHub. Cette charge de travail est illustrée à la figure 3.1. Azure Web Apps vous
permet de déployer et de lancer votre pizzeria en ligne
Figure 3.1 Dans ce chapitre, vous allez apprendre à créer un plan de service d'application et une
application Web de base, puis à déployer un site Web à partir de GitHub.
33
34 Chapitre 3 Azure Web Apps
Web Apps demeure également à jour concernant les correctifs de sécurité. Mais ne vous
attendez pas à ce qu'une ancienne version de PHP ou de Python continue d'être prise en
charge éternellement. À un moment donné, les versions les plus anciennes ne seront
plus prises en charge. Encore une fois, il s'agit d'un cas où vous pourriez revenir à
l'utilisation d'une machine virtuelle IaaS, si votre application nécessite une ancienne
version d'un langage. Mais si vous avez besoin d'exécuter une ancienne version d'un
langage spécifique afin de prendre en charge une application héritée, ne tombez pas
dans le travers d'adopter une approche de maintenance constante. Cherchez toujours à
déplacer ces applications héritées vers des plateformes prises en charge plus modernes.
Lorsque vous devez créer une ressource App Service, telle qu'une application Web,
vous créez ou utilisez un plan de service existant. Le plan de service détermine la
quantité de ressources à votre disposition, dans quelle mesure l'automatisation est
disponible pour dimensionner et sauvegarder votre application Web et à quel point
rendre votre site hautement disponible avec des emplacements intermédiaires et
Traffic Manager (un moyen d’acheminer géographiquement le trafic vers l’instance la
plus proche d'un utilisateur, sujet que nous examinerons au chapitre 11). Comme pour
tout, vous en avez pour votre argent. Votre application et les besoins de votre entreprise
doivent déterminer la quantité de ressources requises et les fonctionnalités
supplémentaires nécessaires. Chaque niveau de service inclut les fonctionnalités des
niveaux inférieurs, avec généralement des ressources disponibles supplémentaires et
une capacité de stockage plus importante.
Les quatre niveaux principaux du plan de service sont les suivants :
¡ Gratuit/partagé : utilise une infrastructure partagée, offre un stockage minimal et ne
bénéficie d'aucune option permettant de déployer différentes versions d'essai,
d'effectuer le routage du trafic ou des sauvegardes. Le niveau Partagé vous permet
d'utiliser un nom de domaine personnalisé et entraîne donc des frais pour ce domaine.
¡ De base : fournit des ressources de calcul dédiées pour votre application Web et
vous permet d'utiliser SSL et de dimensionner manuellement le nombre
d'instances d'application Web que vous exécutez. Les niveaux gratuits/partagés
et de base offrent un bon environnement pour tester le service Web Apps.
Toutefois, je vous déconseille d’y exécuter des charges de travail de production
ou de développement réelles. Les performances ne sont pas un facteur limitant,
mais certaines des fonctions automatisées, telles que les sauvegardes et la mise à
l’échelle, ne seront pas prises en charge.
¡ Standard : inclut des sauvegardes quotidiennes, un dimensionnement
automatique des instances d'application Web ainsi que des emplacements de
déploiement, et vous permet de router les utilisateurs avec Traffic Manager. Ce
niveau peut être adapté aux applications à faible demande ou aux environnements
de développement dans lesquels vous n’avez pas besoin d’un grand nombre de
sauvegardes ou d’emplacements de déploiement.
¡ Premium : fournit des sauvegardes plus fréquentes, une capacité de stockage
accrue et un plus grand nombre d'emplacements de déploiement et d'options de
dimensionnement d'instances. Ce niveau est idéal pour la plupart des charges de
travail de production.
La question de l'isolation
Avec des solutions PaaS telles que Web Apps, l'infrastructure est volontairement
réduite. Comme le laissent entendre les noms de certains niveaux de plan de service,
les applications Web sont exécutées simultanément sur une plateforme partagée de
ressources disponibles. Cela ne signifie pas que les applications Web ne sont pas
sécurisées et que des tierces personnes peuvent consulter vos données
personnelles ! Cependant, pour des raisons réglementaires ou de conformité, vous
pouvez être amené à exécuter vos applications dans un environnement isolé et
contrôlé. Découvrez les environnements App Service : des environnements isolés qui
vous permettent d'exécuter des instances App Service comme des applications Web,
dans une partie séparée d'un datacenter Azure. Vous contrôlez le trafic réseau
entrant et sortant et vous pouvez mettre en place des pare-feu et créer des
connexions réseau privées (VPN) sur vos ressources sur site.
Tous ces composants d'infrastructure sont déjà amplement intégrés avec les
environnements App Service, mais cette approche fournit un excellent équilibre
lorsque vous souhaitez bénéficier de la flexibilité des solutions PaaS tout en
conservant des contrôles précis sur le trafic des connexions réseau.
Création d'une application Web 37
Vous pouvez déjà accomplir beaucoup de choses avec les niveaux Gratuit et De base,
bien que pour les charges de travail de production, les niveaux Standard ou Premium
se révéleront certainement plus appropriés. L'exemple de ce chapitre utilise le niveau
Standard, afin que vous puissiez découvrir toutes les fonctionnalités disponibles.
Lorsque vous utilisez Web Apps avec vos propres applications, vous pouvez définir le
nombre de fonctionnalités dont vous avez besoin et pouvez, en conséquence,
sélectionner le niveau de plan de service le plus approprié.
Tester
Pour créer votre application Web, procédez comme suit :
Votre service d'application est créé en quelques secondes. Lorsque vous êtes prêt,
accédez à App Services et sélectionnez-la dans la barre de navigation, à gauche de
l’écran. Choisissez ensuite votre application Web dans la liste. Dans la fenêtre Vue
d'ensemble de votre application Web, affichez et sélectionnez l'URL de l'application,
telle que https://azuremol.azurewebsites.net.
Lorsque vous sélectionnez l'URL de votre application Web, un nouvel onglet ou une
nouvelle fenêtre s'ouvre dans votre navigateur. La page par défaut de l'application se
charge, comme illustré à la figure 3.3. Toujours aucune trace de pizza. . . .
Figure 3.3 Pour voir la page par défaut de l'application Web en action, accédez à l'URL de votre site via
un navigateur Web.
Création d'une application Web 39
Copie des
Exemples de Créer une fichiers dans
git clone git push
fichiers HTML copie locale l’applicaon
dans GitHub. des fichiers. Web Azure.
Figure 3.4 Vous créez une copie locale des fichiers d'exemple à partir de GitHub avec la commande git
clone. Pour transférer par push ces fichiers locaux sur votre application Web Azure, utilisez git push.
Tester
Pour obtenir une copie de l'exemple de page HTML depuis GitHub et la transférer par
push vers votre application Web, procédez comme suit :
1 Ouvrez Cloud Shell dans le portail Azure, puis attendez quelques secondes que
votre session se connecte. Pour commencer, vous devez obtenir l'exemple de
site HTML de GitHub.
Pour clonerou copier l'exemple de site HTML de GitHub, entrez la commande
suivante :
git clone https://github.com/fouldsy/azure-mol-samples-2nd-ed.git
Si vous utilisez Git dans Cloud Shell pour la première fois, vous devez définir
certains paramètres pour permettre à Git de comprendre qui vous êtes. Pour la
plupart des exercices dans ce livre, Git ne s'intéresse pas vraiment à votre identité ;
mais pour une utilisation avec vos propres projets et applications, c'est une
excellente façon de suivre qui effectue certaines actions dans un système de
contrôle de code source. Vous n'avez besoin de définir ces paramètres qu'une
seule fois. Entrez votre propre adresse e-mail et votre nom complet dans git
config comme suit :
40 Chapitre 3 Azure Web Apps
3 Pour être prêt à télécharger les exemples de page HTML, vous devez initialiser
Git, puis ajouter et valider vos fichiers. À ce stade, ne vous souciez pas trop des
commandes Git ! Vous devez indiquer à Git quels fichiers suivre et ajouter, et
trouver un moyen de suivre ces changements plus tard si nécessaire :
git init && git add . && git commit -m "Pizza"
4 Vous pouvez maintenant vous préparer à transférer par push cet exemple de
site HTML vers votre application Web. Tout d’abord, définissez les informations
d’identification de déploiement. Pour sécuriser Web Apps lorsque vous utilisez
une méthode de déploiement comme Git ou FTP, vous devez fournir un nom
d’utilisateur et un mot de passe. Web Apps peut utiliser un ensemble
d’informations d’identification valides à travers tous les plans de service
d’application dans Azure ou des informations d’identification au niveau de
l’application qui s’appliquent uniquement à une seule application.
Dans le monde réel, je vous recommande d’utiliser des informations
d’identification au niveau de l’application pour minimiser l'ampleur d’une
attaque si l’une des informations d’identification est compromise. Azure génère
automatiquement les informations d’identification au niveau de l’application,
mais vous devez récupérer et attribuer ces informations d’identification à chaque
fois. Pour simplifier les choses, utilisez des informations d'identification
définies que vous pourrez réutiliser dans les prochains chapitres.
Créez les informations d'identification de déploiement et indiquez votre propre
nom d'utilisateur et un mot de passe sécurisé. Le nom d'utilisateur doit être unique
au monde. Si cela peut vous aider, ajoutez vos initiales au nom d’utilisateur ou à une
convention de nommage qui correspond à votre environnement.
az webapp deployment user set --user-name azuremol --password @azurem0l!
5 Vous devez ensuite obtenir l’URL du référentiel Git de votre application Web.
Saisissez le nom de l’application Web (pas le nom d’utilisateur que vous avez créé
à l’étape 4) et le groupe de ressources que vous avez spécifié lors de la création
de l’application Web pour afficher l’URL du référentiel Git.
6 Votre application Web est configurée pour fonctionner avec les référentiels Git,
vous devez donc indiquer le référentiel au Cloud Shell. Dans Git, vous définissez
ces emplacements comme distants.
Copiez l'URL de votre clone Git créée à l'étape 5, puis définissez cette URL
comme destination pour l'exemple de site HTML dans Cloud Shell à l'aide de la
commande suivante :
git remote add azure your-git-clone-url
7 Pour télécharger ou copier des fichiers avec Git, vous devez les transférer par
push. Où Git fait-il un push de ces fichiers ? Dans un référentiel distant comme celui
que vous avez configuré à l'étape 6, comme Azure. La dernière partie de
la commande est une branche, généralement maître. Dans Git, une branche est
ce qui permet de suivre les différents modèles de travail en cours. Une bonne
pratique dans les environnements de production est de faire un push pour
libérer des branches que vous pouvez nommer comme vous le souhaitez, par
exemple dev ou staging. Ces branches supplémentaires permettent à votre code
de production d'être exécuté normalement ; vous pouvez ensuite travailler sur
de nouvelles fonctionnalités ou mises à jour en toute sécurité et sans impacter les
charges de travail réelles utilisées par vos clients.
Transférez par push l'exemple de site HTML vers votre application Web :
git push azure master
8 Lorsque vous y êtes invité, saisissez le mot de passe que vous avez créé pour les
informations d'identification de déploiement. Vous pouvez copier et coller le
mot de passe pour minimiser les erreurs.
Vous pouvez voir à partir du résultat que la page par défaut existante du site Web est
supprimée et que l'exemple de site HTML est téléchargé, configuré et prêt à être
exécuté. Voici quelques exemples de résultat :
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 510 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Updating branch 'master'. remote: Updating submodules.
remote: Preparing deployment for commit id 'dda01e9d86'.
remote: Generating deployment script.
remote: Generating deployment script for Web Site
remote: Running deployment command...
remote: Handling Basic Web Site deployment.
remote: Creating app_offline.htm
remote: KuduSync.NET from: 'D:\home\site\repository' to:
'D:\home\site\wwwroot'
remote: Deleting file: 'hostingstart.html'
remote: Copying file: 'index.html'
remote: Deleting app_offline.htm
remote: Finished successfully.
remote: Running post deployment command(s)...
remote: Deployment successful.
To https://azuremolikf@azuremol.scm.azurewebsites.net/azuremol.git
* [new branch] master -> master
42 Chapitre 3 Azure Web Apps
Pour voir le résultat de votre application Web mise à jour, actualisez votre site dans un
navigateur Web ou ouvrez-le de nouveau à partir de la fenêtre Vue d'ensemble, dans le
portail Azure. Celui-ci devrait ressembler au magnifique exemple de la figure 3.5. En
effet, le site est très rudimentaire, mais que ce soit pour déployer le plus basique des
sites HTML statiques ou une application Web Node.js ou .NET complexe, la charge de
travail reste la même !
Figure 3.5 Actualisez
votre navigateur Web
pour constater que
la page par défaut
de l'application Web
a été remplacée par
le site HTML statique
de base de GitHub.
Événements
d’application diffusés
dans les journaux Journaux
d’application
Journaux Accès via
Application collectés en
temps réel pour FTP ou flux
Web Azure examen en direct
Événements de s
Journaux de
erveur diffusés serveur Web
dans les journaux
Figure 3.6 Votre application peut générer des journaux d'applications et des journaux de serveur. Pour
vous aider à examiner ou résoudre des problèmes, vous pouvez télécharger ces journaux via FTP ou les
consulter en temps réel.
Affichage des journaux de diagnostic 43
Tester
Pour configurer votre application Web pour les journaux de diagnostic, procédez comme suit :
1 Dans le portail Azure, sélectionnez l'application Web que vous avez créée dans
l'exercice précédent.
2 Faites défiler la fenêtre Vue d'ensemble jusqu'à la section Surveillance et
sélectionnez Journaux App Service.
3 Examinez les options de journal disponibles, telles que le niveau de détail et si
vous souhaitez activer ou non le suivi des demandes ayant échoué. Si vous traitez
avec la partie infrastructure d'Azure, vous devrez peut-être collaborer avec vos
développeurs d'applications afin de déterminer les journaux dont ils ont besoin
pour aider à résoudre les problèmes. Vous pouvez ensuite activer ici la
journalisation appropriée. Les journaux peuvent être stockés dans le système de
fichiers local de l’application Web ou transférés par push vers le Stockage Azu
pour être traités avec une autre application.
4 Pour l’instant, activez la journalisation de l’application (système de fichiers).
Activez également la journalisation du serveur Web vers le système de fichiers
avec une période de rétention de sept jours. Le niveau d’erreur par défaut est
susceptible de ne rien montrer si tout fonctionne correctement. Attention
toutefois lors de l'activation du Débogage ou du suivi, car vos journaux peuvent
se remplir rapidement et il est difficile de se recompte de la situation ! Si vous
rencontrez un problème, augmentez graduellement le niveau du journal jusqu’à
ce que vous capturiez suffisamment d’informations pour résoudre les problèmes
sans être submergé par les données du journal.
Si vous souhaitez explorer en détail les données, vous pouvez accéder aux journaux
stockés sur le système de fichiers à l’aide de FTP. Les adresses FTP sont affichées dans
la section Télécharger les journaux ou dans la fenêtre Vue d’ensemble de l’application
Web. Peut-être que vous vous dites : « Le FTP est un moyen compliqué d'obtenir des
journaux de diagnostic. N'existe-t-il pas une méthode plus simple ? » Eh bien, figurez-
vous que si ! Vous pouvez trouver une option Flux de journaux dans le portail Azure, à
l'endroit précis où vous avez configuré vos journaux de diagnostic. Pouvez-vous
deviner son utilité ? Laissez-moi vous donner un indice : cela a quelque chose à voir
avec le flux de vos fichiers journaux.
Si vous sélectionnez ce bouton dans le portail Azure, vous pouvez choisir entre les
Journaux d'applications et les Journaux de serveur Web. Ces journaux accèdent en
lecture à partir des mêmes journaux de diagnostic qui sont écrits dans le fichier.
L'affichage des données dans le flux peut nécessiter quelques minutes, et ce qui est
affiché varie selon les niveaux de journalisation que vous définissez et si votre
application Web génère des événements d'application. Pour le site HTML de base, le
flux est plutôt ennuyeux, mais c'est une fonctionnalité intéressante à utiliser dans votre
navigateur Web. La figure 3.7 illustre un exemple de flux des journaux de serveur Web
dans le portail Azure.
44 Chapitre 3 Azure Web Apps
Tester
Affichez le flux des fichiers journaux dans le portail Azure. Vous devrez peut-être
actualiser plusieurs fois la page dans votre navigateur Web pour générer de l'activité
dans les journaux.
Figure 3.7 Vous pouvez consulter les flux de journaux dynamiques du serveur Web Web Apps depuis
votre application afin de faciliter la vérification et le débogage des performances des applications. La
console située sur la partie droite de l'écran présente le flux de journaux en temps réel depuis votre
application Web.
Une fois que vous serez habitué à Azure et à l'utilisation des modules CLI Azure ou
Azure PowerShell, vous pourrez exploiter ces outils pour diffuser des journaux. Les
développeurs peuvent aussi activer le débogage distant avec Visual Studio, ou
configurer Application Insights pour autoriser une application Web à fournir des
mesures de télémétrie à des services supplémentaires, à des fins de surveillance et de
diagnostic. Le point important à retenir est que lorsque vous évoluez vers des
solutions PaaS, comme les applications Web, vous pouvez toujours obtenir des
journaux de diagnostic et des données d’application afin de résoudre les problèmes
et de surveiller les performances de votre application Web.
7 Créez un lien vers le nouveau référentiel Git dans votre emplacement de test
avec git remote add dev, suivi de l'URL de déploiement Git de votre
emplacement de test.
8 Utilisez la commande git push dev master pour transférer par push vos
modifications vers l'emplacement de déploiement.
9 Sélectionnez l'URL de votre emplacement de test à partir de la fenêtre Vue
d'ensemble du portail Azure. Même s'il ne s'agit pas d'un changement
important, le titre de la page indique qu'il s'agit de version de
développement.
10 Dans le portail Azure pour l’application
Web, que se passe-t-il si vous
sélectionnez le bouton Échanger, comme
illustré à la figure 3.8 ? Sélectionnez-le,
puis actualisez la page principale, par
exemple https://azure- mol.azurewebsites.
net, dans votre navigateur Web.
47
48 Chapitre 4 Présentation deStockage Azure
¡ Les machines virtuelles des séries D2S_v3, Fs, GS, et Ls peuvent accéder aux
disques SSD Premium.
¡ Les machines virtuelles des séries D, A, F et M ne peuvent accéder qu’aux disques
SSD ou HDD standard.
Même si vous sélectionnez une taille de machine virtuelle qui peut utiliser des disques
SSD Premium, il n’y a aucune obligation de le faire. Vous pouvez créer et utiliser des
disques SSD ou HDD standard. En choisissant des disques SSD Premium, vous
pérennisez l’application et vous vous donnez la possibilité d’utiliser des disques SSD
haute performance en cas de besoin, sans avoir à redimensionner vos machines
virtuelles ni à subir un peu de temps d’arrêt dans le processus. Les disques SSD
standard sont utilisables dans toutes les tailles de machines virtuelles.
Tester
Comment savoir à quelles tailles de machines virtuelles vous avez accès ? Ouvrez
Cloud Shell dans le portail Azure. Entrez la commande suivante (n’hésitez pas à utiliser
votre propre région) :
az vm list-sizes --location eastus --output table
Rappelez-vous que toutes les tailles comprenant un s vous donnent accès à des disques
SSD Premium.
¡ Disques de données : tous les disques que vous créez et associez spécifiquement à la
machine virtuelle agissent comme prévu en termes de partitions, de systèmes de
fichiers et de points de montage persistants. Les disques de données sont réassociés
lorsque l’ordinateur virtuel est déplacé au sein du datacenter Azure. Ils sont donc
là où la majeure partie de vos applications et données doivent être stockées. Vous
avez toujours la possibilité d’utiliser des espaces de stockage ou un logiciel RAID
pour regrouper les disques de données au niveau de la machine virtuelle afin
d’accroître encore la performance.
Un type spécifique de disque de données pouvant être associé à une machine virtuelle
vous offre des performances maximales et une faible latence : les disques Ultra. Ces
disques sont encore plus performants que les disques SSD Premium et sont disponibles
uniquement pour les disques de données. Les disques Ultra sont conçus pour les
grandes bases de données et les charges de travail gourmandes en données, comme
SAP HANA. De quelle vitesse parlons-nous ? Au moment où ce document a été rédigé,
les disques Ultra présentent une taille maximale de 64 Tio de taille offrent jusqu’à
160 000 IOPS par disque avec un débit maximal de 2 000 Mbits/s.
4.1.3 Options de mise en cache du disque
Il importe également de prendre en considération le disque du système d’exploitation
associé à la machine virtuelle. Lorsque vous créez une machine virtuelle, vous obtenez
toujours au moins un disque : le disque où le système d’exploitation lui-même est
installé. Il est tentant d’utiliser ce disque pour y installer vos applications ou écrire des
fichiers journaux. À moins que ce soit pour un petit déploiement de proof-of-concept,
n’exécutez pas vos applications sur le disque du système d’exploitation ! Il y a de fortes
probabilités que vous n’obteniez pas la performance escomptée.
Les disques dans Azure peuvent avoir été définis avec une stratégie de mise en cache.
Par défaut, le paramètre de cache en lecture/écriture est activé sur les disques du système
d’exploitation. Ce type de mise en cache n’est généralement pas l’idéal pour les charges
de travail de l’application qui écrivent des fichiers journaux ou des bases de données,
par exemple. Les disques de données, en revanche, ont une stratégie de cache
paramétrée par défaut sur Aucun. Il s’agit d’une bonne stratégie pour les charges de
travail qui effectuent beaucoup d’écritures. Vous pouvez également appliquer une
stratégie de cache en lecture seule, mieux adaptée aux charges de travail de l’application
qui effectuent principalement de la lecture de données sur les disques.
De manière générale, associez et utilisez toujours des disques de données pour
installer et exécuter vos applications. Même la stratégie de cache paramétrée par défaut
sur Aucun offre probablement de meilleures performances que la stratégie de cache en
Lecture/Écriture du disque du système d’exploitation.
4.2 Ajout de disques à une machine virtuelle
Cette section explique comment ajouter des disques à une machine virtuelle à mesure
que vous la créez. Au chapitre 2, vous avez créé une machine virtuelle grâce au portail
Azure. Cette fois, nous allons utiliser la CLI Azure pour créer une machine virtuelle.
La CLI Azure fournit un moyen rapide de créer une machine virtuelle et d'associer un
disque de données en même temps.
Tester
Pour créer une machine virtuelle et voir les disques de données à l’œuvre, procédez
comme suit :
¡ Si vous êtes plus à l’aise avec Windows, utilisez la commande suivante pour créer
une machine virtuelle Windows Server 2019. Vous pouvez ensuite utiliser RDP
pour vous connecter à la machine virtuelle pour configurer les disques plus tard :
az vm create \
--resource-group azuremolchapter4 \
--name storagevm \
--image Win2019Datacenter \
--size Standard_B1ms \
--admin-username azuremol \
--admin-password P@ssw0rd! \
--data-disk-sizes-gb 64
¡ Cela prend quelques minutes pour créer une machine virtuelle. Celle-ci dis-
pose déjà d’un disque de données associé et prêt à l’emploi.
Que faire si vous voulez ajouter un autre disque de données au bout de quelques
semaines ou quelques mois ? Utilisez à nouveau la CLI Azure pour voir comment
ajouter rapidement un disque. Le processus est le même pour une machine virtuelle
Linux ou Windows. Tout ce que vous avez à faire c’est d’indiquer à Azure de créer un
nouveau disque et de l’associer à votre machine virtuelle.
Tester
Ajoutez un disque de données supplémentaire à votre machine virtuelle comme indiqué
ci-après.
Figure 4.1 Un compte Stockage Azure vous permet de créer et d’utiliser une grande variété de
fonctionnalités de stockage ; cela dépasse amplement la simple solution de stockage de fichiers.
¡ Stockage Blob : pour les données non structurées telles que les fichiers multimédias
et les documents. Dans un stockage Blob, les applications peuvent stocker des
données, telles que des images, puis les restituer. Vous pouvez stocker des images
de vos pizzas dans un stockage Blob.
¡ Stockage en table : pour les données non structurées dans une banque de données
NoSQL. Faut-il opter pour des banques de données SQL ou NoSQL ? C'est
l'éternel débat. Pour trancher, planifiez votre application et évaluez les exigences
de performances liées au traitement de grandes quantités de données. Vous
pouvez stocker la liste des pizzas de votre menu dans une table de stockage. La
section 4.3.1 explore NoSQL plus en détail.
Stockage Azure 53
¡ File d’attente de stockage : pour que les applications cloud communiquent entre
différents niveaux et composants de manière fiable et cohérente. Vous pouvez
créer, lire et supprimer des messages qui passent entre les composants de
l’application. Vous pouvez utiliser la file d’attente de stockage pour passer des
messages entre le Web front-end, quand un client passe une commande, et le
back-end, pour préparer et cuire les pizzas.
¡ Stockage de fichiers : pour un bon partage de fichiers SMB (Server Message Block) à
l’ancienne, accessible à la fois par les plateformes Windows et Linux/MacOS. Souvent
utilisé pour centraliser la collecte des journaux à partir des machines virtuelles.
La solution Stockage Azure pour les machines virtuelles est simple. Vous créez et
utilisez des disques gérés Azure, un type de disque dur virtuel (VHD) qui permet de
s'affranchir de nombreuses considérations de conception liées à la performance et à la
distribution des disques virtuels sur la plateforme. Vous créez une machine virtuelle,
y associez n’importe quels disques gérés de données et laissez la plateforme Azure
identifier la redondance et la disponibilité.
et les files d’attente. Dans ce chapitre, je ne veux pas vous entraîner trop
loin dans le monde des bases de données NoSQL : nous allons explorer en profondeur
quelques bases de données NoSQL intéressantes avec Azure Cosmos DB au chapitre 10.
En fait, dans l’exercice suivant, vous allez utiliser l’API Cosmos DB pour vous connecter à
Stockage Azure et créer une table. L’utilisation des tables Azure est plus une introduction
aux bases de données NoSQL qu’un exemple solide à des fins de production.
Pour l’instant, nous allons lancer un exemple d’application rapide pour voir comment
vous pouvez ajouter et interroger des données, exactement comme vous le feriez avec
une vraie application. Ces échantillons sont basiques, mais montrent comment vous
pouvez stocker les types de pizzas que vous vendez et le tarif de chaque pizza. Plutôt que
d’utiliser une solution imposante comme Microsoft SQL Server ou MySQL, nous allons
utiliser une base de données NoSQL avec le stockage en table Azure.
Tester
Pour afficher les tables Azure en cours d’exécution, procédez comme suit :
4 Installez quelques dépendances Python, si elles ne le sont pas déjà. Installez ici le
package azurerm, qui contrôle la communication vous permettant de créer et de
gérer des ressources Azure; ainsi que deux packages azure, qui sont les SDK
Python sous-jacents pour Azure CosmosDB et Stockage :
pip install --user azurerm azure-cosmosdb-table azure-storage-
➥queue==2.1.0
Que signifie --user lorsque vous installez les packages ? Si vous utilisez
Azure Cloud Shell, vous ne pouvez pas installer de packages dans le système prin-
cipal. Vous n’avez pas les permissions nécessaires. Au lieu de cela, les packages
sont installés dans l’environnement de l’utilisateur. Ces packages d’installation
sont conservés entre les sessions et vous permettent d’utiliser tous les SDK d’Azure
dans ces exemples.
5 Exécutez l’exemple d’application Python pour les tables. Suivez les invites pour
déguster des pizzas :
python storage_table_demo.py
également servir pour construire des applications complexes. Par exemple, la CLI Azure
que vous avez utilisée est écrite en Python.
J’utilise Python pour certains des exemples dans ce livre parce qu’ils doivent pou-
voir fonctionner à l’extérieur de Cloud Shell, sans être modifiés. Les distributions
macOS et Linux sont fournies avec Python. Les utilisateurs de Windows peuvent
télécharger et installer rapidement Python, puis exécuter ces scripts localement.
Python est idéal pour ceux qui ont peu ou pas d’expérience de programmation,
ainsi que pour les développeurs plus chevronnés dans d’autres langues. La documenta-
tion Azure pour Stockage Azure et de nombreux autres services fournit de l’aide pour de
nombreux langages, dont .NET, Java et Node.js. Lorsque vous construisez vos propres
applications utilisant des tables, vous n’êtes pas limité à Python.
L'ouvrage Quick Python, 3ème édition, de Naomi ceder (http://mng.bz/6QZA), peut
vous aider à rattraper votre retard si vous souhaitez en savoir plus. Il existe également
une formation vidéo intitulée Get Programming Python in Motion, réalisée par Ana Bell
(http://mng.bz/oPap).
Tester
Pour voir Azure Queues à l’œuvre, exécutez le script Python ci-dessous. Il est disponible
dans le même répertoire : azure-samples/4. Suivez les invites pour voir les messages
être écrits, lus et supprimés de la file d’attente :
python storage_queue_demo.py
Continuons à travailler sur l'application de gestion des commandes de pizza qui nous
sert d'exemple. Il se peut que vous ayez un composant d’application front-end avec
lequel les clients interagissent pour commander leurs pizzas, puis une file d’attente de
messages qui transmet des messages à un composant d’application back-end qui traite
ces commandes. Les messages de la file d’attente peuvent être visualisés au fur et à
mesure que les commandes sont reçues, comme illustré à la figure 4.2.
56 Chapitre 4 Présentation deStockage Azure
Figure 4.2 Les messages sont envoyés par le composant front-end de l’application. Ils indiquent la pizza
commandée par chaque client dans la propriété Message Text.
Les messages sont supprimés progressivement de la file d’attente, tandis que chaque
commande de pizza est traitée par le composant d’application back-end. La figure 4.3
montre à quoi ressemble la file d’attente une fois que vous avez une pizza végétarienne
au four et que le premier message est supprimé.
Figure 4.3 Dès qu’un message est traité, il est supprimé de la file d’attente. Le premier message illustré à la
figure 4.2 a été supprimé une fois qu’il a été traité par le composant d’application back-end.
58
Composants d'un réseau virtuel 59
La connectivité réseau est un aspect essentiel de la vie moderne. Chez Azure, le réseau
est au cœur de toute la communication. Pour les milliers de périphériques réseau
physiques et les kilomètres de câbles réseau qui servent à tout connecter dans un
datacenter Azure, vous travaillez avec des ressources de réseau virtuel. Comment ? Les
réseaux software-defined. Lorsque vous créez une machine virtuelle ou une
application Web, il n'est pas nécessaire qu'un technicien coure d'un bout à l'autre du
centre de données Azure pour connecter physiquement des câbles et affecter des
adresses IP (quoique la situation puisse être amusante !). Au lieu de cela, toutes les
ressources réseau qui définissent l'ensemble de votre environnement réseau sont gérées
en toute logique par la plateforme Azure. La figure 5.1 présente les différents composants
du réseau virtuel que vous allez créer au fur et à mesure que vous avancez dans ce chapitre.
Réseau virtuel
VM Web VM jump-box
Tester
La mise en réseau est souvent plus facile à visualiser une fois que vous l'avez vue
à l'œuvre. Vous allez utiliser le portail Azure pour démarrer, en réalisant finalement
plusieurs étapes distinctes. Vous découvrirez toutefois la puissance de la CLI Azure plus
loin dans le chapitre.
Ne vous inquiétez pas trop de l'utilisation de vos propres espaces d’adressage ou du nom
DNS personnalisé pour le moment. Procédez comme suit pour créer votre réseau
et sous-réseau virtuels :
Plages d'adresses IP
Les réseaux virtuels couvrent une certaine plage d'adresses IP : c'est ce que l'on appelle
un espace d'adressage. Si vous avez déjà vu une adresse IP, vous avez peut-être
remarqué le masque de sous-réseau, qui ressemble généralement à ça :
255.255.255.0. Ce masque de sous-réseau est souvent utilisé sous une forme abrégée
qui spécifie l'étendue de cette plage, par exemple /24.
Le portail Azure dispose d'un espace d'adressage par défaut de /24. Dans notre situation,
vous souhaitez augmenter le nombre de plages IP supplémentaires, sans avoir beaucoup
de connaissances réseau. Augmentez donc l'espace d'adressage à /16. Vous ne donnez
pas ce type d'adresse IP directement à une machine virtuelle.À l'étape suivante, vous
allez créer un sous-réseau qui couvre une section plus petite de cet espace d'adressage.
Si les espaces d'adressage réseau sont un concept totalement étranger pour vous, ne
vous inquiétez pas. Dans la plupart des cas, vous ne les rencontrerez pas au quotidien.
Une gouvernance Azure pertinente peut fonctionner de la même façon que dans votre
environnement informatique sur-site existant. Un groupe de personnes peut gérer les
réseaux virtuels Azure, et vous déposez vos applications dans un espace précréé.
Tester
Pour créer un NIC, procédez comme suit :
1 Dans le portail Azure, sélectionnez Créer une ressource, dans le coin supérieur
gauche du tabl eau de bord.
2 Recherchez et sélectionnez Interface réseau, puis sélectionnez Créer.
3 Entrez un nom pour votre interface réseau, tel quewebvnic. Sélectionnez ensuite
le réseau virtuel et le sous-réseau que vous avez créé dans l’exercice précédent.
4 J'ai parlé de ressources à long terme, alors voyons comment cela fonctionne.
Créez une affectation d’adresses IP statiques qui utilise l’adresse 10.0.1.4.
Tester
Pour créer une adresse IP et une entrée DNS publiques pour votre interface réseau,
procédez comme suit :
1 Dans le portail Azure, sélectionnez Créer une ressource, dans le coin supérieur
gauche du tabl eau de bord.
2 Recherchez et sélectionnez Adresse IP publique, puis sélectionnez Créer.
3 Créez une référence de base et une adresse IPv4. Les adresses IPv6 et les
références standard sont à utiliser avec les équilibreurs de charge (que nous
abordons au chapitre 8). À ce stade, ne vous souciez pas trop des différences.
4 Saisissez un nom, tel que webpublicip, qui utilise une affectation dynamique.
¡ Vous ne disposerez d'aucune adresse IP publique tant que vous n'en aurez pas
assigné une à une machine virtuelle, et démarré cette dernière.
¡ Il est possible que l'adresse IP publique change si vous arrêtez, désallouez et
redémarrez la machine virtuelle.
Une affectation statique signifie que vous disposez d'une adresse IP publique allouée
sans machine virtuelle associée. Cette adresse ne sera pas modifiée par la suite. Cette
affectation se révèle utile lorsque vous utilisez un certificat SSL mappé à une adresse IP,
ou un nom et un enregistrement DNS personnalisés pointant vers l'adresse IP.
Pour l'instant, vous n'utilisez qu'une seule machine virtuelle. Pour une utilisation en
production, il faudrait idéalement que vous exécutiez votre application sur plusieurs
machines virtuelles, avec un équilibreur de charge face à ces dernières. Dans cette
situation, l'adresse IP publique est attribuée à l'équilibreur de charge et crée
généralement une affectation statique à ce stade.
Entrées DNS
Est-il possible de configurer un nom DNS personnalisé ? En effet, le FQDN par défaut
n'est pas des plus conviviaux ! Utilisez une adresse IP publique statique, puis créez
un enregistrement CNAME dans votre zone DNS enregistrée. Vous gardez ainsi le
contrôle de l'enregistrement DNS et vous pouvez créer autant d'entrées que vous
le souhaitez pour vos applications.
Dans la zone DNS de manning.com par exemple, vous pouvez créer un CNAME pour
azuremol pointant vers une adresse IP publique statique dans Azure. Pour obtenir
votre application, tout utilisateur devrait dans un premier temps accéder à
azuremol.manning.com. Cette adresse n'est-elle pas beaucoup plus conviviale
que webmol.eastus.cloudapp.azure.com ?
Après quelques instants, la fenêtre d'adresses IP publiques se met à jour et indique que
l'adresse IP est à présent associée à votre interface réseau. Si vous avez choisi une
affectation dynamique, le champ d'adresse IP reste vide, comme illustré à la figure 5.2.
N'oubliez pas qu'une adresse IP publique est allouée une fois qu'une machine virtuelle
associée est démarrée.
Figure 5.2 L'adresse IP publique est à présent associée à une interface réseau. En choisissant une
affectation dynamique, aucune adresse IP n'est affichée tant qu'une machine virtuelle n'a pas été créée
et démarrée.
La figure 5.3 illustre le flux logique d'un paquet réseau entrant lorsqu'il passe par
un NSG. Le processus serait identique pour des paquets sortants. L’hôte Azure ne fait
pas la différence entre le trafic Internet et le trafic provenant d'ailleurs dans votre
environnement Azure, tel qu'un autre sous-réseau ou réseau virtuel. Chaque paquet
réseau entrant se voit appliquer les règles NSG entrantes, tandis que les règles NSG
sortantes sont appliquées aux paquets réseau sortants.
Tester
Pour créer un groupe de sécurité réseau, procédez comme suit :
1 Dans le portail Azure, sélectionnez Créer une ressource, dans le coin supérieur
gauche du tabl eau de bord.
2 Recherchez et sélectionnez Groupe de sécurité réseau, puis Créer.
3 Saisissez un nom, par exemple webnsg, et choisissez d’utiliser le groupe
de ressources existant.
C'est tout ! La majeure partie de la configuration d'un NSG intervient lorsque vous
créez les règles de filtrage. La section 5.2.2 explique comment procéder pour rendre
votre NSG fonctionnel.
66 Chapitre 5 Notions de base de la mise en réseau Azure
Tester
Pour associer votre sous-réseau virtuel à votre groupe de sécurité réseau, procédez
comme suit :
Figure 5.4 Des règles de sécurité par défaut sont créées afin d'autoriser le trafic provenant du réseau virtuel
interne ou de l'équilibreur de charge, mais refusant tout autre trafic.
Sécurisation et contrôle du trafic avec les groupes de sécurité réseau 67
Trois règles par défaut ont été créées pour vous. Il est important de comprendre ces
différentes règl es :
¡ AllowVnetInBound : autorise tout trafic interne au réseau virtuel. Lorsque
vous disposez de plusieurs sous-réseaux au sein de votre réseau virtuel, aucun
filtrage n'est configuré par défaut et le trafic est donc autorisé.
¡ AllowAzureLoadBalancerInBound : autorise tout trafic provenant d'un équilibreur
de charge Azure vers votre machine virtuelle. Si vous placez un équilibreur de
charge entre vos machines virtuelles et Internet, cette règle permet de s'assurer
que le trafic provenant de l'équilibreur de charge arrive jusqu'à vos machines
virtuelles, comme on le ferait pour contrôler un rythme cardiaque.
¡ DenyAllInBound : ceci est la dernière règle appliquée. Tous les paquets entrants
qui arrivent jusque-là sont alors abandonnés. S'il n'existe aucune règle
d'Autorisation antérieure, alors tout trafic est rejeté. Vous n'avez donc qu'à
autoriser le trafic souhaité. Le reste sera alors rejeté.
La priorité d'une règle NSG est importante. Lorsqu'une règle de Refus ou
d'Autorisation est appliquée, aucune règle supplémentaire n'est appliquée par la suite.
Les règles sont appliquées selon un ordre de priorité numérique croissant, c'est-à-dire
qu'une règle de priorité 100 sera appliquée avant une règle de priorité 200.
Tout comme pour les précédentes discussions sur la gouvernance des ressources
Azure, ces règles NSG sont peut-être déjà créées pour vous et appliquées à un sous-
réseau spécifique. Vous créez vos machines virtuelles et exécutez vos applications,
tandis que quelqu'un d'autre s'occupe de gérer les NSG.
Il est essentiel de comprendre comment circule le trafic afin de pouvoir réagir en cas
de problème. Dans Azure, certains outils peuvent vous aider à déterminer pourquoi le
trafic ne parvient pas jusqu'à votre application alors que vous pensez que rien ne devrait
l'en empêcher !
Tester
Pour créer vos propres règles avec le groupe de sécurité réseau, procédez comme suit :
1 Pour créer une règle NSG à partir de la fenêtre précédente du portail Azure,
sélectionnez Ajouter dans la section Règles de sécurité de trafic entrant.
2 Vous disposez de deux options pour créer des règles : de base et avancée. Pour
créer rapidement des règles prédéfinies, sélectionnez De base, dans la partie
supérieure de la fenêtre.
3 Sélectionnez HTTP dans le menu déroulant Service. De nombreux services par
défaut sont proposés, tels que SSH, RDP et MySQL. Lorsque vous sélectionnez
un service, la plage de ports appropriée est appliquée (dans ce cas, il s'agit du
port 80). L’action par défaut des règles de base autorise le trafic.
68 Chapitre 5 Notions de base de la mise en réseau Azure
4 Une valeur de priorité est attribuée à chaque règle. Plus le nombre est petit, plus
la priorité est élevée. Acceptez la priorité basse par défaut, 100 par exemple.
5 Acceptez le nom par défaut ou indiquez le votre, puis sélectionnez OK.
Tester
Vous avez créé le premier NSG dans le portail Azure. Pour créer un autre NSG avec la
CLI Azure , procédez comme suit :
3 Dans le nouveau NSG, créez une règle qui autorise le port 22. Entrez le groupe de
ressources et le NSG que vous avez créés dans l'étape précédente, et saisissez un
nom (allowssh par exemple) :
az network nsg rule create \
--resource-group azuremolchapter5 \
--nsg-name remotensg \
--name allowssh \
--protocol tcp \
--priority 100 \
--destination-port-range 22 \
--access allow
4 Créez un sous-réseau pour votre machine virtuelle distante. Entrez un nom, tel
que remotesubnet, ainsi qu'un préfixe d’adresse compris dans la plage du réseau
virtuel 10.0.2.0/24 par exemple. Associez également le NSG que vous avez créé
à l'étape 3 au sous-réseau, tel que remotensg :
Création d'un exemple d'application Web avec un trafic sécurisé 69
Il suffit seulement de trois commandes pour créer un sous-réseau, créer un NSG et créer
une règle. Commencez-vous à vous représenter la puissance de la CLI Azure ?
Azure PowerShell est tout aussi puissant, ne vous sentez donc pas obligé de créer toutes
les ressources dans le portail Azure. À mesure que nous progresserons dans ce livre, nous
préférerons, dans la majorité des cas, utiliser Azure CLI plutôt que le portail Azure.
Réseau virtuel
Sous-réseau : Web Règle Sous-réseau : distant Règle
pour autoriser le trafic HTTP pour autoriser le trafic SSH
Adresse IP publique de Adresse IP publique de
l’interface réseau + DNS l’interface réseau + DNS
VM Web VM jump-box
Figure 5.5 Vous réunissez deux sous-réseaux, des NSG, des règles, des interfaces réseau et des
machines virtuelles. Cet exemple ressemble presque à un déploiement prêt pour la production avec d'un
côté, une première machine virtuelle qui exécute le serveur Web et est ouverte au trafic publique, et de
l'autre une deuxième dans un sous-réseau distinct, utilisée pour les connexions à distance au reste de
l'environnement de l'application.
Lorsque vous créez une machine virtuelle, vous pouvez fournir l'interface de réseau
virtuel que vous avez créée dans les étapes précédentes. Si vous n'avez pas spécifié cette
ressource réseau, La CLI Azure crée pour vous un réseau virtuel, un sous-réseau et une
carte réseau avec les paramètres par défaut. Cela peut se révéler très utile pour créer
rapidement une machine virtuelle. Cependant, nous souhaitons suivre le principe des
ressources réseau à long terme pouvant être gérées par une autre équipe, et dans
lesquelles vous créerez vos machines virtuelles.
70 Chapitre 5 Notions de base de la mise en réseau Azure
Tester
Pour créer des machines virtuelles jumpbox et de serveur Web avec la CLI Azure,
procédez comme suit :
La sortie des deux commandes affiche une adresse IP publique. Prenez note de ces
adresses IP. Dans le prochain exercice, si vous essayez de vous connecter en SSH à la
première machine virtuelle pour le serveur Web, vous échouez. Pourquoi ? Vous
pouvez vous connecter en SSH à la machine virtuelle distante car vous avez créé une
règle NSG pour autoriser uniquement le trafic HTTP vers la machine virtuelle Web.
Un agent SSH peut stocker vos clés SSH et les transmettre selon les besoins. Au
chapitre 2, lorsque vous avez créé une paire de clés publiques SSH, j'ai mentionné les
clés publique et privée. La clé privée est conservée localement sur votre ordinateur.
Seule la clé publique est copiée sur les machines virtuelles distantes. Même si la clé
publique a été ajoutée aux deux machines virtuelles créées, vous ne pouvez pas
simplement vous connecter en SSH à votre jumpbox, puis à votre machine virtuelle Web.
Pourquoi ? Cette jumpbox ne dispose d'aucune copie de votre clé privée. Lorsque vous
essayez d'effectuer la connexion SSH depuis la jumpbox, celle-ci ne dispose d'aucune
clé privée à associer avec la clé publique sur la machine virtuelle pour pouvoir vous
authentifier.
Il est nécessaire de protéger la clé privée, il s'agit donc de ne pas choisir la voie de la
facilité et de ne pas la copier dans la jumpbox. Tout autre utilisateur accédant à la
jumpbox pourrait potentiellement se procurer une copie de votre clé privée et pourrait
se faire passer pour vous chaque fois que cette clé est utilisée. C'est à ce moment que
l'agent SSH entre en jeu.
Si vous exécutez l'agent SSH dans votre session Cloud Shell, vous pouvez y ajouter
vos clés SSH. Pour créer votre connexion SSH à la jumpbox, vous devez spécifier
l'utilisation de cet agent afin de faire le lien avec votre session. Cette technique vous
permet de transmettre efficacement votre clé privée pour l'utiliser depuis la jumpbox,
sans jamais la copier. Lorsque vous vous connectez en SSH à la machine virtuelle Web
depuis la jumpbox, l'agent SSH communique votre clé privée par la jumpbox et vous
permet de vous authentifier.
Tester
Pour utiliser SSH avec votre machine virtuelle jumpbox, procédez comme suit :
2 Ajoutez à l'agent la clé SSH que vous avez créée dans le chapitre 2, en procédant
comme suit :
ssh-add
4 Étant donné qu'il s'agit de la première fois que vous créez une connexion SSH à
la machine virtuelle jumpbox, vous devez accepter l'invite de connexion avec les
clés SSH.
5 Vous souvenez-vous avoir créé une affectation d'adresse IP privée statique pour la
machine virtuelle Web dans la section 5.1.2 ? Cette adresse statique simplifie con-
sidérablement la connexion SSH. Connectez-vous en SSH à la machine virtuelle
de la manière suivante :
ssh 10.0.1.4
72 Chapitre 5 Notions de base de la mise en réseau Azure
de développement et
6
La plupart du temps, vous souhaitez passer le moins de temps possible à réfléchir
sur la façon dont vous déployez un environnement d'application, afin de pouvoir
vous consacrer au déploiement réel. Dans de nombreux environnements IT,
les équipes opérationnelles ont
plus en plus tendance à travailler en étroite collaboration, grâce à l'engouement
pour le DevOps qui fait l'objet d'un grand nombre de conférences et de blogs.
de
ressources est bien plus qu'un simple emplacement pour organiser vos ressources.
Cette section explique ce qu'est le modèle Azure Resource Manager, et démontre
pourquoi il est important lorsque vous créez et exécutez des applications.
Réseau virtuel
VM 1 VM 2 VM 3 VM 4
¡ Ressources similaires regroupées par fonction dans le même groupe de ressources : comme illus-
tré à la figure 6.2, cette approche est souvent plus courante dans les applications et
environnements plus importants. Votre application peut exister dans un groupe de
ressources avec uniquement les machines virtuelles et les composants d'application
nécessaires. Les ressources réseau virtuelles et les adresses IP peuvent exister dans un
autre groupe de ressources, sécurisé et géré par un autre groupe d'ingénieurs.
L'approche Azure Resource Manager 77
Réseau virtuel
VM 1 VM 2 VM 3 VM 4
Figure 6.2 Une autre approche consiste à créer et à regrouper les ressources en fonction de leur rôle.
Un exemple courant de ce cas de figure est quand toutes les ressources réseau principales se trouvent
dans un autre groupe de ressources que les ressources de traitement d'application principales.
Les machines virtuelles situées dans le groupe de ressources de traitement peuvent accéder aux
ressources réseau situées dans l'autre groupe, mais les deux ensembles de ressources peuvent être
gérés et sécurisés de façon indépendante.
Pourquoi ces approches différentes ? Il ne s'agit pas uniquement de sécurité des tâches
et des silos rassurants dans lesquels certaines équipes aiment travailler. Cela concerne
la façon dont vous devez gérer les ressources sous-jacentes. Dans les environnements et
applications de moindre envergure, où toutes les ressources sont situées dans le même
groupe de ressources, vous êtes responsable de tout ce qui se trouve dans
l'environnement ou l'application en question. Cette approche est également bien
adaptée aux environnements de développement et de test, où tout est regroupé
ensemble. Les modifications apportées au réseau virtuel impactent uniquement votre
application et votre groupe de ressources.
La réalité, c'est que les réseaux ne sont pas souvent modifiés. Les plages d'adresses
sont souvent bien définies et planifiées de façon à pouvoir coexister à l'échelle des sites
et des bureaux d'Azure à travers le monde. Bien souvent, il paraît logique de placer les
composants réseau dans leur propre groupe de ressources. Le réseau est géré
séparément de l'application. De la même façon, le stockage peut être géré et mis à jour
de façon indépendante. Cette division des ressources n'a rien d'intrinsèquement
mauvais, tant que les équipes IT ne restent pas bloquées dans une « mentalité de
cloisonnement » entraînant un manque de coopération.
Pour vos applications, la division des ressources peut également être un avantage,
car vous restez dans une grande mesure libre d'effectuer les modifications et mises à
jour de votre choix. C'est justement parce que les composants réseau ne se
trouvent pas dans votre groupe de ressources que vous n'avez pas à vous en préoccuper
lorsque vous réalisez des mises à jour d'application.
78 Chapitre 6 Azure Resource Manager
Figure 6.3 Pour chaque ressource Azure, le contrôle d'accès répertorie les affectations actives. Vous
pouvez ajouter des affectations ou sélectionner Rôles pour afficher des informations sur les ensembles
d'autorisations disponibles.
L'approche Azure Resource Manager 79
Tester
Ouvrez le portail Azure dans un navigateur Web, puis sélectionnez n'importe laquelle
de vos ressources, par exemple cloud-shell-storage. Appuyez sur le bouton Contrôle
d'accès (IAM), comme illustré à la figure 6.3. Passez en revue les attributions de rôles
actives. Découvrez comment ajouter une attribution de rôle, ainsi que toutes les
attributions de rôle disponibles. L'icône d'information en regard de chaque rôle
indique quelles autorisations sont affectées.
Tester
Pour voir les verrous de ressources Azure en action, comme illustré à la figure 6.4,
procédez comme suit :
Tester
Pour voir les balises de ressources Azure en action, procédez comme suit :
Figure 6.5 Vous pouvez créer jusqu'à 50 balises name:value pour chaque ressource ou groupe de
ressources Azure.
Scripts VM 1
Différences
Opérateur potentielles
Check-lists VM 2
humain dans les VM
déployées
Packages
Plusieurs étapes et d’installation VM 3
scripts pour créer des
machines virtuelles
Figure 6.6 Les humains commettent des erreurs, comme des fautes de frappe ou l'oubli d'une étape
dans le cadre d'un déploiement. Vous pouvez vous retrouver avec des machines virtuelles légèrement
différentes à la fin de la sortie. L'automatisation est souvent utilisée pour éliminer le facteur humain
de l'équation et créer des déploiements cohérents et identiques chaque fois.
Même avec des scripts, vous avez toujours besoin de quelqu'un pour les écrire, les gérer
et les maintenir à jour à mesure que les nouvelles versions des modules CLI Azure ou
PowerShell sont publiées. Oui, il arrive parfois que des changements importants soient
apportés aux outils pour pouvoir intégrer de nouvelles fonctionnalités, même si cela
reste rare.
Voici un exemple de dépendances : si vous créez une carte réseau virtuelle, vous
devez la connecter à un sous-réseau. Logiquement, le sous-réseau doit exister avant que
vous puissiez créer la carte réseau virtuelle. Et le sous-réseau doit faire partie d'un
réseau virtuel, de sorte que le réseau doit être créé avant le sous-réseau. La figure 6.7
montre la chaîne de dépendances en action. Si vous essayez d'écrire vous-même un
script, vous devez planifier soigneusement l'ordre dans lequel les ressources sont
créées, et même alors il vous faut créer une logique pour savoir quand les ressources
parentes sont prêtes et quand vous pouvez passer aux ressources dépendantes.
Carte
Dépend de Sous- Dépend de Réseau
réseau
réseau virtuel
virtuelle
Figure 6.7 Azure Resource Manager gère les dépendances à votre place. La plateforme sait dans quel
ordre créer les ressources et connaît l'état de chaque ressource sans utiliser de logique écrite à la main
ni de boucles comme celles que vous devez utiliser dans vos scripts.
Vous voulez apprendre quelque chose d'intéressant ? Vous avez déjà utilisé des modèles
Resource Manager dans le chapitre 2 et pour la toute première machine virtuelle que
vous avez créée. Au fur et à mesure que vous créez une machine virtuelle sur le portail
ou dans la CLI Azure, un modèle est créé et déployé programmatiquement en catimini.
Pourquoi ? Eh bien, pourquoi réinventer la roue et passer par le processus visant à
créer toute cette logique pour les déploiements ? Laissez Azure Resource Manager le
faire à votre place !
Voyons à quoi ressemble une section d'un modèle Resource Manager. La liste
suivante montre la section qui crée une adresse IP publique, exactement comme dans
les exemples précédents lorsque vous avez créé une machine virtuelle.
{
"apiVersion": "2019-04-01",
"type": "Microsoft.Network/publicIPAddresses",
"name": "publicip",
"location": "eastus",
"properties": {
"publicIPAllocationMethod": "dynamic",
"dnsSettings": {
"domainNameLabel": "azuremol"
}
}
},
par exemple azuremol. Ce sont les mêmes paramètres que ceux que vous avez fournis
lorsque vous avez utilisé le portail Azure ou la CLI. Et si vous utilisez PowerShell,
devinez quoi ? Vous êtes invité à renseigner les mêmes paramètres.
La différence avec le modèle, c'est que vous n'avez pas eu à saisir d'informations.
Toutes les informations figuraient dans le code. Vous pensez peut-être « Parfait, mais
que se passe-t-il si je veux utiliser des noms différents chaque fois ? ». Comme avec un
script, vous pouvez attribuer dynamiquement des noms à l'aide de paramètres et de
variables :
¡ Les paramètres sont des valeurs que vous êtes invité à renseigner. Ils sont souvent
utilisés pour les informations d'identification utilisateur, le nom de la machine
virtuelle et l'étiquette de nom DNS.
¡ Les variables peuvent se voir « préattribuer » une valeur, mais elles sont également
adaptées chaque fois que vous déployez le modèle, tout comme la taille de la
machine virtuelle ou le nom du réseau virtuel.
Tester
Pour voir un modèle Resource Manager complet, accédez au référentiel GitHub à
l'adresse http://mng.bz/QyWv.
{
"apiVersion": "2019-04-01",
"type": "Microsoft.Network/publicIPAddresses",
"name": "[concat(‘publicip’, copyIndex())]",
Modèles Azure Resource Manager 85
"copy": {
"count": 2
}
"location": "eastus",
"properties": {
"publicIPAllocationMethod": "dynamic",
}
},
Figure 6.8 De nombreuses extensions sont disponibles dans Visual Studio Code pour optimiser et simplifier la
création et l'utilisation des modèles Azure Resource Manager.
86 Chapitre 6 Azure Resource Manager
Figure 6.9 Visual Studio vous permet de créer graphiquement des modèles et d'explorer les ressources JSON.
Une méthode plus « graphique » pour créer des modèles Azure Resource Manager
consiste à utiliser la version complète de l'éditeur Visual Studio, comme illustré à la
figure 6.9. Il existe des versions pour Windows et macOS, mais vous avez besoin d'une
licence distincte pour utiliser l'éditeur. Une édition Community est disponible, mais à
utiliser avec prudence si vous créez des modèles dans votre entreprise : une version
avec une licence est généralement nécessaire. Consultez vos experts en matière de
licences, car Visual Studio est destiné aux développeurs d'applications.
Vous pouvez, bien sûr, utiliser un éditeur de texte de base. L'une des raisons pour
lesquelles les modèles Azure Resource Manager sont écrits en JSON, c'est que cela
élimine la nécessité de recourir à des outils spéciaux. Travailler avec JSON implique
une courbe d'apprentissage, c'est pourquoi je vous recommande d'explorer les modèles
de démarrage rapide disponibles dans le référentiel d'exemples Azure. Attention à
l'indentation, aux virgules de fin et à l'utilisation des parenthèses, crochets et accolades !
Si j'aborde cette question, c'est en référence au concept de choix dans Azure. Si vous
trouvez que les modèles Azure Resource Manager écrits en JSON sont un peu trop
complexes, essayez un produit comme Terraform. Ne renoncez pas aux déploiements
Resource Manager basés sur des modèles. Pour obtenir des déploiements reproductibles
et cohérents à grande échelle, les modèles restent la meilleure approche, c'est pourquoi je
vous conseille de trouver l'approche basée sur des modèles qui vous convient.
Figure 6.10 Chaque modèle Resource Manager situé dans le référentiel d'exemples GitHub est associé à un bouton
Deploy to Azure (Déployer sur Azure). Si vous cliquez sur ce bouton, le portail Azure se charge et le modèle est chargé.
Vous êtes invité à renseigner certains paramètres de base, et le reste du déploiement est traité par le modèle.
Laboratoire : déploiement de ressources Azure à partir d'un modèle 89
4 Une fois votre modèle déployé, retournez sur GitHub et examinez le fichier
azure-deploy.json. Ce fichier est le modèle Azure Resource Manager que vous
avez utilisé pour créer et déployer l'exemple. Essayez de voir si vous comprenez
les différents types de ressources et les différentes configurations qui ont été
appliqués. Vous aurez moins de mal à comprendre le format JSON quand vous
serez amené à travailler avec davantage de types de ressources et de modèles !
Faites-moi confiance !
Haute disponibilité
et redondance
7
J’ai perdu le compte du nombre de fois où quelque chose en informatique m’a
laissé tomber. J’ai eu une panne de disque dur sur un ordinateur portable la veille
d’une conférence, une alimentation électrique fumante sur un serveur de
messagerie et une défaillance d’interfaces réseau sur un routeur principal. Et mieux
vaut ne pas me lancer sur le sujet des mises à jour de systèmes d’exploitation, de
pilotes, ou de microprogrammes ! Je suis sûr que tous ceux qui travaillent dans le
domaine de l’informatique aimeraient partager des histoires d’horreur sur des
situations auxquelles ils ont dû faire face : généralement des problèmes qui se sont
produits au milieu de la nuit ou à un moment critique pour l’entreprise. Est-ce
qu’une bonne panne arrivant au bon moment, peut réellement exister ?
En informatique, si vous anticipez les problèmes, vous apprenez à planifier
et à concevoir des applications qui en tiennent compte. Dans ce chapitre,
vous apprendrez à utiliser les fonctionnalités de haute disponibilité et de
redondance d’Azure pour minimiser les perturbations causées par les
mises à jour de maintenance et les pannes. Ce chapitre jette les bases des deux ou
trois chapitres à venir, tandis que vous commencez à passer d’une application qui
s’exécute sur une application Web ou une VM unique, à une application qui peut
évoluer et être distribuée à l’échelle mondiale.
90
Le besoin de redondance 91
VM VM
unique unique Figure 7.1 Si votre application s’exécute sur une seule
machine virtuelle, toute panne survenant sur cette VM
rend l’application inaccessible. Cela pourrait conduire
vos clients à aller faire des affaires ailleurs ou, au
Réponse de Application non minimum, à être insatisfaits du service que vous
l’application retournée accessible fournissez.
Lorsque vous conduisez une voiture, vous disposez normalement d'une roue de
secours en cas de crevaison. Si vous utilisez un ordinateur portable ou une tablette, il y
a de fortes probabilités que vous branchiez l’appareil à un chargeur au cas où la
batterie s’épuiserait en cours de session. À la maison ou dans votre appartement, avez-
vous des ampoules de rechange au cas où ? Ou encore une lampe de poche ou des
bougies en cas de panne de courant ?
La plupart des gens aiment avoir une certaine forme de redondance ou de plan de
secours, dans la vie quo tidienne, mais aussi et surtout, en informatique. Si vous êtes
paré pour remplacer une roue ou une ampoule sur le champ, vous pouvez gérer les
pannes et les échecs moyennant une interruption minimale. Si vous concevez et
construisez vos applications dans une optique de redondance, vous fournissez à vos
clients un niveau élevé de disponibilité qui réduit ou même masque les interruptions
que l’application rencontre. Tous les datacenters Azure sont conçus pour la haute
disponibilité. Unités d’alimentation de secours, connexions réseau multiples ou encore
baies de stockage avec disques de rechange, sont quelques exemples, parmi d'autres, de
concepts essentiels de redondance qu’Azure fournit et gère pour vous. Toute la
redondance fournie par Azure pourrait s'avérer inutile si vous exécutez votre
application sur une seule machine virtuelle. Pour vous donner de la souplesse et du
contrôle sur la façon de rendre votre application hautement disponible, deux
fonctionnalités principales pour les charges de travail IaaS sont disponibles :
¡ Zones de disponibilité : vous permettent de distribuer des VM sur des segments
physiquement isolés d’une région Azure pour optimiser davantage la redondance de
votre application. Les zones peuvent également fournir une haute disponibilité aux
ressources réseau telles que les adresses IP publiques et les équilibreurs de charge.
¡ Groupes à haute disponibilité : vous permettent de regrouper logiquement les VM
pour les distribuer dans un datacenter Azure unique et ainsi minimiser les
interruptions liées à des pannes ou des mises à jour de maintenance.
Pour la plupart des déploiements de nouvelles applications dans Azure, je vous suggère
de prévoir d’utiliser des zones de disponibilité. Cette approche offre de la souplesse
dans la façon de distribuer votre application. De plus, elle fournit de la redondance
aux ressources réseau qui occupent souvent une place centrale dans la façon dont les
clients accèdent finalement aux VM sous-jacentes. Pour voir comment chacune de ces
approches fonctionne, abordons-les plus en détail.
92 Chapitre 7 Haute disponibilitéet redondance
Europe de l’Ouest
Adresse IP publique
Équilibreur de charge
VM 1 VM 2 VM 3
Figure 7.2 Une région Azure peut contenir plusieurs zones de disponibilité : des
datacenters physiquement isolés qui utilisent une alimentation, un réseau et un système
de refroidissement indépendants. Les ressources réseau virtuelles Azure telles que les
adresses IP publiques et les équilibreurs de charge peuvent couvrir toutes les zones
d’une région pour fournir une redondance qui va au-delà des seules VM.
Grâce aux zones de disponibilité, vos applications peuvent tolérer que l’intégralité
d’un datacenter Azure soit déconnecté. Bien sûr, il faudrait un événement majeur
pour que cela arrive, mais ce n’est pas impossible !
Pour les déploiements d’applications d'envergure, vous pouvez créer plusieurs
machines virtuelles dans chaque zone de disponibilité. Plusieurs machines virtuelles
dans une zone de disponibilité sont automatiquement distribuées sur le matériel
disponible au sein de cette zone. Vous n'avez rien à configurer, ni à contrôler. Même si
une mise à jour de maintenance ou une panne d’équipement à l’intérieur d’une zone
devait avoir un impact sur toutes les VM qui s’exécutent dans cette zone, n’oubliez pas
que les zones sont physiquement isolées les unes des autres : les VM présentes dans une
autre zone continueraient à fonctionner.
Si vous êtes né sous une mauvaise étoile, est-ce que toutes les VM réparties dans les
différentes zones pourraient toutes subir des mises à jour de maintenance en même temps ?
Oui, mais c’est improbable. Les zones d’une région ont des cycles de mise à jour décalés.
Les mises à jour sont effectuées dans une zone ; une fois qu’elles sont terminées, les mises à
jour sont effectuées dans la zone suivante. Les zones de disponibilité fournissent un haut
niveau d’abstraction et de redondance ; vous devez donc examiner votre application sur
l’ensemble du déploiement, et pas seulement là où se situent les VM d’une zone.
L’inclusion des ressources réseau virtuelles dans les zones de disponibilité
est beaucoup plus importante que ce qu’on pourrait penser à première vue.
La figure 7.3 illustre ce qui se passerait si le datacenter
Redondance des infrastructures avec zones de disponibilité 93
Europe de l’Ouest
Équilibreur de charge VM 2 VM 3
VM 1
Figure 7.3 Lorsque les ressources réseau sont associées à une seule zone ou à un seul datacenter
Azure, une panne dans cette installation rend l’intégralité de l’application inaccessible par le client.
Peu importe si les autres VM continuent de fonctionner dans d’autres zones. Sans la connectivité
réseau pour distribuer le trafic de vos clients, l’application entière est indisponible.
devenait indisponible pour les ressources réseau, telles qu’une adresse IP publique
ou un équilibreur de charge, qui s’exécutent dans les zones de disponibilité.
Je reviendrai plus en détail sur les équilibreurs de charge au chapitre 8, mais pour
l’instant, tout ce que vous devez comprendre, c’est que l’équilibreur de charge distribue
le trafic sur toutes les machines virtuelles disponibles qui lui sont associées. Les VM
signalent leur état d’intégrité à intervalles définis et l’équilibreur de charge arrête de
distribuer le trafic à une VM qui signale qu’elle n’est pas disponible. Avec un équilibreur
de charge qui fonctionne dans les zones de disponibilité, une panne dans un datacenter
Azure rend ces VM indisponibles ; elles ne font donc plus partie de la rotation
d’équilibrage de charge.
Une adresse IP publique qui couvre les zones de disponibilité fournit un point
d’entrée unique aux clients pour atteindre votre équilibreur de charge, puis être
distribuée vers une machine virtuelle disponible. Dans un déploiement d’application
où cette adresse IP publique réside dans un seul datacenter Azure, si ce datacenter
rencontre un problème, aucun client ne peut accéder à l’adresse IP publique. Le client
ne peut plus utiliser votre application, même si des VM sont disponibles pour répondre
aux demandes des clients.
Les ressources qui peuvent utiliser des zones de disponibilité incluent à la fois des
services de zone et des services redondants interzone :
¡ Les services de zone sont notamment destinés aux machines virtuelles, à une adresse
IP publique ou à un équilibreur de charge. Toute la ressource s’exécute dans une
zone donnée et peut fonctionner seule en cas d'indisponibilité d'une autre zone.
¡ Les services redondants interzone sont destinés aux ressources capables de se
répliquer automatiquement entre les zones, telles que le stockage redondant
interzone et les bases de données SQL. Toute la ressource n’est pas exécutée dans
une zone donnée, ses données sont distribuées entre les zones, de
sorte qu'elle continue à être disponible si une zone rencontre un problème.
94 Chapitre 7 Haute disponibilitéet redondance
Tester
Pour créer des ressources réseau qui soient redondantes entre les zones de disponibil-
ité, procédez comme suit :
3 Créez une adresse IP publique standard dans votre groupe de ressources. Par
défaut, une adresse IP publique de base serait créée et affectée uniquement à une
seule zone. Le paramètre --sku standard indique à Azure qu’il doit créer une
ressource interzones redondante :
az network public-ip create \
--resource-group azuremolchapter7az \
--name azpublicip \
--sku standard
Redondance des infrastructures avec zones de disponibilité 95
Tester
Pour créer une VM dans une zone de disponibilité, procédez comme suit :
Cela prend quelques minutes pour créer une machine virtuelle. Une fois le processus
terminé, la sortie de commande indique la zone dans laquelle s’exécute la VM. Vous
pouvez également vérifier cette information à l'aide de la commande az vm show :
az vm show \
--resource-group azuremolchapter7az \
--name zonedvm \
--query zones
96 Chapitre 7 Haute disponibilitéet redondance
Domaine de Domaine de
Serveur physique Serveur physique mise à jour mise à jour
Machine Machine Machine Machine
virtuelle virtuelle virtuelle virtuelle
Figure 7.4 Dans un datacenter Azure, le matériel est logiquement divisé en domaines de mise à jour et en
domaines d’erreur. Ces domaines logiques permettent à la plateforme Azure de comprendre comment distribuer
vos VM sur le matériel sous-jacent pour répondre à vos exigences de redondance. Il s’agit d’un exemple basique :
un domaine de mise à jour contient probablement plus d’un serveur physique.
VM entre ces domaines d’erreur afin que vous disposiez toujours de machines virtuelles
disponibles si l’alimentation ou un commutateur réseau tombe en panne.
Les VM qui utilisent des disques gérés (rappelez-vous que, toutes vos VM devraient
utiliser des disques gérés !) respectent également la distribution et les limites des
domaines d’erreurs logiques. La plateforme Azure attribue logiquement des clusters de
stockage aux domaines d’erreur afin de s’assurer que lorsque vos VM sont réparties entre
les groupes matériels, les disques gérés sont également distribués sur le matériel de
stockage. Il n’y aurait aucun intérêt à la redondance des VM sur le matériel serveur si tous
les disques gérés pouvaient potentiellement se retrouver dans un seul cluster de stockage !
Et oui, les disques gérés peuvent également être utilisés avec des zones de disponibilité.
Il n’y a pas de relation entre les domaines répartis dans plusieurs groupes à haute
disponibilité. Les ressources physiques qui composent les domaines d’erreur et de mise
à jour dans un groupe à haute disponibilité peuvent ne pas être les mêmes pour un
deuxième groupe à haute disponibilité. Cette sensibilisation veut dire que si vous créez
plusieurs groupes à haute disponibilité et que vous répartissez vos VM entre ces
derniers, le domaine d’erreur 1, par exemple, ne contient pas toujours le même
matériel physique.
Tester
Pour voir les groupes à haute disponibilité à l’œuvre, procédez comme suit afin
de déployer un modèle Ressource Manager :
Domaine de Domaine de
mise à jour 2 mise à jour 3
Domaine de
mise à jour 4
Lorsque vous créez davantage de VM dans un groupe à haute disponibilité, vous devez
étudier le nombre de domaines de mise à jour à utiliser. Par exemple, s'il
y a cinq domaines de mise à jour cela signifie que jusqu’à 20 % de vos VM peuvent être
indisponibles pour cause de maintenance :
¡ Admettons que vous ayez dix VM dans votre groupe à haute disponibilité. Deux
de ces VM peuvent subir une maintenance en même temps. Si vous voulez qu’une
seule machine virtuelle à la fois puisse subir une maintenance, vous devez créer
dix domaines de mise à jour. Plus vous créez de domaines de mise à jour, plus la
période pendant laquelle votre application est potentiellement en état de
maintenance est longue.
¡ Continuons avec l’exemple précédent de 10 machines virtuelles sur 10 domaines
de mise à jour. Vos applications sont susceptibles d'être perturbées tant que tous
les 10 domaines de mise à jour n'ont pas terminé leur cycle de maintenance. Si
vous n’avez que 5 domaines de mise à jour, ce délai de maintenance est réduit.
Une période de maintenance plus longue n'est pas nécessairement une mauvaise
chose. Vous devez plutôt déterminer votre tolérance aux exécutions potentielles
à une capacité inférieure.
Il est important de se rappeler que ces domaines de mise à jour et les cycles de
maintenance sont effectués par la plateforme Azure elle-même. Vous devez également
tenir compte de vos propres besoins en matière de mise à jour et de vos fenêtres de
maintenance.
100 Chapitre 7 Haute disponibilitéet redondance
VM 0 VM 0 VM 1
Figure 7.6 La première VM est créée Figure 7.7 Avec une seconde VM créée, les VM sont maintenant
dans le domaine d’erreur 0 et le réparties uniformément entre les domaines d’erreur et de mise à
domaine de mise à jour 0. jour. C’est ce qui est souvent considéré comme la quantité de
redondance minimale pour protéger vos applications.
Votre modèle crée trois VM, alors que se passe-t-il ensuite selon vous ? La plateforme
Azure cherche de nouveau à voir où se trouve la position de déploiement disponible
suivante. Vous n’avez créé que deux domaines d’erreur, de sorte que la VM est créée
de nouveau dans le domaine d’erreur 0. Mais la VM est créée dans un domaine de mise
à jour différent de la première VM. La troisième VM est créée dans le domaine de mise
à jour 2, comme illustré à la figure 7.8.
d’erreur, une défaillance matérielle pourrait donc potentiellement avoir un impact sur
les deux machines. Mais l’entretien de routine n’affecte qu’une seule de ces VM à la
fois, car elles sont réparties dans plusieurs domaines de mise à jour. Si vous continuez
et créez plus de VM, la plateforme Azure va continuer à les distribuer dans des
domaines d’erreur et de mise à jour différents. Lorsque les cinq domaines de mise à
jour sont utilisés, la sixième VM est créée dans le domaine de mise à jour 0, et le cycle
se poursuit.
Tester
Pour voir comment vos VM sont distribuées dans un groupe à haute disponibilité, procé-
dez comme suit :
Si vous êtes particulièrement attentif, vous avez peut-être remarqué que les VM ne
correspondent pas parfaitement avec l’ordre des domaines d’erreur et de mise à jour
attendu. Y a-t-il un bogue ? Probablement pas. Si vous examinez l’exemple de la
figure 7.9 et que vous le comparez à ce que vous avez appris des concepts précédents,
vous vous attendez à ce que les VM soient distribuées comme illustré au tableau 7.1.
102 Chapitre 7 Haute disponibilitéet redondance
vm0 0 0
vm1 1 1
vm2 0 2
Alors, qu’est-ce qui a mal tourné ? Rien. Repensez à la façon dont Resource Manager
crée des ressources à partir d’un modèle. La plateforme Azure n’attend pas que la
première VM soit créée avant que la seconde puisse l’être. Les trois VM sont créées en
même temps. Ainsi, il peut y avoir quelques fractions de seconde de différence durant
lesquelles une VM est associée en premier à un groupe à haute disponibilité. Peu
importe l’ordre, puisque vous ne contrôlez pas ce que les domaines d’erreur et de mise
à jour sous-jacents représentent. Tout dépend de la plateforme Azure. Vous avez
uniquement besoin de vérifier que vos VM sont distribuées, pas où elles le sont.
Si cet exercice vous pose des difficultés, supprimez les deux premiers groupes
de ressources créés dans ce chapitre, de type : azuremolchapter7 et
azuremolchapter7az. Si vos quotas par défaut sont faibles, les quatre VM
de ces groupes de ressources peuvent vous empêcher de réussir cet exercice.
Pour demander une augmentation de vos quotas pour une région, suivez les étapes
décrites à la page http://mng.bz/Xq2f.
Les deux ressources utilisent la référence (SKU) standard, qui fournit par défaut
la redondance de zone. Aucune configuration supplémentaire n’est nécessaire
pour accomplir cette tâche ! Voyons ce qui se passe !
3 Dans votre navigateur Web, ouvrez le modèle de démarrage rapide disponible
à l'adresse http://mng.bz/O69a, puis sélectionnez le bouton Déployer
dans Azure.
4 Créez ou sélectionnez un groupe de ressources, puis fournissez un nom
d’utilisateur et un mot de passe aux VM.
5 Entrez un nom DNS unique, comme azuremol.
104 Chapitre 7 Haute disponibilitéet redondance
Figure 7.10 Pour déployer le modèle de zone de disponibilité dans le portail Azure, indiquez
un groupe de ressources, un nom d’utilisateur et un mot de passe, puis le type de système
d’exploitation et le nombre de VM que vous souhaitez créer. Le modèle utilise des boucles,
copyIndex(), dependsOn, des variables et des paramètres comme nous l’avons vu au
chapitre 6.
Exercice pratique : déploiement de machines virtuelles hautement disponibles à partir d’un modèle 105
106
Composants de l'équilibreur de charge Azure 107
Internet
Équilibreur
de charge
Adresse IP publique
Pool IP front-end
Sonde d’intégrité
Sonde pour vérifier health.html
sur les VM back-end
Règles d’équilibrage de charge
Autoriser les entrées sur port TCP 80 ->
port TCP 80 sur pool back-end
Pool IP back-end
Carte Carte Carte
réseau réseau réseau
virtuelle virtuelle virtuelle
Figure 8.1 Le trafic provenant d'Internet pénètre dans l'équilibreur de charge via une adresse IP publique
qui est associée à un pool IP front-end. Le trafic est traité par des règles d'équilibrage de charge qui
déterminent comment et où il doit être transmis. Les sondes d'intégrité associées aux règles garantissent
que le trafic est uniquement distribué uniquement sur des nœuds sains. Un pool back-end de cartes
réseau virtuelles connectées aux machines virtuelles reçoit ensuite le trafic distribué par les règles
d'équilibrage de charge.
VM VM
front-end back-end
Équilibreur Équilibrage
VM VM
Internet de charge de charge
front-end back-end
Internet interne
VM VM
front-end back-end
Figure 8.2 Un équilibreur de charge Internet peut être utilisé pour distribuer le trafic vers les
machines virtuelles front-end exécutant votre site Web, qui se connectent ensuite à un équilibreur
de charge interne pour distribuer le trafic vers des machines virtuelles, à un niveau base de données.
L'équilibreur de charge interne n'est pas public et n'est accessible qu'aux machines virtuelles
front-end se trouvant dans le réseau virtuel Azure.
Le mode dans lequel fonctionne votre équilibreur de charge n'a aucune incidence sur
le comportement du pool IP front-end. Vous affectez une ou plusieurs adresses IP qui
sont utilisées en cas de demande d'accès à l'équilibreur de charge. Les adresses IPv4 et
IPv6 peuvent être configurées pour le pool IP front-end. Vous pouvez ainsi configurer
des communications IPv6 de bout en bout entre les clients et vos machines virtuelles
lorsque le trafic entre et sort de l'équilibreur de charge.
Tester
Pour comprendre comment les composants de l'équilibreur de charge fonctionnent
ensemble, procédez comme suit pour créer un équilibreur de charge et un pool IP
front-end :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell en haut du tableau
de bord.
2 Créez un groupe de ressources à l'aide de la commande az group create.
Spécifiez un nom de groupe de ressources, comme par exemple
azuremolchapter8, ainsi qu'un emplacement :
az group create --name azuremolchapter8 --location westeurope
Si vous continuez à vous appuyer sur le chapitre 7 et souhaitez utiliser des zones
de visibilité, veillez à sélectionner la région appropriée pour vous assurer que la
prise en charge de la zone de disponibilité est disponible.
3 Créez une adresse IP à l'aide de la commande az network public-ip create.
Dans le chapitre 7, vous avez appris que les zones de disponibilité offrent une
redondance aux ressources réseau. Je vous propose donc de créer une adresse IP
publique standard, redondante interzone et d'indiquer un nom, par exemple
publicip :
az network public-ip create \
--resource-group azuremolchapter8 \
--name publicip \
--sku standard
110 Chapitre 8 Applications d’équilibrage de charge
Pour créer une adresse IP publique IPv6, vous pouvez ajouter --version IPv6 à la
commande précédente. Pour ces exercices, vous pouvez utiliser des adresses IPv4.
4 Créez l'équilibreur de charge et affectez l'adresse IP publique au
pool IP front-end. Pour ajouter l'adresse IP publique, spécifiez le paramètre
--public-ip-address. Si vous souhaitez créer un équilibreur de charge interne,
utilisez plutôt le paramètre --private-ip-address.
Comme avec l'adresse IP publique, créez un équilibreur de charge standard,
redondant interzone, qui fonctionne dans les zones de disponibilité :
az network lb create \
--resource-group azuremolchapter8 \
--name loadbalancer \
--public-ip-address publicip \
--frontend-ip-name frontendpool \
--backend-pool-name backendpool \
--sku standard
Nous verrons un peu plus en détail ce qu'est le pool back-end dans quelques pages.
Figure 8.3 Une sonde d'intégrité d'équilibreur de charge basée sur les ports recherche une réponse
de la machine virtuelle sur un port et un protocole définis. Si la réponse de la machine virtuelle n'est
pas conforme à un seuil donné, la machine virtuelle est supprimée de la distribution du trafic de
l'équilibreur de charge. Lorsque la machine virtuelle commence de nouveau à répondre correctement,
la sonde d'intégrité le détecte et ajoute à nouveau la machine virtuelle à la distribution du trafic de
l'équilibreur de charge.
Figure 8.4 Une machine virtuelle qui exécute un serveur Web et dispose d'une page health.
html personnalisée reste dans la distribution du trafic de l'équilibreur de charge, à condition
que la sonde d'intégrité reçoive une réponse HTTP code 200 (OK). Si le processus du serveur
Web rencontre un problème et ne peut pas renvoyer les pages demandées, elles sont supprimées
de la distribution du trafic de l'équilibreur de charge. Ce processus offre ainsi un contrôle
plus approfondi de l'état du serveur Web qu'avec les sondes d'intégrité basées sur les ports.
Tester
Pour créer une sonde d'intégrité pour votre équilibreur de charge, comme illustré dans la
figure 8.4, procédez comme suit.
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell en haut du tableau
de bord.
2 Indiquez un nom pour la sonde d'intégrité, comme par exemple healthprobe.
Pour configurer la sonde d'intégrité pour un serveur Web, spécifiez le port 80
pour HTTP, puis définissez une page de contrôle d'intégrité personnalisée
nommée health.html. Dans la section 8.2, vous vous entraînerez à créer cette
page de contrôle d'intégrité sur vos machines virtuelles. Pour montrer comment
configurer les valeurs d'intervalle et de seuil de la sonde d'intégrité, définissez un
intervalle de 10 secondes et un seuil de trois échecs consécutifs :
az network lb probe create \
--resource-group azuremolchapter8 \
--lb-name loadbalancer \
--name healthprobe \
--protocol http \
--port 80 \
--path health.html \
--interval 10 \
--threshold 3
Une fois que la sonde d'intégrité est créée, comment faites-vous pour contrôler l'état
de vos machines virtuelles ? Les sondes d'intégrité sont associées à des règles
d'équilibrage de charge. La même sonde d'intégrité peut être utilisée avec plusieurs
règles d'équilibrage de charge. Souvenez-vous du chapitre 5, dans lequel vous avez
créé des groupes de sécurité réseau (network security group ou NSG) et des règles. Ces
NSG peuvent être associés à plusieurs machines virtuelles ou à plusieurs sous-réseaux
virtuels. Une relation un-à-plusieurs similaire s'applique aux sondes d'intégrité.
Voyons maintenant comment faire fonctionner votre sonde d'intégrité et créer des
règles d'équilibrage de charge.
8.1.3 Définition de la distribution du trafic avec des règles d'équilibrage de charge
Lorsque le trafic est dirigé via l'équilibreur de charge vers les machines virtuelles back-
end, vous pouvez définir quelles conditions doivent être remplies pour que l'utilisateur
soit dirigé vers la même machine virtuelle. Vous souhaiterez peut-être que l'utilisateur
conserve une connexion à la même machine virtuelle pendant la durée d'une seule
session, ou lui permette de revenir et de conserver son affinité de machine virtuelle en
fonction de l'adresse IP source. La figure 8.5 illustre un exemple du mode d'affinité de
session par défaut.
En mode d'affinité de session, le flux de trafic est traité par un hachage à 5 tuples qui
utilise l'adresse IP source, le port source, l'adresse IP de destination, le port de
destination et le type de protocole. En gros, pour chaque requête envoyée par un
utilisateur à votre serveur Web sur le port TCP 80, cet utilisateur est dirigé vers la même
machine virtuelle back-end pendant toute la durée de cette session.
Que se passe-t-il si le client ferme sa session de navigateur ? La prochaine fois qu'il se
connectera, une nouvelle session sera démarrée. Étant donné que l'équilibreur de
charge distribue le trafic entre toutes les machines virtuelles saines dans le pool IP back-
end, il est possible que l'utilisateur se connecte à nouveau à la même machine virtuelle ;
mais plus le pool IP back-end contient de machines virtuelles, plus l'utilisateur a de
chances de se connecter à une autre machine virtuelle.
Composants de l'équilibreur de charge Azure 113
Équilibreur de charge
Pool back-end
Règle de l’équilibreur
de charge VM 1
Session 1
Mode d’affinité de
session (par défaut)
Session 1 Hachage à 5 tuples
• IP source
Internet Session 2 • Port source VM 2
• IP destination
• Port de destination
• Type de protocole
Session 2
VM 3
Figure 8.5 Dans le mode d'affinité de session, l'utilisateur se connecte à la même machine virtuelle
back-end uniquement pour la durée de sa session.
Équilibreur de charge
Pool back-end
Règle de l’équilibreur
de charge Session 1 VM 1
Mode d’affinité IP source
Session 2
Session 1 Hachage à 2 tuples Hachage à 3 tuples
• IP source • IP source
Internet Session 2 VM 2
• IP destination • IP destination
• Protocole
VM 3
Figure 8.6 Lorsque vous configurez les règles d'équilibrage de charge pour utiliser le mode d'affinité IP
source, l'utilisateur peut fermer, puis démarrer une nouvelle session tout en continuant à se connecter à
la même machine virtuelle back-end. Le mode d'affinité IP source peut utiliser un hachage à 2 tuples qui
utilise l'adresse IP source et de destination, ou un hachage à 3 tuples qui utilise également le protocole.
114 Chapitre 8 Applications d’équilibrage de charge
Tester
Pour créer une règle d'équilibrage de charge qui utilise une sonde d'intégrité, procédez
comme suit :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell en haut du tableau
de bord.
2 Pour créer une règle d'équilibrage de charge, spécifiez un nom pour la règle,
comme par exemple httprule.
3 Indiquez le port externe sur lequel le trafic est reçu et le port interne sur lequel
le trafic doit être distribué. Dans cet exemple simple, le trafic est reçu sur le
port 80, puis distribué sur le port 80 :
az network lb rule create \
--resource-group azuremolchapter8 \
--lb-name loadbalancer \
--name httprule \
--protocol tcp \
--frontend-port 80 \
--backend-port 80 \
--frontend-ip-name frontendpool \
--backend-pool-name backendpool \
--probe-name healthprobe
Si vous exécutez plusieurs sites Web sur une machine virtuelle qui répond sur différents
ports, vous pouvez utiliser une règle donnée pour diriger le trafic vers un site Web
spécifique de la machine virtuelle.
8.1.4 Routage du trafic direct à l'aide de règles de traduction d'adresses réseau
Les règles d'équilibrage de charge distribuent le
trafic entre les pools back-end de machines
Internet virtuelles, vous n'avez donc aucune garantie de
pouvoir vous connecter à une machine virtuelle
donnée à des fins de maintenance ou de gestion.
Comment pouvez-vous vous connecter à une
Équilibreur de charge
machine virtuelle spécifique située derrière un
Règles NAT (Network Address Translation) équilibreur de charge ? La configuration de
Trafic direct : port TCP 5000 externe ->
l'équilibreur de charge comporte une dernière
port TCP 22 interne partie que nous allons maintenant examiner : les
règles de traduction d'adresse réseau (NAT). Ces
règles vous permettent de contrôler le flux d'un
trafic spécifique pour le diriger vers une seule
Groupe de sécurité réseau machine virtuelle. La figure 8.7 montre comment
les règles NAT acheminent un trafic spécifique
Groupe de sécurité réseau vers des machines virtuelles individuelles.
Autoriser le port TCP 22
externe-> port TCP 22 interne
Figure 8.7 Le trafic dans l'équilibreur de charge est traité par les
règles NAT. Si un protocole et un port correspondent à une règle, le
trafic est ensuite transmis à la machine virtuelle back-end définie.
Aucune sonde d'intégrité n'est associée, l'équilibreur de charge ne
vérifie donc pas si la machine virtuelle est en mesure de répondre avant
Machine de transférer le trafic. Le trafic quitte l'équilibreur de charge et est
ensuite traité par les règles NSG. Si le trafic est autorisé, il est
virtuelle transmis à la machine virtuelle.
Composants de l'équilibreur de charge Azure 115
Les règles NAT fonctionnent avec des règles NSG. La machine virtuelle ne peut
recevoir le trafic que s'il existe une règle NSG qui autorise le même trafic que la règle
NAT de l'équilibreur de charge.
Pourquoi créer des règles NAT ? Imaginons que vous souhaitiez utiliser SSH ou RDP
pour vous connecter à une machine virtuelle spécifique (et que vous n'utilisiez pas
Azure bastion, que j’ai mentionné au chapitre 2) ou utiliser des outils de gestion pour
vous connecter à un serveur de base de données back-end. Si l'équilibreur de charge
distribue le trafic entre les machines virtuelles back-end, il vous faudra essayer encore et
encore de vous connecter, sans aucune garantie de pouvoir vous connecter à la machine
virtuelle souhaitée.
Priorité à la sécurité
Des thèmes de sécurité seront abordés dans la partie 3 de ce livre, mais vous devez
toujours garder la question de la sécurité à l'esprit lorsque vous créez et exécutez des
applications dans Azure. La sécurité ne doit pas être une question secondaire, que l'on
remet à plus tard. Avec l'essor du cloud computing et des machines virtuelles et
applications Web « jetables », il devient facile d'oublier certaines pratiques de sécurité de
base. En particulier si vous travaillez dans Azure dans le cadre d'un abonnement
d'entreprise, assurez-vous que les ressources que vous créez n'offrent pas,
involontairement, un moyen pour les pirates d'accéder à votre infrastructure.
Quelles pratiques faut-il éviter ? En fait, des choses que vous avez déjà faites dans le
cadre de ce livre ! Les ports de gestion à distance pour SSH et RDP ne doivent pas être
ouverts à l'Internet public comme vous avez pu le faire, ou à tout le moins, vous devez
restreindre l'accès à une plage d'adresses IP spécifiques.
La bonne pratique consiste à utiliser un service géré tel qu’Azure bastion ou
à créer manuellement une VM sécurisée compatible avec la gestion à distance. Selon
les besoins, vous connectez l'hôte Azure Bastion à cette machine virtuelle sécurisée,
puis vous vous connectez sur le réseau virtuel Azure à des machines virtuelles
supplémentaires. Vous avez utilisé cette approche simple de machine virtuelle jumpbox
au chapitre 5. Elle permet de limiter la surface d'attaque et réduit la nécessité de recourir
à des règles NSG et des règles NAT d'équilibrage de charge. Le chapitre 16 présente
Azure Security Center et explique comment vous pouvez formuler des requêtes en
dynamique et ouvrir des ports de gestion à distance pour une période de temps
spécifique, ce qui constitue la meilleure solution.
Même si vous travaillez dans le cadre d'un abonnement Azure privé sans aucun lien avec
d'autres abonnements Azure (éducatifs ou professionnels), essayez de limiter la
connectivité à distance fournie.
Tester
Pour créer une règle NAT d'équilibrage de charge, procédez comme suit :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell en haut du tableau
de bord.
2 Pour créer une règle NAT d'équilibrage de charge, définissez un nom, comme
par exemple natrulessh, ainsi que le pool IP front-end à utiliser. La règle NAT
examine le trafic sur un protocole et un port donnés, par exemple le port
TCP 50001. S'il y a correspondance avec la règle, le trafic est transféré vers le
port 22 back-end :
116 Chapitre 8 Applications d’équilibrage de charge
À ce stade, vous avez créé un équilibreur de charge de base. Examinez comment les
différents composants de l'équilibreur de charge ont été regroupés :
az network lb show \
--resource-group azuremolchapter8 \
--name loadbalancer
Une adresse IP publique a été affectée au pool IP front-end, et vous avez créé une
sonde d'intégrité afin de contrôler l'état sur une page de contrôle d'intégrité
personnalisée pour un serveur Web. Une règle d'équilibrage de charge a été créée
pour distribuer le trafic Web provenant de vos clients vers un pool back-end, et elle
utilise la sonde d'intégrité. Vous avez également une règle NAT d'équilibrage de charge
qui autorise le trafic SSH. Il n'y a cependant pas encore de machine virtuelle pour
recevoir ce trafic. Pour ne pas faire attendre plus longtemps les clients de votre pizzeria,
je vous propose de créer des machines virtuelles capables d'exécuter votre application
Web et auxquelles l'équilibreur de charge peut distribuer le trafic !
Équilibreur de charge
Pool back-end : Machines virtuelles
de couche applicative
VM 1 VM 2 VM 3
Figure 8.8 Il est possible de créer un ou plusieurs pools back-end dans un équilibreur de charge.
Chaque pool back-end contient une ou plusieurs machines virtuelles qui exécutent le même composant
d'application. Dans cet exemple, un pool back-end contient les machines virtuelles qui exécutent la
couche application Web, et l'autre pool back-end contient les machines virtuelles qui fournissent les
contenus multimédias, comme par exemple les images et la vidéo.
Composants de l'équilibreur de charge Azure 117
Vous créez et utilisez un équilibreur de charge avec des machines virtuelles, mais tout
se passe au niveau du réseau virtuel. Le pool IP front-end utilise des adresses IP
publiques ou privées. La sonde d'intégrité examine les réponses au niveau d'un port
ou d'un protocole donné. Même en cas d'utilisation d'une sonde HTTP, l'équilibreur
de charge recherche une réponse positive du réseau. Les règles d'équilibrage de
charge mettent l'accent sur la méthode utilisée pour distribuer le trafic à partir d'un
port externe du pool front-end vers un port du pool back-end.
Lorsque vous affectez des machines virtuelles au pool back-end qui reçoit le trafic
distribué par l'équilibreur de charge, c'est la carte réseau virtuelle qui se connecte à
l'équilibreur de charge. Il arrive que les machines virtuelles se connectent à la carte réseau
virtuelle. Si vous repensez au chapitre 5, cette séparation entre les machines virtuelles et
la carte réseau virtuelle est logique en termes de gestion des ressources. Les règles NSG
contrôlent le trafic autorisé à circuler vers la machine virtuelle, mais elles sont appliquées
à un sous-réseau virtuel ou à une carte réseau virtuelle, et non à la machine virtuelle.
Quelles sont les implications sur la façon dont vous configurez les pools IP back-end?
Vous devez créer vos autres ressources réseau virtuelles avant de pouvoir connecter une
machine virtuelle à l'équilibreur de charge. La procédure de création des ressources
réseau devrait vous rappeler ce que vous avez déjà appris dans un précédent chapitre,
alors voyons maintenant ce que vous avez retenu !
Réseau virtuel
Sous-réseau
Tester
Pour créer les ressources réseau supplémentaires comme illustré à la figure 8.9,
procédez comme suit :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell en haut du tableau
de bord.
2 Créez un réseau virtuel et un sous-réseau :
az network vnet create \
--resource-group azuremolchapter8 \
--name vnetmol \
--address-prefixes 10.0.0.0/16 \
118 Chapitre 8 Applications d’équilibrage de charge
--subnet-name subnetmol \
--subnet-prefix 10.0.1.0/24
Dans la pratique, il y a de fortes chances pour que ces ressources réseau existent
déjà. Les noms et plages d'adresses IP sont également les mêmes que ceux que
vous avez utilisés au chapitre 5. Étant donné que vous devez supprimer les
ressources Azure à la fin de chaque chapitre, cette réutilisation des plages
d'adresses IP ne devrait pas poser problème. N'oubliez pas simplement que,
généralement, vous n'avez pas à créer un réseau virtuel et un sous-réseau chaque
fois que vous créez un équilibreur de charge. Vous pouvez plutôt utiliser les
ressources réseau virtuelles existantes.
3 Créez un NSG :
az network nsg create \
--resource-group azuremolchapter8 \
--name webnsg
4 Créez une règle NSG qui autorise le trafic provenant du port TCP 80 à atteindre
vos machines virtuelles. Cette règle est nécessaire pour que les machines
virtuelles de serveur Web puissent recevoir le trafic client et y répondre :
az network nsg rule create \
--resource-group azuremolchapter8 \
--nsg-name webnsg \
--name allowhttp \
--priority 100 \
--protocol tcp \
--destination-port-range 80 \
--access allow
5 Ajoutez une autre règle afin d'autoriser le trafic SSH pour la gestion à distance.
Cette règle NSG fonctionne avec la règle NAT d'équilibrage de charge créée
dans la section 8.1.4 pour l'une de vos machines virtuelles :
az network nsg rule create \
--resource-group azuremolchapter8 \
--nsg-name webnsg \
--name allowssh \
--priority 101 \
--protocol tcp \
--destination-port-range 22 \
--access allow
6 Associez le NSG au sous-réseau créé à l'étape 2. Les règles NSG sont appliquées à
toutes les machines virtuelles qui se connectent à ce sous-réseau :
az network vnet subnet update \
--resource-group azuremolchapter8 \
--vnet-name vnetmol \
--name subnetmol \
--network-security-group webnsg
7 Étant donné que l'équilibreur de charge fonctionne avec des cartes réseau
virtuelles, créez deux cartes réseau virtuelles et connectez-les au sous-réseau
virtuel. Spécifiez également le nom de l'équilibreur de charge
et le pool d'adresses back-end auquel se connectent les cartes réseau virtuelles.
La règle NAT d'équilibrage de charge n'est associée qu'à la première carte réseau
virtuelle qui est créée :
Création et configuration de machines virtuelles avec l'équilibreur de charge 119
8 Procédez de la même façon pour créer la deuxième carte réseau, mais sans la
règle NAT d'équilibrage de charge :
az network nic create \
--resource-group azuremolchapter8 \
--name webnic2 \
--vnet-name vnetmol \
--subnet subnetmol \
--lb-name loadbalancer \
--lb-address-pools backendpool
Internet
Équilibreur
de charge
Adresse IP publique
Pool IP front-end
Sonde d’intégrité
Sonde pour vérifier health.html
sur les VM back-end
Règles d’équilibrage de charge
Autoriser les entrées sur port TCP 80 ->
port TCP 80 sur pool back-end
les cartes réseau virtuelles doivent être connectées à l'équilibreur de charge. Ces cartes
réseau virtuelles ont besoin d'un réseau virtuel et d'un sous-réseau, et elles doivent
idéalement être protégées par un NSG. Les machines virtuelles qui exécutent ensuite
votre application n'ont presque rien à voir avec les étapes à suivre pour créer et
configurer l'équilibreur de charge !
Vous avez créé de nombreuses ressources réseau et configuré plusieurs parties de
l'équilibreur de charge. L'adresse IP publique et l'équilibreur de charge ont été créés
dans une zone de disponibilité en tant que ressources redondantes interzone, je vous
propose donc de créer deux machines virtuelles dans des zones différentes pour
multiplier les chances que les zones de disponibilité améliorent la haute disponibilité
de vos applications.
Si vous utilisez des groupes à haute disponibilité plutôt que des zones de disponibilité,
c'est à ce stade que vous créez un groupe à haute disponibilité et y ajoutez vos machines
virtuelles. La plateforme Azure distribue ensuite les machines virtuelles entre les domaines
d'erreur et de mise à jour. Puisque vous souhaitez optimiser l'utilisation des fonctionnalités
de haute disponibilité d'Azure pour votre pizzeria, utilisez des zones de disponibilité.
Tester
Pour créer les machines virtuelles et les associer à l'équilibreur de charge, procédez
comme suit :
Pour observer l'équilibreur de charge en action, vous devez installer un serveur Web
de base, comme vous l'avez fait au chapitre 2. Vous pouvez également tester la règle
NAT d'équilibrage de charge. Est-ce que vous commencez maintenant à voir en quoi
tous ces composants dans Azure sont liés et interdépendants ?
Création et configuration de machines virtuelles avec l'équilibreur de charge 121
Tester
Au chapitre 5, nous avons abordé le sujet de l'agent SSH. L'agent SSH vous permet de
transférer une clé SSH d'une machine virtuelle à la suivante. Seule la machine virtuelle 1
est associée à une règle NAT d'équilibrage de charge, vous devez donc utiliser l'agent
pour vous connecter à la machine virtuelle 2. Pour installer un serveur Web sur vos
machines virtuelles, procédez comme suit :
1 Démarrez l'agent SSH, puis ajoutez votre clé SSH afin de pouvoir vous connecter
aux deux machines virtuelles :
eval $(ssh-agent) && ssh-add
Au chapitre 2, vous avez utilisé apt-get pour installer la totalité de la pile LAMP
qui contenait le serveur Web Apache. Voyons quelque chose d'un peu différent
du serveur Web Apache, avec le serveur Web autonome mais puissant NGINX.
Sur une machine virtuelle Windows, c'est généralement là que vous installez IIS.
Pour installer le serveur Web NGINX , exécutez la commande suivante :
sudo apt update && sudo apt install -y nginx
4 Le référentiel d'exemples GitHub que vous avez utilisé dans les chapitres
précédents contient une page Web HTML de base et une page de contrôle
d'intégrité pour la sonde d'intégrité de l'équilibreur de charge. Clonez ces
exemples sur la machine virtuelle :
git clone https://github.com/fouldsy/azure-mol-samples-2nd-ed.git
Figure 8.11 Lorsque vous ouvrez l'adresse IP publique de l'équilibreur de charge dans un navigateur
Web, le trafic est distribué sur l'une des machines virtuelles qui exécutent votre site Web de base.
La sonde d'intégrité de l'équilibreur de charge utilise la page health.html pour confirmer les réponses
du serveur Web avec un code HTTP 200 (OK). Si c'est le cas, la machine virtuelle devient ensuite
disponible dans le cadre de la distribution du trafic de l'équilibreur de charge.
Figure 8.12 Sur le portail Azure, sélectionnez le groupe de ressources de votre équilibreur de charge et
affichez le modèle Resource Manager.
9
Dans les deux chapitres précédents, nous avons vu comment créer des applications
hautement disponibles et utiliser des équilibreurs de charge pour distribuer le trafic
vers plusieurs machines virtuelles exécutant votre application. Mais comment
pouvez-vous exécuter et gérer efficacement plusieurs machines virtuelles, et
exécuter le bon nombre d'instances de VM lorsque vos clients en ont le plus besoin ?
Lorsque la demande clients augmente, vous souhaitez augmenter automatiquement
l'échelle de votre application pour faire face à cette demande. Et lorsque la demande
diminue, par exemple au milieu de la nuit, lorsque la plupart des personnes sans
jeunes enfants dorment, vous souhaitez réduire l'échelle de l'application pour
économiser un peu d'argent.
Dans Azure, vous pouvez automatiquement dimensionner vos ressources IaaS
comme il convient à l'aide de VMSS (Virtual Machine Scale Sets, ou groupes de
machines virtuelles identiques). Ces VMSS exécutent des machines virtuelles
identiques, généralement distribuées derrière un équilibreur de charge ou une
passerelle d'application. Vous définissez des règles de mise à l'échelle automatique
qui augmentent ou diminuent le nombre d'instances de VM en fonction de la
demande clients. L'équilibreur de charge ou la passerelle d'application se charge de
distribuer automatiquement le trafic vers les nouvelles instances de machine
virtuelle, ce qui vous permet de vous concentrer sur la façon de mieux bâtir et
exécuter vos applications. Les groupes VMSS vous donnent les moyens de contrôler
vos ressources IaaS avec certains des avantages du PaaS en termes d'élasticité. Les
applications Web, que nous n'avons pas beaucoup couvertes dans les deux derniers
chapitres, reviennent désormais en force dans ce chapitre, avec leur propre capacité
à évoluer en fonction de la demande.
Dans ce chapitre, nous allons voir comment concevoir et créer des applications à
même de se mettre à l'échelle automatiquement. Nous verrons en quoi cette capacité
d'adaptation à la demande vous aide à exécuter des applications efficaces, et
explorerons différentes manières de mettre une application à l'échelle compte tenu
de différentes métriques.
124
Pourquoi créer des applications évolutives, fiables ? 125
L’une des utilisations les plus courantes de la mise à l'échelle verticale concerne les
serveurs de base de données. Les bases de données sont notoirement gourmandes en
ressources de calcul, plus encore que ne le sont de vos pizzas les clients de votre pizzeria !
Les serveurs de base de données consomment souvent toutes les ressources fournies à
une VM, même s'ils ne les utilisent pas immédiatement. Dans ces conditions, il peut
s'avérer difficile de suivre la demande réelle sur le système et de savoir quand une mise
à l'échelle verticale s'impose pour fournir plus de ressources. La figure 9.2 illustre la
manière dont la mise à l'échelle verticale répond typiquement à une augmentation des
besoins en ressources d'un serveur de base de données.
Augmentaon de la puissance
vCPU vCPU de traitement (vCPU) vCPU vCPU vCPU vCPU
vCPU vCPU vCPU vCPU vCPU vCPU
Augmentaon de la
vRAM vRAM mémoire (vRAM) vRAM vRAM vRAM vRAM
vRAM vRAM vRAM vRAM vRAM vRAM
vRAM vRAM vRAM
Figure 9.2 À mesure qu'une base de données prend de l'embonpoint, elle a besoin de plus de
ressources pour stocker et traiter les données en mémoire. Pour une mise à l'échelle verticale dans
ce scénario, vous ajoutez plus d'UC et de mémoire.
Vous pouvez avoir besoin d'une mise à l'échelle sur d'autres paramètres que la capacité
UC et la mémoire. Prenons le cas d'un site Web qui sert beaucoup d'images ou de
vidéos. Il se peut qu'il n'y ait pas beaucoup de besoins de traitement, mais la demande
en bande passante peut être élevée. Pour augmenter la bande passante disponible,
vous pouvez augmenter le nombre de cartes réseau sur votre machine virtuelle. Et si
vous avez besoin de stocker plus d'images et de vidéos, vous ajoutez du stockage. Vous
pouvez ajouter ou supprimer des ressources telles que des cartes réseau virtuelles et du
stockage alors même que la machine virtuelle s'exécute.
Redimensionnement des machines virtuelles
Dans Azure, vous pouvez augmenter la taille d'une VM (montée en puissance) si vous
avez besoin de plus de ressources de calcul pour votre application. Au chapitre 2, vous
avez créé une machine virtuelle de base Sa taille était probablement du type Standard_
D2s_v3. Ce nom ne vous renseigne pas beaucoup sur les ressources de calcul affectées
à la machine virtuelle pour déterminer s'il est souhaitable d'augmenter la capacité UC
ou la mémoire à sa disposition. Pour réaliser une mise à l'échelle verticale, vous devez
savoir quelles sont vos options.
Tester
Suivez les instructions fournies pour déterminer la taille et les ressources de calcul des
machines virtuelles disponibles :
4 8192 Standard_D2s_v3 2
8 16384 Standard_D4s_v3 4
16 32768 Standard_D8s_v3 8
32 65536 Standard_D16s_v3 16
8 4096 Standard_F2s_v2 2
16 8192 Standard_F4s_v2 4
32 16384 Standard_F8s_v2 8
2 2048 Standard_B1ms 1
2 1024 Standard_B1s 1
4 8192 Standard_B2ms 2
4 4096 Standard_B2s 2
Ainsi, votre VM Standard_D2s_v3 vous fournit deux cœurs d'UC et 8 Go de mémoire. C'est
plus que suffisant pour une machine virtuelle de base qui exécute un serveur Web.
Supposons que les prises de commande de votre pizzeria en ligne se mettent à exploser, et
que vous souhaitiez réaliser une mise à l'échelle verticale. Il vous suffit d'utiliser az vm
resize pour choisir une autre taille. Vous spécifiez la taille de machine virtuelle qui offre
le nombre de cœurs d'UC et la quantité de mémoire dont votre application a besoin.
La capacité UC et la mémoire supplémentaires n'apparaissent pas pour autant
comme par magie sur votre machine virtuelle. Ce comportement peut à cet égard être
un peu différent de celui que vous observez avec Hyper-V ou VMware dans un contexte
de ressources sur site. Dans des limites raisonnables, vous pouvez ajouter ou supprimer
des ressources de calcul de base dans un environnement sur site sans interrompre
l'exécution de la VM. Dans Azure, un redémarrage de la machine virtuelle est
généralement nécessaire lorsque vous la redimensionnez pour enregistrer les nouvelles
ressources de calcul et déclencher les règles de facturation appropriées. Lorsque vous
souhaitez mettre en œuvre une mise à l'échelle verticale, prévoyez un certain temps
d'arrêt pour le redémarrage de la machine virtuelle.
Mise à l’échelle à un niveau inférieur
Et si vous avez une VM qui dispose de plus de ressources qu'il ne lui en faut ? Ce
scénario est souvent plus courant que celui d'une machine virtuelle qui n'en a pas
assez. Les propriétaires d'application choisissent parfois une taille de VM sensiblement
supérieure à ce dont ils ont besoin, pour s'assurer du bon fonctionnement de leur
application. Toutes ces ressources gaspillées coûtent de l'argent, et leur coût passe
facilement inaperçu jusqu'à ce que la facture arrive à la fin du mois.
La mise à l'échelle des ressources est possible dans les deux sens. Nous avons
beaucoup parlé de la montée en puissance des ressources, mais les mêmes principes
s'appliquent pour leur descente en puissance. Il est important d’identifier les tailles de
machine virtuelle utilisées et le poids de la demande des applications sur ces ressources.
Vous pouvez ensuite au besoin utiliser la commande az vm resize pour choisir une
taille de machine virtuelle avec moins de cœurs et de mémoire. Ici aussi, comme pour
toute opération de redimensionnement, un redémarrage de la VM est nécessaire.
9.1.2 Mise à l'échelle des applications Web verticalement
Les applications Web peuvent être mises à l'échelle verticalement pour adaptation aux
besoins en ressources de la même manière que les machines virtuelles. Lorsque vous
avez créé une application Web au chapitre 3, la taille Standard S1 par défaut vous a
128 Chapitre 9 Des applications évolutives
fourni un cœur d'UC et 1,75 Go de RAM. Chaque niveau et chaque taille d'application
Web fournit une quantité définie de ressources, dont des cœurs d'UC, de la mémoire
et des emplacements de préproduction. Le principe reste le même si la taille ou
l'allocation de ressources par défaut change, ou que vous choisissez une taille
d'application Web différente.
Si, après avoir créé votre application Web, vous vous apercevez que l'application
requiert plus de ressources que ce que prévoit le plan de service, vous pouvez changer
de niveau, comme illustré à la figure 9.3. Cette possibilité vous est également offerte si
vous constatez un trop-plein de ressources par rapport à ce dont vous avez besoin.
En procédant manuellement de cette façon, vous pouvez ainsi mettre verticalement
à l'échelle votre application Web en fonction des besoins.
Figure 9.3 Pour mettre manuellement à l'échelle une application Web verticalement, vous modifiez le
niveau de tarification (taille) du plan de service d'application sous-jacent. Le plan de service
d'application définit la quantité de ressources affectées à votre application Web. Si votre application
nécessite une quantité de stockage, un nombre d'UC ou des emplacements de déploiement différents,
vous pouvez changer de niveau pour adapter les ressources affectées à la demande de l'application.
Figure 9.4 Pour faire face à une augmentation de la demande de votre application, vous pouvez augmenter
le nombre de VM qui exécutent l'application en distribuant la charge sur plusieurs machines virtuelles plutôt
que sur des machines virtuelles à instance unique de plus en plus volumineuses. La charge est ainsi répartie
sur plusieurs machines virtuelles, plutôt que de se concentrer sur une instance unique de machine virtuelle
de plus en plus gonflée.
vous pouvez avoir un composant d'application destiné à recevoir les commandes Web
front-end, et un autre chargé de traiter ces commandes et de les transmettre à la
pizzeria. L'utilisation de files de messages est une approche de la conception et de
l'écriture d'applications à même de fonctionner dans un environnement à évolutivité
horizontale. Cette approche vous permet également de mettre à l'échelle chaque
composant d’application séparément et d'utiliser différentes tailles de VM ou
d'application Web pour optimiser l'efficacité et réduire votre facture mensuelle.
Historiquement, on faisait de la mise à l'échelle verticale car il était plus facile de
déverser des ressources de calcul supplémentaires sur une application en espérant que
cela fasse son bonheur. La mise en place d'un cluster de ressources et la mise à l'échelle
d'une application à l'horizontale étaient souvent complexes dans le monde physique.
Avec le cloud computing et la virtualisation, les problématiques liées à la mise à l'échelle
horizontale ont été à ce point minimisées que vous pouvez souvent mettre une application
à l'échelle plus rapidement à l'horizontale qu'à la verticale, et sans temps d'arrêt.
Rappelez-vous de la commande az vm resize plus tôt dans ce chapitre. Que se
passe-t-il à l'issue de l'opération de redimensionnement de la machine virtuelle ? La VM
redémarre. S'il s'agit de la seule instance de votre application, personne ne peut plus y
accéder jusqu'à ce qu'elle soit de nouveau en ligne. Dans le cas d'une mise à l'échelle
horizontale, il n'y a pas de temps d'arrêt lorsque vous ajoutez des instances de VM ; une
fois les nouvelles machines virtuelles fin prêtes, elles prennent automatiquement en
charge une partie des demandes de l'application. Les sondes d'intégrité de l'équilibreur
évoquées (évoquées chapitre 8) détectent automatiquement la présence dans le pool
back-end de toute nouvelle machine virtuelle prête à participer au traitement des
demandes des clients, laquelle se voit dès lors distribuer du trafic.
Azure a été conçu pour vous offrir le maximum de souplesse et de choix en matière
d'évolutivité. Si vous concevez un nouvel environnement applicatif, je vous suggère
l'approche de la mise à l'échelle horizontale. Les VM ont une extension sympa dans
Azure qui peut vous être utile en la matière : les VMSS (ou Virtual Machine Scale Sets).
VMSS
Zone de disponibilité 1
VM 1
Zone de disponibilité 2
Équilibreur
Internet de charge VM 2
Zone de disponibilité 2
VM 3
Figure 9.5 Un VMSS est un groupe logique de machines virtuelles. Les VM sont identiques et peuvent
être gérées, mises à jour et mises à l'échelle de manière centralisée. Vous pouvez définir des métriques
qui augmentent ou diminuent automatiquement le nombre de machines virtuelles présentes dans le
groupe VMSS en fonction de la charge de votre application.
Tester
Pour créer un VMSS avec la CLI Azure, procédez comme indiqué ci-après :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell en haut du tableau
de bord.
2 Créez un groupe de ressources à l'aide de la commande az group create, en
spécifiant un nom de groupe de ressources, par exemple azuremolchapter9, et
un emplacement :
az group create --name azuremolchapter9 --location westeurope
Les groupes VMSS peuvent utiliser des zones de disponibilité ; assurez-vous par
conséquent de sélectionner une région où le support est disponible.
3 Pour créer un VMSS, spécifiez le nombre d'instances de machine virtuelle
souhaitées et indiquez la façon dont ces instances doivent gérer les mises à jour
de leur configuration. Lorsque vous apportez une modification aux machines
virtuelles, par exemple pour l'installation d'une application ou l'implémentation
d'une mise à jour du système d'exploitation invité, elles peuvent se mettre à jour
automatiquement dès qu'elles détectent la modification. Ou vous pouvez définir
la stratégie de mise à niveau sur manual pour vous laisser le choix du meilleur
moment pour l'application des mises à jour. Les autres paramètres sont les
mêmes que pour la création d'une machine virtuelle unique et devraient vous
être familiers :
az vmss create \
--resource-group azuremolchapter9 \
--name scalesetmol \
--image UbuntuLTS \
--admin-username azuremol \
--generate-ssh-keys \
--instance-count 2 \
--vm-sku Standard_B1ms \
--upgrade-policy-mode automatic \
--lb-sku standard \
--zones 1 2 3
C'est tout ! Vous avez créé plusieurs machines virtuelles dans une zone de disponibil-
ité, avec capacité de mise à l'échelle. Et maintenant, voici la surprise que vous réserve
ce VMSS que vous venez de créer avec la CLI Azure. Vous vous souvenez du chapitre 8
sur les équilibreurs de charge, de toutes ces commandes CLI que vous avez dû utiliser
et de ce que nous avons vu sur les modèles pour simplifier la création d'un équilibreur
de charge ? Avec cette commande az vmss create, la bonne nouvelle est que vous
avez automatiquement créé et configuré un équilibreur de charge !
132 Chapitre 9 Des applications évolutives
Pour demander une augmentation de vos quotas pour une région, suivez les étapes
décrites à la page http://mng.bz/Xq2f.
Tester
Vérifiez les ressources créées avec votre VMSS, comme indiqué dans les prochaines
com mandes.
Pour voir les ressources qui ont été créées avec votre VMSS, exécutez la commande
suivante :
az resource list \
--resource-group azuremolchapter9 \
--output table
La sortie est du type de celle présentée ci-dessous. La colonne Type vous apporte la
confirmation qu'un réseau virtuel, une adresse IP publique et un équilibreur de charge
ont été créés :
Nom
Groupe de ressources Type
Qu'est-ce que toute cette magie signifie au juste ? Lorsque vous créez un VMSS avec la
CLI Azure, un équilibreur de charge à redondance interzone et une adresse IP publique
sont automatiquement créés sans que vous n'ayez rien à faire. Les machines virtuelles
sont créées et ajoutées à un pool d'adresses IP back-end sur l'équilibreur de charge. Des
règles NAT sont créées qui vous permettent de vous connecter aux instances de machine
Les VMSS (Virtual Machine Scale Sets), ou groupes de machines virtuelles identiques 133
virtuelle. La seule chose qui manque, ce sont les règles de l'équilibreur de charge, car
celles-ci varient en fonction des applications que vous souhaitez exécuter. Lorsque vous
ajoutez ou supprimez des machines virtuelles dans le VMSS, la configuration de
l'équilibreur de charge se met automatiquement à jour pour permettre la distribution
du trafic vers les nouvelles instances. Cette magie ne se limite pas à la CLI Azure : si vous
utilisez Azure PowerShell ou le portail Azure, ces ressources réseau de prise en charge
sont automatiquement créées et connectées pour opérer de concert.
Tester
Votre VMSS a été créé avec deux instances. Vous pouvez mettre manuellement
à l'échelle le nombre d'instances de VM de votre VMSS. Lorsque vous effectuez une telle
mise à l'échelle, l'équilibreur de charge met automatiquement à jour la configuration du
pool d'adresses IP back-end. Définissez le paramètre --new-capacity du
VMSS sur quatre instances comme suit :
az vmss scale \
--resource-group azuremolchapter9 \
--name scalesetmol \
--new-capacity 4
VMSS
VMSS VMSS
VM 1 VM 2 VM 3
VM 1 VM 2 VM 3 Augmentation Diminution VM 1 VM 2
de la charge de la charge
VM 4 VM 5
Mise à l’échelle automatique
Mise à l’échelle automatique par diminution du nombre
par augmentation du nombre d’instances de VM
d’instances de VM
Figure 9.6 Les VMSS peuvent se mettre automatiquement à l'échelle en augmentant ou en diminuant leur nombre
d'instances. Au moyen de règles que vous définissez, vous surveillez certaines métriques qui déclenchent au moment
opportun une augmentation ou une diminution des instances de VM exécutées. Le nombre d'instances de machine
virtuelle s'ajuste de la sorte au niveau de la demande sur votre application. Vous assurez ainsi des performances et
une disponibilité optimales de votre application, tout en éliminant les coûts inutiles lorsque la charge diminue.
134 Chapitre 9 Des applications évolutives
Vous pouvez baser les règles applicables à votre VMSS sur différentes métriques. Vous
pouvez utiliser les métriques de l'hôte pour suivre la consommation des ressources de
base, configurer la collecte de métriques au niveau de la machine virtuelle invitée pour
l'analyse de compteurs de performance spécifiques pour l'application, ou utiliser
Azure Application Insights pour surveiller en profondeur le code de l'application.
Vous pouvez également utiliser la planification pour imposer la présence dans le
VMSS d'un nombre spécifique d'instances de machine virtuelle sur des fenêtres de
temps données. Dans l’exemple d’une application professionnelle commune pour
laquelle la demande est plus élevée pendant les heures de travail qu'en soirée, vous
pouvez définir un nombre fixe plus élevé d’instances à exécuter pendant les heures
d’ouverture et définir un nombre fixe d'exécution d'instances le soir.
Avec des règles de mise à l'échelle automatique basées sur des métriques, les
performances seront scrutées sur un intervalle de temps défini, par exemple 5 minutes,
et quelques minutes pourront encore être nécessaires pour lancer les nouvelles instances
de machine virtuelle et les configurer pour utilisation par l'application. Avec une
planification fixe pour l'ajustement automatique du nombre d'instances de machine
virtuelle dans votre VMSS, les ressources supplémentaires entreront en scène à l'heure
dite, et l'équilibreur de charge leur distribuera le trafic sur toute la plage de temps définie.
L'utilisation d'une planification nécessite une base de référence concernant la demande
type sur l'application et ne tient pas compte des augmentations et des baisses de demande
ici ou là sur le compte commercial ou le cycle de vente. Vous pouvez donc vous retrouver
avec plus de ressources que vous n'en avez besoin à certains moments, et donc payer parfois
plus que nécessaire. Et il peut aussi y avoir des moments où la charge de l'application est
trop forte pour le nombre d'instances de VM que le VMSS est en mesure de mobiliser.
Tester
Pour créer des règles de mise à l'échelle automatique pour un VMSS, procédez comme
indiqué ci-après :
Figure 9.8 Vous devez à présent avoir une règle qui augmente le nombre d'instances d'une unité
lorsque la charge UC moyenne dépasse les 70 % et une autre règle qui diminue ce nombre d'une unité
lorsque la charge UC moyenne se situe sous les 30 %.
Vous pouvez également configurer des règles de mise à l'échelle automatique avec la
CLI Azure, Azure PowerShell ou dans des modèles. Le portail offre une interface
commode pour la consultation des règles et la visualisation des
options disponibles pour chaque paramètre. Pour les règles complexes, les modèles vous
permettent de créer des VMSS avec le même jeu de règles de manière reproductible.
Je ne voudrais surtout pas que les prochaines pages vous donnent le sentiment que je
passe un peu vite sur la façon d'apporter aux applications Web la même haute
disponibilité ainsi que les mêmes capacités de mise à l'échelle. Le fait est que tout est
beaucoup plus simple les concernant ! Le choix entre IaaS et PaaS s'inscrit dans la
recherche d'un équilibre entre flexibilité et facilité de gestion. Une grande partie de la
redondance sous-jacente est abstraite dans les services PaaS tels que les applications
Web. Inutile donc de consacrer toute une section à la haute disponibilité et une autre
encore aux équilibreurs de charge.
Le choix de l'IaaS pour générer et exécuter vos propres VM ou VMSS avec des
équilibreurs de charge et des zones de disponibilité peut tenir à un besoin ou une
restriction de l'entreprise. Les développeurs, les ingénieurs d'exploitation ou les outils
et workflows peuvent ne pas être prêts à faire avec des applications Web. Ceci étant dit,
je vous encourage vivement à considérer cette option pour le déploiement de vos
nouvelles applications. L'utilisation de composants PaaS, tels que des applications Web,
vous permet de vous concentrer davantage sur vos applications et vos clients en évitant
de perdre du temps sur l'infrastructure et l'administration.
Tester
Pour créer une application Web avec la CLI Azure, procédez comme indiqué ci-après :
1 Au chapitre 3, vous avez créé une application Web sur le portail Azure. Comme
pour la plupart des ressources, il est souvent plus rapide et plus facile d'utiliser la
CLI Azure. Ouvrez Cloud Shell dans le portail Azure.
2 Créez un plan de service d'application de taille Standard S1. Cette taille vous per-
met d'ajouter jusqu’à 10 instances de votre application Web pour sa mise à
l'échelle automatique :
az appservice plan create \
--name appservicemol \
--resource-group azuremolchapter9 \
--sku s1
3 Créez une application Web utilisant un référentiel Git local pour le déploiement,
comme vous l'avez fait au chapitre 3 :
az webapp create \
--name webappmol \
--resource-group azuremolchapter9 \
--plan appservicemol \
--deployment-local-git
Tous les concepts et scénarios évoqués à la section 9.2.2 autour des règles et
planifications de mise à l'échelle automatique pour les VMSS s'appliquent aux
applications Web. Les scénarios les plus courants de mise à l'échelle automatique d'une
application Web sont les suivants :
¡ Augmentation ou diminution automatique du nombre d'instances de
l'application Web compte tenu de métriques de performance, pour adaptation
à la demande sur l'application tout au long de la journée de travail.
¡ Planification déclenchant automatiquement une augmentation du nombre
d'instances de l'application Web au début de la journée de travail, puis une
diminution du nombre d'instances à la fin de la journée.
138 Chapitre 9 Des applications évolutives
Dans le cas de notre pizzeria, l'application Web peut voir sa charge de trafic augmenter
plus tard dans la journée et tout au long de la soirée , le jeu de règles de mise à l'échelle
automatique est donc bien sûr à adapter en fonction de la situation. Encore une fois,
vous devez étudier les performances de votre application pour comprendre son
fonctionnement en conditions normales d'utilisation et pour déterminer la métrique
de performance la plus pertinente pour le déclenchement d'une augmentation ou
d'une réduction de son nombre d'instances. Et même dans le cas d'une mise à l'échelle
automatique basée sur une planification, un suivi s'impose pour déterminer quand
surviennent les pics de demande sur votre application et créer les règles appropriées
pour soutenir ce modèle d'utilisation.
Tester
Pour créer des règles de mise à l'échelle automatique pour une application Web, procé-
dez comme indiqué ci-après :
Autant les VMSS que les applications Web vous permettent de créer des règles qui
dimensionnent automatiquement le nombre d'instances qui exécutent vos applications.
Avec plusieurs instances pour exécuter votre application, vous augmentez également la
disponibilité sa disponibilité. Les VMSS sont un bon terrain d’entente pour les développeurs
et les décisionnaires, qui souhaitent ou ont besoin d'un côté de créer des applications sur
des machines virtuelles et cherchent d'un autre côté le bénéfice de fonctionnalités de type
PaaS pour la mise à l'échelle automatique et la reconfiguration du flux de trafic client.
Dans le chapitre 11, nous allons examiner Azure Traffic Manager, qui complète ces
déploiements haute disponibilité. À l’heure actuelle, vous n’êtes pas encore prêt à passer
à la production car il vous manque plusieurs VMSS redondants ou instances d’applications
Web parmi lesquels le trafic est automatiquement réparti. Nous y viendrons bientôt.
3 Installez un serveur Web NGINX de base sur chaque instance de machine virtuelle
avec apt install. Repensez à la façon dont vous avez procédé au chapitre 8.
4 Pour voir le VMSS en action, ouvrez l'adresse IP publique de l'équilibreur de
charge du VMSS dans un navigateur Web.
5 Si vous rencontrez des problèmes, veillez à ce que l’équilibreur de charge crée
correctement une règle d’équilibrage de charge pour le port TCP 80 et qu'il est
associé à une sonde d'intégrité pour chaque port TCP 80 ou votre propre sonde
d'intégrité HTTP personnalisée qui vérifie /health.html sur la VM.
140 Chapitre 9 Des applications évolutives
2 Votre application Web dispose d'un référentiel Git local. Ajoutez un lien distant
pour votre application Web de la même manière que vous l'avez fait au
chapitre 3 :
git remote add webappmolscale <your-git-clone-url>
3 Faites un push de cet exemple vers votre application Web. Vous validez ainsi cette
seule base de code, mais votre application est ensuite distribuée sur les différentes
instances de l'application Web :
git push webappmolscale master
10
Les bases de données
mondiales avec Cosmos DB
Les données. Impossible de s'en passer. Presque toutes les applications que vous
développez et exécutez, créent, traitent ou récupèrent des données. En général, ces
données sont stockées dans une base de données structurée telles que MySQL,
Microsoft SQL ou PostgreSQL. Ces vastes bases de données structurées présentent
de multiples avantages : elles sont réputées et déjà bien établies, bénéficient d'une
importante documentation et de nombreux tutoriels, et sont accessibles depuis la
plupart des principaux langages de programmation.
Un grand pouvoir impliquant de grandes responsabilités, de nombreux frais
d'infrastructure et un gros travail de gestion accompagnent généralement ces bases
de données structurées traditionnelles. Cela ne signifie pas que vous ne devriez pas
les utiliser, loin de là. Mais lorsqu'il s'agit d'applications exécutées à l'échelle
mondiale, ça n'est pas une mince affaire que de créer également des clusters de
serveurs de base de données qui répliquent vos données et acheminent
intelligemment les clients vers votre instance la plus proche.
C'est là qu'Azure Cosmos DB devient votre allié. Vous n'avez pas besoin de vous
soucier de la façon de répliquer vos données, d'assurer la cohérence et de distribuer
les demandes des clients. À la place, vous ajoutez des données dans l'un des nombreux
modèles à votre disposition, puis vous choisissez où vous souhaitez que vos données
soient disponibles. Dans ce chapitre, vous allez découvrir les modèles de bases de
données non structurées dans Cosmos DB, apprendre à créer et à configurer votre
base de données en vue d'une distribution mondiale, et à développer des applications
Web qui utilisent votre instance Cosmos DB hautement évolutive et redondante.
141
142 Chapitre 10 Les bases de données mondiales avec Cosmos DB
Dans les bases de données structurées, chaque serveur doit généralement contenir la
base de données complète afin que les requêtes et la récupération des données
fonctionnent. Les données, qui proviennent de différentes tables, sont jointes dans des
requêtes selon des critères définis par le développeur dans le cadre de la requête
structurée. C'est de là que vient le terme Langage de requête structurée ou SQL (Structured
Query Language). À mesure que les bases de données gagnent en taille et en complexité,
les serveurs qui exécutent la base de données doivent être suffisamment importants
pour stocker ces données en mémoire. Avec des ensembles de données très importants,
cela s'avère difficile et coûteux. Étant donné qu'elles nécessitent une structure, il est
également compliqué d'ajouter des propriétés et de modifier la structure a posteriori.
Augmentaon de la puissance
vCPU vCPU de traitement (vCPU) vCPU vCPU vCPU vCPU
Figure 10.3 Les bases de données structurées évoluent généralement de manière verticale. À mesure
que la base de données s'agrandit, vous augmentez la capacité de stockage, de mémoire et de puissance
d’UC sur le serveur.
144 Chapitre 10 Les bases de données mondiales avec Cosmos DB
ils doivent seulement répondre à leurs propres requêtes. Selon les besoins, vous pouvez
ajouter rapidement des nœuds à un cluster pour répondre à une demande client.
Par conséquent, dans une base de données NoSQL, il n'est pas nécessaire que la base
tienne entièrement dans la mémoire d'un hôte. Seule une partie de la base, que l'on appelle
une partition, doit être stockée et traitée. Si votre application traite une quantité importante
de données structurées, une base de données NoSQL pourrait affecter les performances, car
les différents hôtes sont interrogés pour leurs informations, qui sont ensuite retournées au
client. Si vous devez traiter une grande quantité de données non structurées, les bases
de données NoSQL permettront certainement d'améliorer les performances, voire d'offrir
des avantages en termes de gestion et d'efficacité. La figure 10.4 illustre un exemple de mise
à l'échelle horizontale de base de données non structurée dans les hôtes.
Fraconnement de la base
vCPU vCPU de données pour monter vCPU vCPU vCPU vCPU
Figure 10.4 Les bases de données non structurées NoSQL procèdent par mise à l'échelle horizontale.
À mesure que la base s'agrandit, celle-ci est fragmentée en segments de données qui sont ensuite
distribués sur les serveurs de base de données.
Tester
Pour voir Cosmos DB à l'œuvre, créez un compte à l'aide du portail Azure :
4 Le type de modèle que vous pouvez utiliser pour votre base de données est
désigné sous le nom d'API. Pour cet exemple, choisissez Core (SQL) dans le
menu déroulant.
5 Dans le champ Emplacement, sélectionnez Est des États-Unis. Cosmos DB est
disponible dans toutes les régions Azure. Cependant, pour cet exemple, il est
nécessaire de choisir l'Est des États-Unis pour l'application Web que vous allez
déployer dans l'exercice pratique en fin de chapitre.
6 Laissez l’option de géoredondance désactivée, ainsi que n’importe quel
autre fonction, notamment les régions multi-écriture. La section 10.2.2 explique
plus en détail comment répliquer votre base de données à l'échelle mondiale.
7 Lorsque vous êtes prêt, examinez et créez votre compte Cosmos DB. La création
du compte prend quelques minutes.
Pour l'instant, votre base de données est vide. Voyons voir comment stocker des
données de base pour le menu de votre pizzéria. Cosmos DB regroupe les données
d’une base de données dans un conteneur. Il ne s'agit pas du même type de conteneur
sur lequel reposent Docker, Kubernetes et les applications natives du Cloud. Cette
confusion de nommage ne nous aide pas, mais tâchez de restez avec moi.
Dans les bases de données Cosmos DB qui
utilisent le modèle de document, les données
sont regroupées logiquement en conteneurs
appelés collections. D’autres modèles d’API ont
Pizza au Pizza Pizza un nom légèrement différent pour l’entité de
pepperoni végétarienne hawaïenne conteneur, comme graph pour l'API Gremlin.
Ces collections stockent des éléments de
données connexes pour notre API SQL,
Collection pouvant être rapidement indexés et
interrogés, comme illustré à la figure 10.6. Les
collections ne sont pas entièrement
Base de données de documents Cosmos DB
différentes de la façon dont vous organisez
une base de données SQL en tables, mais elles
Figure 10.6 Une base de données Cosmos DB qui utilise offrent davantage de flexibilité quant à la
le modèle de document stocke les données dans des distribution des données pour la performance
collections. Ces collections vous permettent de grouper ou la redondance.
des données pour une indexation et une interrogation plus
rapides.
Création d'un compte Cosmos DB et d'une base de données 147
Étant donné que Cosmos DB est conçu pour traiter de très grandes quantités de
données et de débit, vous pouvez choisir comment dimensionner et contrôler le flux
et le coût de ces données. Le débit est mesuré en unités de requête par seconde
(RU/s), une unité de requête équivalant à 1 Ko de données de document. En résumé,
vous déterminez la quantité de bande passante souhaitée pour votre base de données.
Si vous ne l'aviez pas déjà deviné, plus vous désirez de bande passante (RU/s), plus cela
vous coûtera cher. Cosmos DB vous indique la quantité de données exploitées ainsi
que le débit utilisé par votre application. Vous n'avez généralement pas à vous soucier
du dimensionnement. En ce qui concerne votre pizzéria, ne voyons pas trop grand !
Tester
Pour créer une collection et alimenter des entrées dans la base, procédez comme suit :
Tester
Pour les créer, ajoutez des entrées dans la base de données, procédez comme suit,
comme illustré à la figure 10.7 :
1 Dans votre compte Cosmos DB, naviguez jusqu'au menu situé dans la partie
gauche de la fenêtre Vue d'ensemble et choisissez Explorateur de données.
Figure 10.7 Avec l'Explorateur de données du portail Azure, vous pouvez parcourir vos
collections afin d'interroger ou de créer de nouveaux documents. Cet outil graphique vous
permet de gérer rapidement votre base de données depuis un navigateur Web.
6 Ajoutez une nouvelle pizza à votre carte. Cette fois-ci, ajoutez une propriété pour
indiquer que la pâte de cette pizza ne contient pas de gluten. Vous n'avez pas
besoin de toucher à la base de données sous-jacente ; contentez-vous d'ajouter
une nouvelle propriété à vos données. Pour ajouter un nouvel élément, entrez
les données suivantes et sélectionnez Enregistrer :
{
"description": "Veggie",
"cost": "15",
"gluten": "free"
}
7 Ajoutez une dernière sorte de pizza. Ajoutez cette fois une propriété gérant les
garnitures de la pizza. Pour ajouter un nouvel élément, entrez les données
suivantes et sélectionnez Enregistrer :
{
"description": "Hawaiian",
"cost": "12",
"toppings": "ham, pineapple"
}
Ces trois entrées illustrent toute la puissance d'une base de données NoSQL. Vous avez
ajouté des propriétés aux entrées sans avoir à modifier le schéma de la base. Deux propriétés
différentes ont permis d'indiquer que la pâte de la pizza végétarienne est sans gluten et
quelle est la garniture de la pizza Hawaïenne. Cosmos DB accepte ces propriétés
supplémentaires, et ces données sont à présent disponibles pour vos applications.
Certaines propriétés JSON supplémentaires sont ajoutées pour des éléments comme
id, _rid et _self. Nous ne nous intéresserons pas à ces propriétés pour l’instant.
Cosmos DB utilise ces propriétés pour suivre et identifier les données. Vous ne devez
pas les modifier, ni les supprimer manuellement.
Données répliquées
Cosmos DB (Sud-Est Kuala Lumpur,
vers plusieurs régions de l'Australie) Malaisie
Figure 10.8 Les données sont répliquées d'une instance principale Cosmos DB vers plusieurs
régions Azure à travers le monde. Les applications Web peuvent ensuite être dirigées pour
lecture depuis la région de laquelle elles sont les plus proches, puis les clients sont acheminés
dynamiquement vers l'emplacement le plus proche, afin de minimiser la période de latence et
d'améliorer les temps de réponse.
de manière asynchrone vers d'autres régions. Les données sont également répliquées
rapidement vers les régions de lecture de votre choix. Vous pouvez contrôler l'ordre de
basculement, afin de désigner les régions de lecture puis, avec votre application,
déterminer automatiquement ou manuellement les régions depuis lesquelles lire.
Vous pouvez définir un modèle de cohérence (qui s'apparente en réalité davantage
à un aspect conceptuel plutôt qu'opérationnel) qui définit la rapidité de la réplication
des écritures dans plusieurs régions. Les modèles de cohérence vont de fort, qui attend
que les écritures répliquées soient confirmées par des réplicas et qui garantit donc que
les lectures sont cohérentes, àéventuel, qui est un modèle plus souple. Le modèle
éventuel garantit que toutes les données sont répliquées, mais il peut exister un léger
retard lorsque les lectures des réplicas retournent des valeurs différentes, jusqu'à ce
qu'elles soient toutes synchronisées.
Il existe un équilibre entre une distribution géographique plus limitée, comme avec
le modèle de cohérence fort, et une réplication géographique plus large avec le modèle
de cohérence éventuel, en n'oubliant pas le léger retard lors de la réplication des données.
Il faut également prendre en compte les coûts de traitement et de bande passante,
selon la cohérence et la rapidité souhaités en matière de réplication des données. La
plateforme Azure gère la réplication sous-jacente des données depuis votre point
d'écriture ; vous n'avez pas besoin de créer vos applications pour répliquer les données
ou de déterminer la meilleure façon de lire les données depuis des points de
terminaison répliqués.
Création d'un compte Cosmos DB et d'une base de données 151
Tester
Pour répliquer vos données Cosmos DB à l'échelle mondiale, procédez comme suit :
Figure 10.9 Sélectionnez une région Azure pour répliquer votre base de données Cosmos DB, puis
choisissez Enregistrer. Voici toutes les étapes nécessaires pour distribuer mondialement vos données.
152 Chapitre 10 Les bases de données mondiales avec Cosmos DB
Tester
Utilisez la commande az cosmosdb show pour accéder à des informations concernant
votre emplacement de lecture et d'écriture :
Le résultat retourné par cette commande étant assez conséquent, examinons les
deux parties principales : les emplacements de lecture et les emplacements d'écriture.
Voici un exemple de résultat pour la section readLocations :
"readLocations": [
{
"documentEndpoint":"https://azuremol-eastus.documents.azure.com:443/",
"failoverPriority": 0,
"id": "azuremol-eastus",
"isZoneRedundant": "false",
"locationName": "East US",
"provisioningState": "Succeeded"
},
{
"documentEndpoint":
➥"https://azuremol-westeurope.documents.azure.com:443/",
"failoverPriority": 1,
"id": "azuremol-westeurope",
"isZoneRedundant": "false",
"locationName": "West Europe",
"provisioningState": "Succeeded"
}
],
Lorsque votre application établit une connexion à une base de données Cosmos DB,
vous pouvez spécifier une stratégie de connexion. Si les bases de données ne sont pas
votre fort, pensez à une connexion Open Database Connectivity (ODBC) classique
que vous pouvez créer sur une machine Windows. La chaîne de connexion définit
généralement un nom d’hôte, un nom de base de données, un port et des informations
d'identification. Il en va de même pour Cosmos DB. Vous pouvez vous connecter à
Cosmos DB depuis plusieurs langages, y compris .NET, Python, Node.js et Java. Les
langages peuvent varier, mais tous les SDK partagent un paramètre identique : la
détection des points de terminaison. Deux des propriétés principales de la stratégie de
connexion sont importantes :
¡ Détection automatique des points de terminaison—Le SDK lit tous les points de terminaison
disponibles depuis Cosmos DB et utilise l'ordre de basculement indiqué. Cette
approche garantit que votre application respecte toujours l'ordre que vous spécifiez
au niveau de la base de données. Peut-être souhaitez-vous que toutes les lectures
passent par l'Est des États-Unis et utilisent uniquement Europe de l’Ouest en cas de
maintenance dans l'emplacement principal.
¡ Emplacements de point de terminaison préférés— Vous spécifiez les emplacements que
vous souhaitez utiliser. Cela peut être utile, par exemple, lorsque vous déployez
votre application vers l'Europe de l'Ouest et souhaitez vous assurer que vous utilisez
le point de terminaison correspondant. Vous perdez un peu en souplesse lors de
l'ajout ou de la suppression de points de terminaison. Vous vous assurez cependant
que votre point de terminaison par défaut est proche de votre application, sans
avoir besoin de déterminer cela à l'aide d'un routage réseau plus avancé.
En règle générale, le SDK de Cosmos DB prend en charge cette tâche pour votre
application. Celle-ci ne modifie pas la façon dont elle gère la connexion à la base de
données : elle sait seulement qu'il existe plusieurs emplacements auxquels elle peut se
connecter. Mais c'est le SDK qui se charge de la connexion et qui utilise cette
reconnaissance de l'emplacement.
154 Chapitre 10 Les bases de données mondiales avec Cosmos DB
Azure
2. Demande des emplacements de Cosmos DB
point de terminaison automatiques
Azure Cosmos
7. Données envoyées depuis le point DB (lecture
de terminaison de lecture principal principale)
Nous devons encore aborder les clés d'accès avant d'en avoir terminé avec Cosmos DB.
Ces clés vous permettent de contrôler qui peut accéder aux données ainsi que les
autorisations qui leurs sont accordées. Les clés peuvent être régénérées, et tout comme
pour les mots de passe, il est recommandé de mettre en place une stratégie
afin d'effectuer régulièrement ce processus de régénération. Afin d'accéder aux
données distribuées dans Cosmos DB, vous devez préalablement obtenir vos clés. Le
portail Azure permet d'afficher l'ensemble des clés et des chaînes de connexion de
votre base de données.
Tester
Pour afficher les clés de votre compte Cosmos DB, procédez comme suit :
Figure 10.11 La section Clés de votre compte Cosmos DB répertorie les informations de connexion ainsi
que les clés d'accès. Lorsque vous développez et exécutez des applications, comme c'est le cas pour
l'exercice pratique en fin de chapitre, ces informations sont nécessaires.
Dans Cosmos DB, afin de distribuer vos données et de permettre à vos applications de
lire et d'écrire depuis les emplacements les plus appropriés, de nombreuses opérations
156 Chapitre 10 Les bases de données mondiales avec Cosmos DB
sont menées en arrière-plan. Mais là est tout l'intérêt. En étant informé des possibilités
offertes par le service Cosmos DB, cela facilite la conception et la planification de votre
application, ainsi que la résolution des problèmes si les applications ne permettent pas
au SDK d’effectuer des opérations de lecture et d’écriture selon les besoins. Ne vous
préoccupez pas du pourquoi du comment. Concentrez-vous uniquement sur vos
applications, et comptez sur les services Azure tels que Cosmos DB pour vous fournir les
fonctionnalités et avantages cloud qui vous permettent d'opérer à l'échelle mondiale.
6 Pour afficher vos clés Cosmos DB, modifiez le fichier de configuration avec la clé
d'accès et l'URI de la base de données que vous avez copiées dans l'exercice
« Essayez dès maintenant » précédent :
nano config.js
7 Écrivez le fichier en appuyant sur Ctrl-O, puis quittez en appuyant sur Ctrl-X.
8 Ajoutez et validez vos modifications dans Git avec la commande suivante :
git init && git add . && git commit -m "Pizza"
Exercice pratique : déploiement d'une application Web qui utilise Cosmos DB 157
9 Créez un lien vers le nouveau référentiel Git dans votre emplacement de test
avec git remote add azure, suivi de votre URL de déploiement Git.
10 Utilisez la commande git push azure master pour pousser vos modifications
sur votre application Web.
11 Sélectionnez l'URL de votre application Web à partir de la fenêtre Vue d'ensem-
ble du portail Azure.
12 Ouvrez l'URL dans un navigateur Web pour consulter votre pizzéria, à présent
gérée par Cosmos DB, comme illustré à la figure 10.12.
Figure 10.12 L'application Web Azure de base affiche votre carte des pizzas succincte,
en se basant sur les données de la base Cosmos DB. La pizzeria des chapitres précédents
est affichée, mais la liste des pizzas et leurs prix sont désormais optimisés par Cosmos
DB. Le site reste néanmoins basique, l’objectif étant d'observer le service en action et de
comprendre comment commencer à créer vos propres applications.
11
Gestion du trafic réseau et
du routage
La résolution DNS (service de noms de domaine) est au cœur de presque toutes les
connexions numériques que vous effectuez. C’est comme ça que vous naviguez sur le
Web, recevez des e-mails, regardez Netflix et appelez avec Skype. DNS est le mécanisme
qui convertit un nom, comme manning.com par exemple, en adresse IP. Quand je
veux apprendre de nouvelles choses, je n’ai pas besoin de me rappeler 35.166.24.88 :
je rentre simplement manning.com dans un navigateur Web et je parcoure quelques
livres ! Les périphériques réseau acheminent le trafic en fonction des adresses IP,
donc vous avez besoin d’une approche qui aide ceux d’entre nous qui ont une
mauvaise mémoire à faire des choses comme acheter des livres ou des pizzas en ligne.
Au cours des derniers chapitres, nous avons passé beaucoup de temps à apprendre
comment créer des applications évolutives, hautement disponibles et distribuées dans le
monde entier. Une des dernières pièces manquantes est de savoir comment orienter les
clients du monde entier vers l’instance d’application la plus appropriée, généralement
celle qui est la plus proche d’eux. Azure Traffic Manager facilite le routage automatique
des clients vers vos instances d’application en fonction de la performance ou de
l’emplacement géographique. Dans ce chapitre, nous abordons la façon dont vous
pouvez créer et gérer des zones DNS dans Azure, puis comment utiliser Traffic Manager
pour orienter les clients avec des requêtes DNS, comme illustré à la figure 11.1.
158
Qu’est-ce qu’Azure DNS ? 159
Client
Londres
Internet
Régions Azure
Zone Azure DNS
azuremol.com Région Est Région Europe
des États-Unis de l'Ouest
eastus.azuremol.com westeurope.azuremol.com
VM Web 1 VM Web 2
53.17.91.8 102.42.9.67
A 53.17.91.8 A 102.42.9.67
Figure 11.1 Dans ce chapitre, nous examinerons comment vous pouvez créer des zones DNS dans Azure DNS.
Pour minimiser la latence et améliorer les temps de réponse, Traffic Manager peut ensuite être utilisé pour
formuler des requêtes DNS et orienter les clients vers l’instance d’application la plus proche d’eux.
Azure DNS fonctionne de la même manière que toutes les solutions DNS existantes
que vous pouvez utiliser ou que vous connaissez peut-être. Votre zone et vos
enregistrements sont stockés dans Azure et les serveurs de noms qui répondent aux
requêtes DNS sont répartis à l’échelle mondiale dans les datacenters Azure.
Client
Azure DNS prend en charge tous les types d’enregistrements que vous attendez de la
part d'une offre de service DNS standard. Les enregistrements IPv4 et IPv6 peuvent
tous deux être créés. Les types d’enregistrement sont les suivants :
¡ A : enregistrements d’hôte IPv4, pour diriger les clients vers vos applications et services
¡ AAAA : enregistrements d’hôte IPv6 , pour les entreprises dans le coup qui
utilisent IPv6 pour diriger les clients vers leurs applications et services
¡ CNAME : nom canonique ou alias, enregistrements, permettant de fournir un
nom court plus facile à utiliser que le nom d’hôte complet d’un serveur
¡ MX : enregistrements MX (Mail Exchange) pour acheminer le trafic de courrier
électronique vers vos serveurs ou votre fournis seur de messagerie
¡ NS : enregistrements du serveur de noms, qui incluent les enregistrements
générés automatiquement pour les serveurs de noms Azure
¡ PTR : enregistrements du pointeur, pour les requêtes DNS inversées afin de faire
correspondre les adresses IP aux nom s d’hôtes
¡ SOA : enregistrements de sources de noms , qui incluent les
enregistrements générés automatiquement pour les serveurs de noms Azure
¡ SRV : enregistrements du service, pour permettre de révéler les services réseau,
utilisés par exemple en matière d'identité
¡ TXT : enregistrements de chaînes de texte, notamment pour le SPF (Sender
Protection Framework) ou le DKIM (DomainKeys Identified Mail)
Dans une configuration DNS typique, vous configurez plusieurs serveurs DNS. Même
avec la distribution géographique de ces serveurs à des fins de redondance, les clients
peuvent interroger un serveur de nom de l’autre côté du monde. Ces millisecondes
nécessaires pour interroger, résoudre, puis solliciter une réponse pour l'application
Web peuvent s’additionner lorsque vous avez beaucoup de clients qui veulent
commander des pizzas.
Une zone Azure DNS est répliquée à l’échelle mondiale parmi les datacenters Azure.
Le réseau Anycast garantit que lorsqu’un client effectue une requête DNS vers votre
domaine, le serveur de nom disponible le plus proche réponde à sa demande. Comment
le routage anycast fait-il cela ? En général, une seule adresse IP est communiquée dans
plusieurs régions à la fois. Plutôt que d'utiliser une simple requête DNS qui résout une
adresse IP unique n’existant qu’à un seul emplacement, le routage anycast permet à
l’infrastructure réseau de déterminer intelligemment l’emplacement d’une requête et
d’acheminer le client vers la région déclarée la plus proche. Ce routage permet à vos
clients de se connecter à votre application Web plus rapidement et offre une meilleure
expérience client dans l’ensemble.
Vous n’avez pas besoin d’être un expert en réseau pour bien comprendre comment
cela fonctionne : Azure le gère pour vous ! Lorsque vous combinez Azure DNS avec
Azure Traffic Manager (section 11.2), non seulement vous renvoyez des requêtes DNS à
partir des serveurs de noms les plus proches, mais vous connectez également les clients
à l’instance d’application la plus proche. Faites que ces millisecondes comptent !
l’autorité de votre domaine aux serveurs de noms Azure. Grâce à cette délégation
toutes les requêtes DNS sont immédiatement dirigées vers ces serveurs de noms Azure,
comme illustré à la figure 11.3. Azure ne vous permet pas actuellement d’acheter et
d’enregistrer des domaines dans la plateforme. Vous devez donc acheter le nom de
domaine via un registrar externe, puis pointer les enregistrements NS sur les serveurs
de noms Azure.
Fournisseur configuré avec
des serveurs de noms Azure
pour déléguer votre
domaine à Azure DNS
ns1.azure-dns.com.
Fournisseur de
nom de domaine
Zone DNS
NS ns1.azure-dns.com.
Client NS ns2.azure-dns.net.
Requête DNS Le fournisseur Enregistrement d'hôte
pour votre NS ns3.azure-dns.org.
transmet toutes
domaine NS ns4.azure-dns.info. les requêtes www A 53.17.91.8
à Azure DNS
Figure 11.3 Pour déléguer votre domaine à Azure, configurez votre fournisseur de domaine actuel avec
les adresses de serveur de nom Azure. Lorsqu’un client effectue une requête DNS pour votre domaine,
les requêtes sont envoyées directement aux serveurs de noms Azure de votre zone.
Pourquoi déléguer votre DNS à Azure ? Pour simplifier la gestion et les opérations.
Qu’il s’agisse de créer des services supplémentaires, d’ajuster la configuration de
l’équilibreur de charge ou d’améliorer les temps de réponse avec un DNS répliqué
dans le monde entier, l’interface de gestion unique fournie par Azure permet
d’effectuer ces tâches. Lorsque vos zones DNS sont hébergées dans Azure, vous pouvez
également installer certaines des fonctionnalités de sécurité de Ressource Manager
décrites dans le chapitre 6. Ces fonctionnalités comprennent, par exemple, le contrôle
d’accès en fonction du rôle (RBAC) pour limiter et auditer l’accès aux zones DNS,
ainsi que les verrous de ressources pour empêcher la suppression accidentelle, voire
malveillante, d'une zone.
La plupart des bureaux d’enregistrement de domaines fournissent des interfaces et
des contrôles plutôt basiques pour gérer les zones et les enregistrements DNS. Pour
réduire la surcharge de gestion et améliorer la sécurité, Azure DNS vous permet
d’utiliser la CLI Azure, Azure PowerShell ou les API REST pour ajouter ou modifier des
enregistrements. Les équipes opérationnelles peuvent utiliser les mêmes outils et
workflows pour intégrer de nouveaux services. Si des problèmes apparaissent, il est
souvent plus facile de les dépanner lorsque vous pouvez vérifier que le DNS fonctionne
comme prévu sans qu’un fournisseur DNS tiers constitue une variable supplémentaire.
Donc, si vous êtes convaincu qu’il est logique de déléguer votre domaine à
Azure DNS, vers quel serveur de nom Azure devez-vous faire pointer votre domaine ? Si
vous créez une zone Azure DNS, les serveurs de noms sont répertoriés dans le portail,
comme illustré à la figure 11.4. Vous pouvez également accéder à ces adresses de serveur
de nom avec la CLI Azure ou Azure PowerShell.
Il n’y a pas d’exercice « Essayez dès maintenant » pour ces dernières pages car,
à moins que vous n’achetiez et configuriez un domaine réel, vous ne pourrez
pas tester la méthode pour acheminer le trafic
162 Chapitre 11 Gestion du trafic réseau et du routage
Figure 11.4 Vous pouvez afficher les serveurs de nom Azure pour votre zone DNS dans le portail Azure,
la CLI Azure ou Azure PowerShell.
réel. Vous pouvez créer une zone Azure DNS sans domaine réel, mais aucun trafic ne
peut y être acheminé. Dans la réalité, vous mettez à jour les enregistrements NS avec
votre fournisseur actuel pour pointer toutes les requêtes concernant votre domaine
vers les serveurs de nom Azure. Cela peut prendre de 24 à 48 heures (mais
généralement beaucoup moins) pour que la délégation de votre domaine se propage
dans toute la hiérarchie DNS mondiale. Il convient donc de l’anticiper : ce
comportement peut causer de brèves interruptions pour les clients qui accèdent à
votre application.
VM Web est
des États-Unis
53.17.91.8
Figure 11.5 Un client envoie une requête DNS à un service DNS pour www.azuremol.com. Le service DNS transmet
la requête à Traffic Manager, qui renvoie un point de terminaison selon la méthode de routage en cours d’utilisation.
Le point de terminaison est résolu en adresse IP, que le client utilise pour se connecter à l’application Web.
Routage mondial et résolution avec Traffic Manager 163
Traffic Manager ne joue pas le rôle d’un équilibreur de charge tel que vous l’avez vu au
chapitre 8. Comme l’illustre la figure 11.5, Traffic Manager achemine le trafic vers une
adresse IP publique. Examinons le flux de trafic d’un peu plus près :
1 L’utilisateur effectue une requête DNS pour www.azuremol.com. Son serveur DNS
contacte les serveurs de noms pour azuremol.com (qui pourraient être des serveurs
de noms Azure si vous utilisez Azure DNS !) et demande l’enregistrement pour www.
2 L’hôte www se résout en un enregistrement CNAME qui pointe vers azuremol.
trafficmanager.net.
3 Le service DNS transmet la requête DNS aux serveurs de noms Azure pour
trafficmanager.net.
4 Traffic Manager examine ensuite la demande et détermine un point de
terminaison vers lequel diriger l’utilisateur. L’intégrité et le statut du point de
terminaison sont examinés, comme avec les équilibreurs de charge Azure. La
méthode de routage Traffic Manager est également vérifiée. Les méthodes de
routage que Traffic Manager peut utiliser sont les suivantes :
¡ Priority (Prioritaire) : contrôle l’ordre d’accès aux points de terminaison
¡ Weighted (Pondéré) : distribue le trafic dans les points de terminaison selon une
métrique de poids qui lui a été assignée
¡ Performance (Performances) : routage basé sur la latence des utilisateurs jusqu’au
point de terminaison afin que l’utilisateur bénéficie du temps de réponse
le plus rapide possible
¡ Geographic (Géographique) : associe les points de terminaison à une région
géographique et dirige vers eux les utilisateurs en fonction de leur emplacement
5 Le point de terminaison eastus.cloudapp.net est retourné par Traffic Manager
au service DNS.
6 Le service DNS recherche l’enregistrement DNS pour eastus.cloudapp.net et
retourne le résultat de la requête au client.
7 Grâce à l’adresse IP du point de terminaison qu’il a demandé, le client contacte
directement l’application Web. À ce stade, le trafic pourrait atteindre l’adresse IP
publique d’un équilibreur de charge Azure plutôt que d’une machine virtuelle
directement.
Comme vous pouvez le voir, la fonction de Traffic Manager est de déterminer un point
de terminaison pour une application donnée afin d’y diriger les clients. Il existe
quelques contrôles d’intégrité qui surveillent l’état des points de terminaison,
s’apparentant aux sondes d’intégrité des équilibreurs de charge que vous avez étudiés
au chapitre 8. Et vous pouvez définir un mécanisme de routage de trafic prioritaire ou
pondéré pour répartir les utilisateurs sur un ensemble de points de terminaison
disponibles, à nouveau, de façon semblable à un équilibreur de charge. Traffic Manager
dirige généralement le trafic vers un équilibreur de charge ou une passerelle
Application Gateway d’Azure, ou vers un déploiement d’application Web.
(suite)
et Front Door offrent le même type de service et des options de configuration similaires.
Toutefois, Front Door est spécifiquement conçu pour fonctionner au niveau de la couche
d’application. Front Door comporte également des astuces de performances
intéressantes, telles que le fractionnement TCP pour diviser les connexions en petits
segments et réduire la latence.
Au chapitre 8, nous avons examiné les équilibreurs de charge et mentionné Application
Gateway, qui fonctionne au niveau de la couche d’application et se propose des fonctions
comme le déchargement TLS. Ce chapitre se concentre sur les équilibreurs de charge et
vous explique leurs concepts fondamentaux, sur lesquels repose Application Gateway. Il
en est de même ici. Nous nous concentrons sur Traffic Manager dans ce chapitre, même
si bon nombre des mêmes concepts et options de configuration, tels que les options de
routage, sont également disponibles pour Azure Front Door. Comme pour la plupart des
éléments d’Azure, ce qu’il faut utiliser dans chaque service est piloté par les applications
que vous exécutez et leurs besoins.
Au lieu de cela, les profils enfants imbriqués vous permettent de définir une priorité
qui dirige toujours le trafic vers un point de terminaison intègre. Si le point de terminaison
n’est pas intègre, le trafic passe à un autre point de terminaison.int. La figure 11.6 montre
que le trafic bascule vers une autre région, même si vous pouvez également créer plusieurs
instances d’application Web dans la région Ouest des États-Unis et utiliser une méthode
de routage pondérée sur le profil enfant. Lorsque vous commencez à augmenter le
nombre d’instances de votre environnement d’application, prenez le temps de réfléchir
à la meilleure façon de fournir une haute disponibilité aux points de terminaison derrière
Traffic Manager. Pour ces exemples, vous créerez un basculement entre les régions pour
voir clairement les différences de comportement.
Profil avec la
méthode de routage
géographique
Figure 11.6 Un profil Traffic Manager parent configuré avec la méthode de routage géographique doit
utiliser des profils enfants qui contiennent plusieurs points de terminaison. Ces points de terminaison
enfants peuvent ensuite utiliser le routage prioritaire pour toujours diriger le trafic vers le point de
terminaison préféré. Par exemple, le profil enfant « Est des États-Unis » envoie toujours le trafic vers le
point de terminaison situé dans la région Est des États-Unis, à condition que le point de terminaison soit
intègre. Si le point de terminaison n’est pas intègre, le trafic est ensuite dirigé vers la région Europe de
l’Ouest. Sans ce profil enfant, les clients de l’Est des États-Unis ne pourraient pas basculer vers un autre
point de terminaison et ne pourraient pas accéder à votre application Web.
Tester
Pour créer les profils Traffic Manager pour votre application distribuée, procédez comme suit.
Le reste des exercices utilisent les régions de l’Est des États-Unis et de l’Europe de
l’Ouest. Si vous ne vivez pas dans l’une de ces régions, choisissez une autre région plus
appropriée. N’oubliez tout simplement pas d’être cohérent tout au long des exercices !
L’exercice pratique de fin de chapitre montre comment tout cela s’imbrique et fonctionne
ensemble, mais vous ne serez pas correctement dirigé vers vos applications Web si
vous vivez en dehors de l’Amérique du Nord ou de l’Europe et que vous ne changez pas
les régions en conséquence.
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell en haut du tableau
de bord.
2 Créez un groupe de ressources, en spécifiant un nom de groupe de ressources,
par exemple azuremolchapter11, et un emplacement, par exemple eastus :
166 Chapitre 11 Gestion du trafic réseau et du routage
4 Créez l’un des profils Traffic Manager enfants. Cette fois, utilisez la méthode de
routage prioritaire et le nom eastus, et spécifiez un autre nom DNS unique, par
exemple azuremoleastus :
az network traffic-manager profile create \
--resource-group azuremolchapter11 \
--name eastus \
--routing-method priority \
--unique-dns-name azuremoleastus
6 Vous avez créé à plusieurs reprises une application Web maintenant, utilisez
donc utiliser la CLI pour créer rapidement deux plans de service d’application
et une application Web dans chaque plan. L’une de ces applications Web est dans
l’Est des États-Unis, l’autre en Europe de l’Ouest. Dans l’exercice pratique de fin
de chapitre, vous téléchargerez des exemples de pages Web dans ces applications
Web, donc pour l’instant il vous suffit de créer les sites vides et les tenir prêts
à utiliser un référentiel Git local.
Créez l’application Web dans l’Est des États-Unis comme suit :
az appservice plan create \
--resource-group azuremolchapter11 \
--name appserviceeastus \
--location eastus \
--sku S1
az webapp create \
--resource-group azuremolchapter11 \
--name azuremoleastus \
--plan appserviceeastus \
--deployment-local-git
Routage mondial et résolution avec Traffic Manager 167
Profil avec la
méthode de routage
géographique
Figure 11.7 Dans cette section, vous associerez vos points de terminaison aux profils Traffic Manager
et définirez la priorité du trafic à distribuer.
Les premières associations que vous effectuez concernent vos points de terminaison
d’application Web. N’oubliez pas que pour une haute disponibilité, vous souhaitez que
les deux applications Web soient disponibles pour chaque profil Traffic Manager. Vous
utilisez une méthode de routage prioritaire pour diriger tout le trafic vers l’application
Web principale pour chaque profil. Si cette application Web n’est pas disponible, le
trafic peut basculer vers le point de terminaison de l’application Web secondaire.
Lorsque vous avez créé les profils Traffic Manager dans la section 11.3.1, quelques
valeurs par défaut ont été utilisées pour les options de contrôle d’intégrité et de
surveillance de point de terminaison. Voyons de plus près quelles sont ces options :
¡ Durée de vie (TTL) du DNS : 30 secondes : définit la durée pendant laquelle les
réponses DNS de Traffic Manager peuvent être mises en cache. Une durée de vie
courte garantit que le trafic client est acheminé correctement lorsque des mises à
jour de la configuration de Traffic Manager sont effectuées.
168 Chapitre 11 Gestion du trafic réseau et du routage
¡ Protocole : HTTP : pour la surveillance des points terminaux, vous pouvez également
choisir le protocole HTTPS ou une vérification TCP de base. Comme pour les
équilibreurs de charge, le HTTP ou le HTTPS garantissent qu’une réponse
HTTP 200 OK est retournée par chaque point de terminaison.
¡ Port : 80 : le port à vérifier sur chaque point de terminaison.
¡ Chemin d’accès : / : par défaut, vérifie la racine du point de terminaison, mais vous
pouvez également configurer une page personnalisée, comme la page de contrôle
de l’intégrité utilisée par les équilibreurs de charge.
¡ Intervalle de sondage : 30 secondes : fréquence de contrôle de l’intégrité des points
de terminaison. La valeur peut être de 10 ou de 30 secondes. Pour effectuer une
détection rapide toutes les 10 secondes, des frais supplémentaires sont appliqués
par point de terminaison.
¡ Nombre d’échecs tolérés : 3 : nombre d'occurrences d'échec d'un point de terminaison
à un contrôle d’intégralité avant que le point de terminaison ne soit marqué
comme non disponible.
¡ Délai d’expiration de la sonde : 10 secondes : durée qui s’écoule avant qu’une sonde
ne soit marquée comme étant en échec et que le point de terminaison ne fasse de
nouveau l'objet d'une détection.
Vous n’avez pas besoin de modifier l’une de ces options par défaut. Lorsque vous
construisez vos propres environnements d’application dans le monde réel, vous pouvez
réduire le nombre de défaillances à tolérer ou l’intervalle de détection pour les charges
de travail stratégiques. Ces modifications garantiraient que tous les problèmes
d’intégrité soient détectés rapidement et que le trafic soit acheminé plus tôt vers un
point de terminaison différent.
Tester
Pour associer des points de terminaison à des profils et mettre fin au routage
géographique, procédez comme suit :
Figure 11.8 Deux points de terminaison sont répertoriés pour le profil Traffic Manager. Le point de terminaison
pour l’Est des États-Unis a la priorité inférieure, de sorte qu’il reçoit toujours le trafic lorsqu’il est intègre. La
redondance est assurée avec le point de terminaison de l’Europe de l’Ouest, qui n’est utilisé que lorsque le point de
terminaison dans l’Est des États-Unis n’est pas disponible.
Figure 11.9 La même configuration des points de terminaison que dans le précédent profil Traffic Manager, mais
cette fois l’emplacement des applications Web est inversé. Ces profils enfants peuvent être utilisés pour
acheminer les clients vers l’application Web soit dans l’Est des États-Unis, soit en Europe de l’Ouest, mais vous
avez maintenant une redondance pour basculer vers un autre point de terminaison quand le point de terminaison
principal dans la région n’est pas disponible.
170 Chapitre 11 Gestion du trafic réseau et du routage
Plus qu’une seule étape, je vous le promets ! Rappelez-vous que c’est une bonne
pratique pour la haute disponibilité que d'utiliser Traffic Manager pour la distribution
d’applications à l’échelle mondiale. Dans la réalité, votre environnement n’est
peut-être pas aussi complexe. Examinons à nouveau le diagramme pour voir les profils
enfants et les associations avec les applications Web régionales que vous devez créer,
comme illustré à la figure 11.10.
Profil avec la
méthode de routage
géographique
Figure 11.10 Les profils Traffic Manager enfants pour l’Est des États-Unis et l’Europe de l’Ouest
ont été créés, avec les applications Web régionales et les priorités configurées selon les besoins.
Vous devez maintenant associer les profils enfants au profil parent.
Pour diriger le trafic en fonction de la géographie, vous définissez une région, telle
que l’Amérique du Nord, et un profil imbriqué, par exemple eastus. Tous les clients
dans la région de l’Amérique du Nord sont dirigés vers ce profil enfant. Vous avez
configuré les priorités sur cet enfant de manière à ce que l’application Web située dans
la région Est des États-Unis desserve toujours le trafic. Mais vous avez fourni une option
redondante pour basculer vers l’application Web en Europe de l’Ouest si besoin.
L’inverse se produit pour les clients en Europe de l’Ouest. Un autre point de
terminaison pour le profil Traffic Manager parent peut être ajouté, cette fois avec
l’Europe comme région à associer au point de terminaison, puis le profil imbriqué
westeurope. L'ensemble du trafic européen est acheminé vers ce profil et l’application
Web en Europe de l’Ouest dessert toujours l’application Web. En cas de problème, le
trafic peut basculer vers l’Est des États-Unis.
Si vous êtes soumis à des mandats de souveraineté politiques ou de données tels que
le trafic ne peut pas basculer vers une autre région, vous devrez peut-être ajuster la
façon dont les points de terminaison et les profils Traffic Manager sont configurés. Vous
pouvez, par exemple, créer plusieurs applications Web en Europe de l’Ouest, comme
Routage mondial et résolution avec Traffic Manager 171
Tester
C’est là que votre propre emplacement régional importe ! Si vous vivez en dehors de l’un
des groupements régionaux indiqués dans les profils Traffic Manager, assurez-vous que
vous sélectionnez votre propre région, faute de ne pouvoir accéder à l’application Web
dans l’exercice pratique de fin de chapitre.
Pour associer les profils enfants au profil parent, procédez comme suit :
Figure 11.11 Profils enfants imbriqués avec des régions géographiques associées. Ce profil Traffic Manager
parent dirige l'ensemble du trafic d’Europe vers l’application Web dans la région Europe de l’Ouest, avec une
redondance pour utiliser l’Est des États-Unis en cas de problème. L’inverse est vrai pour les clients d’Amérique du
Nord, d’Amérique centrale et des Caraïbes.
172 Chapitre 11 Gestion du trafic réseau et du routage
Lorsque vous ouvrez l’adresse de votre profil Traffic Manager parent, telle que
https://azuremol.trafficmanager.net, you can’t tell which endpoint you access, as both
web apps run the same default web page. Dans l’exercice pratique de fin de chapitre,
vous téléchargez une page Web basique dans chaque application Web pour les
différencier !
Arrêtons-nous un instant pour examiner ce que vous avez créé à travers ces exercices.
C’est important, car les clients peuvent désormais utiliser toutes les fonctionnalités de
haute disponibilité et de redondance des chapitres précédents, avec le routage
automatique du trafic qui les dirige vers l’instance la plus proche de votre application
Web. Dans ce chapitre, vous avez créé les éléments suivants :
¡ Une application Web dans la région Est des États-Unis et une autre dans Europe
de l’Ouest
¡ Les profils Traffic Manager qui utilisent le routage géographique pour diriger tous les
clients en Amérique du Nord et centrale vers l’application Web dans l’Est des
États-Unis, et tous les clients en Europe vers l’application Web de l’Europe de l’Ouest.
¡ Des stratégies Traffic Manager enfants avec routage prioritaire, pour basculer
vers la région alternative et l’utiliser, au cas où l’application Web principale de la
région n’est pas disponible
En termes de haute disponibilité :
¡ Si vous combinez cette configuration avec des applications Web qui
se dimensionnent automatiquement, vous avez alors une foule de redondance.
¡ Si vous combinez ces applications Web avec Cosmos DB, toute votre
application est maintenant automatiquement dimensionnée et distribuée dans le
monde entier. De plus vos clients accèdent toujours aux ressources proches d’eux
pour la latence la plus faible en matière de temps de réponse et
de meilleures performances.
¡ Même si vous êtes bloqué avec des machines virtuelles, vous pouvez utiliser des
VMMS avec des équilibreurs de charge pour fournir le même environnement
hautement disponible et distribué partout dans le monde.
Routage mondial et résolution avec Traffic Manager 173
Et oui, vous pouvez remplacer Traffic Manager par Front Door si vous avez besoin
d’utiliser des fonctions avancées de gestion du trafic au niveau de l’application.
Je sais que les derniers chapitres contiennent beaucoup de nouvelles informations,
et que chaque chapitre a monopolisé une bonne partie de votre pause déjeuner tous les
jours ! Mais regardez ce que vous avez accompli depuis la semaine dernière. Vous
pouvez maintenant créer une application Web avec des
machines virtuelles en IaaS ou des applications Web en PaaS, la rendre hautement
disponible et à charge équilibrée, et la laisser se dimensionner automatiquement
(figure 11.12). Vous pouvez utiliser un back-end Cosmos DB distribué à l’échelle
mondiale pour vos besoins de base de données, et vous pouvez acheminer
automatiquement les clients vers l’instance régionale la plus proche de votre
application, le tout avec un DNS hébergé dans Azure.
Client
Internet
Azure Traffic
Azure DNS
Manager
Cosmos DB
Figure 11.12 Après avoir lu ces derniers chapitres, vous devez pouvoir comprendre comment créer dans Azure des
applications hautement disponibles, IaaS ou PaaS. Les solutions IaaS peuvent utiliser des zones de disponibilité,
des équilibreurs de charge et des VMSS. Les solutions PaaS peuvent utiliser le dimensionnement automatique des
applications Web et Cosmos DB. Traffic Manager et Azure DNS peuvent acheminer automatiquement les clients
vers l’instance d’application la plus appropriée, en fonction de leur emplacement géographique.
L’exercice pratique de fin de chapitre télécharge quelques sites Web de base dans vos
applications Web, juste pour démontrer que Traffic Manager fonctionne et que le
point de terminaison approprié dessert votre trafic. Si vous avez le temps, n’hésitez pas
à terminer l’exercice ; sinon, félicitez-vous et allez faire une sieste. Je ne le dirai pas à
votre patron !
174 Chapitre 11 Gestion du trafic réseau et du routage
Nous avons encore un chapitre dans cette deuxième section du livre ; il parle de la
façon de s’assurer que vos applications restent intègres : comment surveiller et
dépanner vos applications et l’infrastructure.
2 Commencez par la page Web eastus, puis répétez les étapes suivantes dans le
répertoire westeurope :
cd ~/azure-mol-samples-2nd-ed/11/eastus
Dans les chapitres précédents, vous avez appris à rendre vos applications hautement
disponibles et à acheminer les clients du monde entier vers des instances de
votre application distribuées mondialement. Un des objectifs consistait à minimiser
la quantité d'interactions avec votre infrastructure d'applications et à laisser la
plateforme Azure gérer l'état d'intégrité et les performances à votre place. Il est
parfois encore nécessaire de se retrousser les manches et d'examiner les diagnostics
ou les mesures de performances. Dans ce chapitre, vous allez apprendre à examiner
les diagnostics de démarrage pour une machine virtuelle, à surveiller les mesures de
performances et à résoudre les problèmes de connectivité avec Network Watcher.
175
176 Chapitre 12 Surveillance et dépannage
Tester
Pour créer une machine virtuelle et activer les diagnostics de démarrage, procédez
comme suit :
Figure 12.1 Les diagnostics de démarrage sont activés par défaut lorsque vous créez une
machine virtuelle dans le portail Azure. Un compte de stockage est créé, dans lequel sont
stockés les diagnostics de démarrage. Vous examinerez et activerez les diagnostics du système
d'exploitation invité dans un prochain exercice, ne les activez donc pas pour l'instant. Pour une
utilisation en production, je vous conseille d'activer à la fois les diagnostics de démarrage et les
diagnostics du système d'exploitation invité, et cela pour chaque machine virtuelle créée.
Tester
Pour consulter les diagnostics de démarrage pour votre machine virtuelle, procédez
comme suit :
Figure 12.2 Les diagnostics de démarrage pour un rapport sur l'état d'intégrité et du démarrage
d'une machine virtuelle. Si des erreurs s'affichent, vous devriez être en mesure de les résoudre et d'en
déterminer la cause racine. Vous pouvez également télécharger les journaux depuis le portail pour les
analyser sur votre ordinateur local.
Tester
Pour activer l'extension de diagnostic de machine virtuelle, procédez comme suit :
1 Sur le portail Azure, depuis le menu situé à gauche, sélectionnez Machines virtuelles.
2 Choisissez la machine virtuelle que vous avez créée dans un exercice précédent.
3 Dans la section Surveillance du menu de la machine virtuelle, choisissez
Paramètres de diagnostic.
4 Pour Activer la supervision d'invités, sélectionnez le bouton.
180 Chapitre 12 Surveillance et dépannage
Figure 12.3 Vous pouvez configurer les événements et les niveaux de journalisation pour différents
composants de la machine virtuelle. Cette fonction vous permet de centraliser les journaux de vos
machines virtuelles pour les analyser et générer des alertes. Vous pouvez consulter et recevoir des
notifications lorsque vos machines virtuelles Azure rencontrent un problème, sans avoir à installer des
systèmes de surveillance complexes, généralement très coûteux.
Tester
Pour consulter les métriques de niveau invité, procédez comme suit :
1 Sur le portail Azure, depuis le menu situé à gauche, sélectionnez Machines virtuelles.
2 Choisissez la machine virtuelle que vous avez créée dans un exercice précédent.
3 Dans la section Surveillance du menu de la machine virtuelle, choisissez Mesures.
Comparées aux métriques basées sur l'hôte étudiées au chapitre 9, de nombreuses
métriques supplémentaires sont à présent disponibles. Explorez certains des
paramètres d’hôte et d’invité de la machine virtuelle disponibles, et identifiez les
applications pour lesquelles vous souhaitez surveiller des métriques spécifiques.
Les alertes métriques vous permettent de sélectionner une ressource, une métrique et
un seuil, puis de définir qui notifier et de quelle manière, une fois le seuil atteint. Les
alertes ne fonctionnement pas uniquement sur les machines virtuelles. Vous pouvez
par exemple définir des alertes sur des adresses IP publiques afin de détecter les paquets
DDoS (déni de service distribué) entrants et de vous avertir lorsqu'un certain seuil est
atteint, et que cela pourrait s'avérer être une attaque.
Lorsqu'une alerte est générée, vous pouvez choisir d'envoyer une notification par e-mail
aux propriétaires, aux contributeurs et aux lecteurs. Ces adresses e-mail et utilisateurs sont
obtenus selon les stratégies RBAC appliquées. Dans des structures plus importantes, les
alertes sont susceptibles d'envoyer des notifications par e-mail à un grand groupe de
personnes, alors soyez prudent ! Une autre option consiste à préciser les adresses e-mail : il
peut s'agir des propriétaires d'application ou d'ingénieurs d'infrastructures spécifiques, ou
bien d'une liste ou d'un groupe de distribution destiné aux parties directement impliquées.
Il existe certaines autres options utiles relatives aux mesures à prendre lorsqu'une
alerte est déclenchée :
¡ Exécuter une procédure opérationnelle. Dans le chapitre 18, nous nous intéresserons à
Azure Automation. Le service d'automatisation vous permet de créer et d'utiliser des
procédures opérationnelles qui exécutent des scripts. Ces scripts peuvent réaliser une
mesure corrective de base sur la machine virtuelle, telle que relancer un processus,
voire la redémarrer. Ils peuvent également exécuter des cmdlets de commande Azure
PowerShell pour activer les fonctionnalités d'Azure Network Watcher, tels que les
captures de paquets, que nous allons aborder dans la suite de ce chapitre.
¡ Exécuter une application logique. Les applications logiques Azure vous permettent
de générer des workflows qui exécutent du code sans serveur. Vous pouvez écrire
des informations sur un système de tickets de support ou passer un appel
téléphonique automatisé à un ingénieur de service. Au chapitre 21, nous
découvrirons le monde merveilleux de l'informatique sans serveur avec Azure
Logic Apps et Azure Functions.
Dans l'exercice pratique en fin de chapitre, vous devrez configurer des alertes pour
votre machine virtuelle. Azure est cependant capable de bien plus que de seulement
faciliter le dépannage et la surveillance de vos machines virtuelles. Un autre élément
peut parfois être responsable des problèmes : le réseau.
Quelles sont les situations dans lesquelles vous pourriez avoir besoin de Network
Watcher et quelles fonctionnalités de dépannage offre-t-il ? Attardons-nous sur
quelques problèmes courants et voyons de quelle manière Network Watcher pourrait
vous être utile.
VPN et ExpressRoute
Les réseaux privés virtuels Azure (VPN) offrent des communications sécurisées entre les
infrastructures locales et les datacenters Azure. Azure ExpressRoute, souvent utilisé
dans les grandes structures, fournit des connexions privées à grande vitesse dédiées
depuis les infrastructures aux datacenters Azure.
Ces deux connexions sont assez complexes à mettre en place, et nous ne pourrons pas
en aborder tous les aspects en l'espace d'une pause déjeuner. En outre, vous n'avez
besoin de les installer et de les configurer qu'une seule fois. C'est l'équipe réseau qui est
généralement en charge de leur configuration, et il est possible que vous ne vous rendiez
même pas compte que vous accédez à Azure via une connexion privée.
184 Chapitre 12 Surveillance et dépannage
Tous les tests de votre application fonctionnent correctement. Vous pouvez accéder
à l'application via un navigateur Web, passer des commandes et recevoir des
notifications par e-mail. Lorsque vos clients essaient ensuite de passer une commande,
l'application ne se charge pas.
En quoi Network Watcher peut-il être utile ? Avec la vérification des flux IP. Network
Watcher simule le flux de trafic vers votre destination et vous indique si le trafic atteint
votre machine virtuelle.
Tester
Pour activer Network Watcher et vérifier les flux IP, procédez comme suit :
1 Sur le portail Azure, sélectionnez Toutes les ressources dans la partie supérieure
gauche du menu de navigation.
2 Filtrez et sélectionnez Network Watcher dans la liste des services disponibles.
Activez Network Watcher dans les régions que vous souhaitez surveiller. Lorsque
vous activez Network Watcher dans une région, Azure utilise des contrôles
d’accès en fonction du rôle pour les différentes ressources et le trafic réseau.
3 Développez la liste des régions pour votre compte. Il se peut que certaines régions
soient déjà activées. Si la région dans laquelle votre machine virtuelle a été
déployée n’est pas activée, sélectionnez le région, puis activez Network Watcher.
4 Lorsque Network Watcher est activé dans une région (cela prend une minute ou
deux), sélectionnez Vérification du flux IP dans la catégorie Outils de diagnostic
réseau, dans la partie gauche de la fenêtre Network Watcher.
5 Sélectionnez votre groupe de ressources, tel que azuremolchapter12 et votre
machine virtuelle, molvm par exemple. Par défaut, le Protocole est défini sur
TCP et la Direction sur Entrante. L'adresse IP locale de la carte réseau virtuelle
est également remplie.
6 Pour le Port local, entrez le port 80. Si vous avez accepté les valeurs par défaut lorsque
vous avez créé la machine virtuelle dans l'exercice précédent, vous n'avez pas ouvert
le port 80, c'est donc un bon exemple de ce qui se produit lorsque le trafic est refusé.
7 Pour l'Adresse IP distante, entrez 8.8.8.8. Cette adresse peut vous sembler
familière : c'est un serveur DNS ouvert fourni par Google. Vous ne faites rien
avec ce serveur ; vous avez juste besoin de fournir à Network Watcher une adresse
IP externe pour simuler le flux de trafic. Vous pouvez également vous rendre sur
https://whatsmyip.com et entrer votre réelle adresse IP publique.
8 Définissez le Port distant sur le port 80, puis sélectionnez Vérifier.
Le résultat de la vérification de flux IP devrait être Accès refusé. Network Watcher vous
indique gentiment la règle à l'origine de l'échec du flux de trafic : la règle
DefaultInboundDenyAll. Vous savez qu'il existe une règle de sécurité réseau qui
bloque le trafic, mais où est-elle appliquée ? Au sous-réseau, à la carte réseau virtuelle
ou bien au groupe de sécurité des applications ? Une autre fonctionnalité Network
Watcher vous permet de le découvrir !
commun de règles sur un sous-réseau entier, puis d'être plus précis pour les groupes
de sécurité d'application (tels que « Autoriser le port TCP 80 sur tous les serveurs
Web ») ou pour une machine virtuelle spécifique.
Voici quelques exemples courants de la façon dont les règles NSG peuvent être
appliquées :
¡ Au niveau du sous-réseau : autoriser le port TCP 5986 pour la gestion à distance
sécurisée depuis le sous-réseau de gestion 10.1.10.20/24.
¡ Au niveau du groupe de sécurité des applications : autoriser le port TCP 80 pour le
trafic HTTP vers les applications Web et appliquer le groupe de sécurité des
applications à toutes les machines virtuelles d'application Web.
¡ Au niveau de la carte réseau virtuelle : autoriser le port TCP 3389 pour les accès au
bureau à distance depuis le sous-réseau de gestion 10.1.10.20/24.
Il s'agit de règles de base, et elles autorisent explicitement certains trafics. Si aucune
règle d'autorisation ne correspond à un paquet réseau, les règles DenyAll par défaut
sont appliquées pour rejeter le trafic.
Lors du test de l'application mentionnée dans l'exemple, vous avez peut-être
configuré cette règle HTTP pour autoriser uniquement le trafic depuis l'un de vos sous-
réseaux locaux. À présent, les clients ne peuvent pas se connecter via l'Internet public.
Tester
Pour savoir où est appliquée une règle NSG, procédez comme suit :
Figure 12.4 Lorsque vous sélectionnez une machine virtuelle, Network Watcher examine la façon dont sont
appliquées l'ensemble des règles NSG ainsi que leur ordre de priorité, et indique quelles règles effectives sont
actuellement appliquées. Vous pouvez ensuite explorer rapidement le sous-réseau, la carte réseau virtuelle et
les règles par défaut pour rechercher et modifier l'emplacement d'application d'une règle donnée.
186 Chapitre 12 Surveillance et dépannage
Les règles par défaut de la machine virtuelle que vous avez créée précédemment ne
sont certes pas passionnantes. Vous pouvez cependant naviguer dans le sous-réseau,
l'interface réseau et les règles effectives par défaut pour obtenir un aperçu de la façon
dont les règles sont combinées et de la manière dont vous pouvez identifier où elles
sont appliquées, si vous avez besoin de modifier l'emplacement.
Figure 12.5 Une capture de paquets réseau consultée dans l'analyseur de messages de Microsoft.
Chaque paquet individuel est disponible pour examen. Vous pouvez regrouper et filtrer par protocole de
communication ou par hôte client. Cette étendue de données réseau vous permet d'examiner les paquets
qui circulent réellement entre les nœuds, afin de dépanner l'emplacement d'une erreur. Un ancien collègue
m'a un jour déclaré que « les paquets ne mentent jamais ». Il suffit de savoir les déchiffrer.
Azure Network Watcher 187
Tester
Pour installer l'extension de machine virtuelle Network Watcher et capturer les paquets
réseau, procédez comme suit :
3 Choisissez de créer une règle d’alerte, puis ajoutez une condition, lorsque le
pourcentage logiciel est supérieur à une moyenne de 10 % au cours des
5 dernières minutes. Un graphique vous indique les métriques les plus récentes,
ajustez alors le seuil si aucune alerte n'est déclenchée au-delà de 10 %.
4 Ajoutez un groupe d’actions et attribuez-lui un nom et un nom court. Pour cet
exercice, les deux noms doivent être azuremol. Les groupes d’actions vous
permettent de définir des séries d’étapes réutilisables à effectuer lorsqu’une alerte
est générée. Il peut s'agir d'envoyer un e-mail à un groupe d’utilisateurs, ou
d’exécuter un script PowerShell automatisé ou une application Azure Logic App.
5 Explorez les types d’actions disponibles, puis sélectionnez e-mail/SMS/vocale.
6 Choisissez la façon dont vous souhaitez être averti, par exemple par e-mail ou
SMS. Certains frais d'opérateurs téléphoniques peuvent s’appliquer aux
notifications par SMS ou vocales.
7 Une fois le groupe d’actions créé, nommez l’alerte, puis définissez le niveau
de gravité. Ce niveau de gravité est utile si vous avez défini de nombreuses alertes.
Vous pourrez ainsi les trier et hiérarchiser celles qui doivent être résolues en premier.
8 Lorsque vous êtes prêt, créez la règle. L'activation de la règle et des notifications
définies nécessite 10 à 15 minutes.
Cet exemple est basique. Réfléchissez à toutes les alertes et notifications existantes
parmi vos applications et services et à la façon dont vous pouvez utiliser cette fonction
lorsque vous exécutez des charges de travail dans Azure.
Partie 3
Les prochains chapitres présentent quelques fonctions et services clés d'Azure qui
vous permettent de concevoir la sécurité dans vos applications. C'est probablement
inexact : la sécurité une fonction à ajouter ni une directive à garder à l'esprit. Elle
doit être bâtie de façon intrinsèque au cœur même de votre application, dès les
premières phases de conception. Dans ce chapitre, vous débuterez avec la sécurité
dans Azure en apprenant à sauvegarder et à récupérer vos données. Il ne vous
semble peut-être pas courant d'aborder les sauvegardes lorsque l'on parle de
sécurité. Vous devez appréhender la sécurité comme un ensemble allant au-delà du
chiffrement des données et des certificats Web SSL. Qu'en est-il de la protection de
vos données après une panne, une perte de données ou un piratage ? Le thème de
la sauvegarde et de la réplication constitue d'ailleurs une excellente transition entre
le chapitre sur la haute disponibilité et celui-ci.
Vous pensez peut-être que les sauvegardes sont un travail élémentaire. En tant
qu'ex-administrateur backup, je peux vous dire qu'assurer le bon déroulement des
tâches de sauvegarde et des rotations n'a rien de très amusant ! Cependant, il est
essentiel que les sauvegardes soient réalisées en temps et en heure pour protéger vos
applications et pour que, dans le pire des scénarios, vous puissiez restaurer vos
données rapidement et de façon fiable. Vous pouvez également répliquer vos
VM d'une région Azure à une autre. Cette possibilité repose sur les concepts de
haute disponibilité que nous avons abordés dans le chapitre 7.
Dans ce chapitre, vous apprendrez à sauvegarder et restaurer des VM, puis à
répliquer automatiquement des VM dans Azure. L'ensemble de ces sauvegardes et
de ces points de restauration sont chiffrés afin que vos données soient sécurisées.
191
192 Chapitre 13 Sauvegarde, récupération et réplication
données peuvent être stockées au niveau de baies de stockages sur site ou d'un offre de
récupération Azure. La figure 13.1 illustre la manière à laquelle le service Azure Backup
peut protéger et orchestrer l'ensemble des sauvegardes selon vos besoins.
Serveurs
VM sur site
Azure physiques sur site VM externes (par
(VMware/Hyper-V)
VMs (Windows/Linux) exemple, AWS)
Sauvegarde
Sauvegarde Sauvegarde incrémentielle
complète incrémentielle
VM
protégée
La première opération
de sauvegarde transfère
toutes les données depuis
la VM vers l'emplacement
de récupération
sélectionné.
La tâche de sauvegarde Les autres tâches de
suivante porte uniquement sur sauvegarde continuent de
les données qui ont changé sauvegarder uniquement les
depuis la dernière opération. données qui ont changé depuis
la dernière opération.
Figure 13.2 Les sauvegardes incrémentielles portent uniquement sur les données qui ont changé depuis
l'opération précédente. La première sauvegarde est toujours une sauvegarde complète. Ensuite, chaque tâche
de sauvegarde porte uniquement sur les données qui ont changé depuis le moment où la tâche précédente a été
effectuée. Vous contrôlez la fréquence des sauvegardes complètes via les stratégies. Cette approche minimise
la quantité de données à transmettre de façon sécurisée sur le réseau et à héberger sur le lieu de stockage de
destination. Azure Backup assure la cohésion entre les différentes sauvegardes incrémentielles pour que,
lorsque vous restaurez les données, celles-ci soient cohérentes et complètes.
Sauvegarde
quo dienne
Perte de données acceptable
VM protégée
Sauvegarde
hebdoma-
daire
Sauvegarde
complète
unique Durée acceptable d'indisponibilité
de l'application
VM protégée
Plusieurs
sauvegardes
incrémentielles
Délai minimal de
Le délai de récupération
récupération des données
s'allonge progressivement
Figure 13.4 Le RTO détermine le délai acceptable pour le processus de restauration des données, délai
au cours duquel l'application ne sera pas disponible. Plus le processus de restauration implique de points
de récupération, plus le RTO est long. De la même manière, plus le stockage de sauvegarde est proche
du point de récupération, plus le RTO est court.
Dans l'un ou l'autre des scénarios, les données de point de récupération doivent être
transférées à partir de l'emplacement de stockage du point de récupération jusqu'à
l'emplacement de restauration. Pour les opérations de restauration volumineuses, qui
nécessitent de transférer plusieurs centaines de gigaoctets, votre bande passe réseau
devient un véritable goulet d'étranglement qui déterminera la vitesse à laquelle vos
applications seront remises en service.
Si vous avez défini des stratégies de conservation longues avec de nombreux points de
récupération incrémentielle successifs, le même phénomène se produit. Pour la
restauration des données, il est possible que plusieurs points de récupérations soient
montés et restaurés. Votre travail consiste à déterminer combien de temps vous souhaitez
pouvoir remonter et sous quel délai vous souhaitez pouvoir restaurer les données.
Le RPO et le RTO diffèrent selon vos applications et les opérations de votre
entreprise. Si vous avez une application qui traite des commandes en temps réel, vous
pouvez difficilement vous permettre des temps d'interruption trop longs. Vous choisirez
donc certainement un RPO et un RTO très courts. Généralement, vos données sont
contenues dans une base de données. Donc, vous concevrez dans la plupart des cas vos
applications de façon qu'elles bénéficient d'une marge de tolérance, plutôt que de
compter sur les points de récupération. Pensez à Cosmos DB : il n'y a rien à sauvegarder,
la plateforme Azure se charge de la réplication et de la protection des données à votre
place. Si vous avez conçu une solution personnalisée sur MySQL ou Microsoft
SQL Server, vous utilisez probablement un type de clustering et de réplication similaire
pour vous assurer que vous disposez de plusieurs copies de la base de données, afin que
vous n'ayez pas à effectuer une restauration depuis une sauvegarde si vous perdez une
instance. Les sauvegardes vous permettent principalement de vous protéger en cas de
panne importante ou de corruption des données.
196 Chapitre 13 Sauvegarde, récupération et réplication
Tester
Toutes vos sauvegardes Azure sont stockées dans un coffre Recovery Services. Pour
créer un coffre et une stratégie de sauvegarde, procédez comme suit :
Vous disposez maintenant d'une stratégie de sauvegarde, qui définit également des
stratégies de conservation pour différentes périodes, mais vous n'avez encore rien
à sauvegarder. Nous allons donc créer une VM avec Cloud Shell. Vous pourrez ainsi créer
une sauvegarde, puis, dans un autre exercice plus tard, répliquer les données.
Tester
Pour créer une VM de test pour la sauvegarde et la réplication, procédez comme suit :
La stratégie de sauvegarde est définie, et votre VM de test est prête. Pour voir le
fonctionnement de Azure Backup en pratique, nous allons appliquer votre stratégie de
sauvegarde à la VM.
Tester
Pour sauvegarder une VM selon la stratégie définie, procédez comme suit :
Figure 13.5 Pour créer la première sauvegarde, sélectionnez le bouton Sauvegarder maintenant. Une
fois la sauvegarde terminée, son état est mis à jour. L'heure de la dernière sauvegarde est indiquée, ainsi
que le dernier point de restauration et le point de restauration le plus ancien.
Restauration de fichiers
Le processus de restauration de fichiers est assez facile dans
Azure Backup. Azure crée un script de récupération que
vous pouvez télécharger et exécuter, ce qui vous offre une
certaine flexibilité quant au mode de restauration des
fichiers et à la destination. Ce script de récupération est
protégé par un mot de passe. Ainsi, vous seul pouvez
exécuter le processus de récupération. Lorsque vous
exécutez le script de récupération, vous êtes invité à entrer
le mot de passe avant de pouvoir continuer. La fenêtre de
téléchargement du script de récupération est illustrée à la
figure 13.6.
Lorsque vous exécutez le script de récupération, votre
point de récupération est connecté en tant que système de
fichiers local sur votre ordinateur. Pour les VM Windows, un
script PowerShell est généré, et un volume local
(par exemple, F:) est connecté. Pour les VM Linux, le point
de récupération est monté en tant que disque de données
(par exemple, /dev/sdc1) dans votre
volume home. Dans les deux cas, le script de récupération
indique clairement où vous pouvez trouver vos fichiers.
Une fois que vous avez terminé de restaurer les fichiers
depuis le coffre de récupération, vous devez retourner sur le
portail Azure et sélectionner l'option Démonter les disques.
Ce processus retire les disques de votre ordinateur local
et les renvoie dans le coffre de récupération, où ils sont de
nouveau disponibles pour utilisation. Si vous devez
restaurer rapidement des fichiers pour une VM de
production et que, dans le feu de l'action, vous oubliez de
démonter les disques, pas de panique ! Azure dissocie
automatiquement les points de récupération après
12 heures.
Restauration complète de VM
Une restauration complète de VM crée une VM, la connecte Figure 13.6 Lorsque vous effectuez une
au réseau virtuel et rattache l'ensemble des disques durs restauration de fichiers, vous choisissez un point de
récupération à restaurer. Un script de récupération
virtuels. Essayons d'effectuer une restauration complète de
est téléchargé sur votre ordinateur. Vous pouvez
VM. Comme il est toujours préférable de tester les mises à exécuter ce script uniquement en saisissant le mot
jour de maintenance avant de les déployer réellement, cet de passe généré. Le script de récupération monte le
exercice de restauration est une bonne pratique. point de récupération en tant que volume local sur
votre ordinateur. Une fois que vous avez restauré les
fichiers dont vous avez besoin, vous démontez les
disques sur votre ordinateur. Ceux-ci sont alors
renvoyés dans le coffre de récupération et
disponibles pour utilisation.
200 Chapitre 13 Sauvegarde, récupération et réplication
Tester
Pour restaurer une VM complète, procédez comme suit :
Figure 13.7 Lorsque la sauvegarde de la VM est terminée, la vue d'ensemble affiche les données
de la dernière sauvegarde et les points de restauration disponibles. Pour démarrer le processus de
restauration, sélectionnez Restaurer la machine virtuelle.
Figure 13.8 Azure Site Recovery organise la réplication et la migration des ressources physiques ou
virtuelles vers un emplacement autre. Les emplacements sur site comme Azure peuvent faire office de
points d'origine et de destination pour la protection, la réplication ou la migration.
Tout comme Azure Backup ne fonctionne pas qu'avec Azure, Azure Site Recovery ne
réplique pas que les VM Azure. Azure Backup et Azure Site Recovery peuvent être
utilisés comme solutions hybrides pour la sauvegarde et la récupération d'urgence. Ces
services Azure peuvent être utilisés pour protéger toutes vos charges de travail, aussi
bien sur site que sur Azure. À des fins de conformité et de validation, vous pouvez
ensuite générer une structure de rapport unique pour vous assurer que toutes les
charges de travail sont effectivement protégées des pertes de données et sécurisées.
Pourquoi utiliser Azure Site Recovery ? Cette solution est principalement utilisée
pour la réplication et la migration.
La réplication vous protège d'une panne totale de la région Azure. Il faudrait qu'un
événement catastrophique se produise pour que toute une région soit coupée, mais
quand vous travaillez dans l'IT, vous savez que tout est possible. Même les ensembles de
disponibilité et les zones de disponibilité dont nous avons parlé au chapitre 7 vous
protègent uniquement des pannes mineures dans une région Azure. Si toute la région
est hors connexion, votre application n'est plus accessible. Avec Site Recovery,
l'ensemble de l'environnement de votre application, y compris les ressources du réseau
virtuel, sont répliquées dans une région Azure secondaire. Un clic sur un bouton suffit
pour mettre en circuit et activer l'emplacement secondaire. Le trafic peut alors être
acheminé vers cet emplacement secondaire, et vos clients ont accès à votre application.
La figure 13.9 illustre de façon simplifiée la manière à laquelle Azure Site Recovery
protège votre environnement.
Environnement de Environnement
production de récupération
Figure 13.9 Azure Site Recovery réplique la configuration, les données et les réseaux virtuels de
l'environnement de production vers un environnement de récupération. Les VM ne sont créées dans
l'environnement de récupération que si un basculement est initié. Seules les données sont répliquées.
Pour une réplication Azure-Azure, il n'y a pas de calendrier de réplication défini. Les
disques sont répliqués quasiment en temps réel. Lorsque des données changent sur les
disques virtuels source, elles sont répliquées dans l'environnement de récupération.
Pour les charges de travail hybrides, lorsque vous protégez des VM VMware ou Hyper-V
sur site, vous définissez des stratégies qui régissent le calendrier de réplication.
Dans le cas d'une réplication Azure-Azure, pourquoi les données sont-elles
répliquées quasiment en temps réel ? Un cache de compte de stockage est créé à
l'emplacement défini dans l'environnement de production, comme illustré à la
figure 13.10. Les modifications écrites sur les disques virtuels de production sont
immédiatement répliquées dans ce cache de compte de stockage. Le cache de compte
de stockage est ensuite répliqué dans l'environnement de récupération. Ce cache de
compte de stockage fait office de tampon. Ainsi, les éventuels délais de réplication dans
l'emplacement de récupération distant n'affectent pas les performances au niveau de la
charge de travail de production.
Figure 13.10 Les modifications sur les disques virtuels de production sont immédiatement répliquées
dans un cache de compte de stockage. Ce cache de compte de stockage empêche les chutes de
performances au niveau des charges de travail de production, car la réplication des changements dans
l'emplacement de récupération distant est différée. Les changements sont ensuite répliqués depuis le
cache de compte de stockage vers le point de récupération distant de manière à assurer la cohérence
des données.
vous pouvez initier un basculement avant que la zone soit sinistrée. Cette approche
vous permet de décider le moment de la mise hors service potentielle entraînée par le
basculement des ressources vers l'emplacement secondaire, généralement en dehors
des heures de travail. Une fois la région Azure principale sécurisée, vous pouvez ensuite
rebasculer vos ressources vers l'emplacement habituel et continuer d'exécuter vos
applications.
Le deuxième scénario dans lequel vous pourriez être amené à initier un basculement est
lorsque vous souhaitez vérifier que le processus fonctionne. Tout comme les sauvegardes, la
réplication et le plan de basculement doivent être testés. Il serait assez gênant (voire très
stressant) de découvrir au moment d'activer un emplacement secondaire qu'il y a un
problème de configuration au niveau des réseaux virtuels, ou que l'une des applications ne
bascule pas correctement. Heureusement, Azure offre une option spécifique pour tester le
basculement. Un réseau virtuel Azure isolé est généralement utilisé dans l'emplacement
secondaire, tandis que les charges de travail de production continuent de
s'exécuter normalement dans l'emplacement principal. Si vous utilisez Azure Site Recovery,
pensez à tester régulièrement le processus de basculement !
La sécurité de vos données est importante. Plus précisément, c'est la sécurité des
données de vos clients qui est essentielle. Presque chaque semaine, on apprend
dans les actualités qu'une grande entreprise a été victime d'une violation de
données. Dans la plupart des cas, ces incidents sont dus à un manque de sécurité, à
une mauvaise configuration, ou encore à une simple négligence. À notre ère
numérique, il est bien trop facile pour des utilisateurs malveillants d'automatiser
leurs tentatives d'accès à vos données. Le délai pour récupérer d'un incident de
sécurité à un niveau applicatif n'est rien comparé au temps nécessaire à l'entreprise
pour regagner la confiance de ses clients en cas d'exposition de leurs données.
Avec les fonctionnalités de chiffrement proposées par Azure, vous ne pourrez
plus prétendre que vous n'avez pas le temps ou l'expertise pour sécuriser vos
données. Dans ce chapitre, nous examinons comment chiffrer les données stockées
dans Stockage Azure ou sur des disques gérés, ou encore comment chiffrer
l'intégralité de la machine virtuelle. Des livres entiers ont été écrits sur le chiffrement
des données, et l'objectif de ce chapitre n'est pas de revenir en détail sur les méthodes
et considérations en la matière. Au lieu de cela, vous découvrez comment tirer parti
de certaines fonctions et services clés d'Azure pour sécuriser vos données tout au
long du cycle de vie applicatif.
206
Qu'est-ce que le chiffrement des données ? 207
011
110
101
Figure 14.1 Dans cet exemple simple, un utilisateur malveillant pourrait intercepter le trafic réseau envoyé
via une connexion HTTP non chiffrée. Étant donné que vos données ne sont pas chiffrées, cet utilisateur
malveillant pourrait reconstituer les paquets réseau et obtenir vos informations personnelles et financières.
Au contraire, si vous vous connectez au serveur Web via une connexion HTTPS chiffrée, il est impossible
pour un utilisateur malveillant de lire les contenus des paquets réseau et d'accéder aux données.
Un certificat SSL est un composant numérique qui sert à sécuriser le serveur Web et
permet à un navigateur Web de valider la connexion. Il est possible d'utiliser un certificat
SSL générique pour l'intégralité d'un domaine, par exemple *.azurewebsites.net, pour
le domaine par défaut ou pour les applications Web. Lorsque vous avez créé une
application Web au chapitre 3, vous auriez pu ajouter https:// to the web address and
started to use encrypted communications with your web apps. C'est aussi simple que ça !
Les certificats SSL personnalisés sont relativement abordables et faciles à mettre en
œuvre. Grâce à des projets comme Let’s Encrypt (https://letsencrypt.org), vous pouvez
obtenir gratuitement un certificat et configurer automatiquement votre serveur Web
en quelques minutes. Vous pouvez également acheter et utiliser un certificat App
service qui s’intègre directement aux applications Web. Les certificats App Service sont
stockés dans Azure Key Vault, que nous étudierons plus en détail au chapitre 15.
Lorsque vous concevez et créez des applications dans Azure, dans la mesure du possible,
vous devez mettre en œuvre des communications sécurisées. Cette approche permet de
sécuriser les données pendant leur transfert, mais qu'en est-il lorsque ces données sont
écrites sur le disque ? Il existe un processus similaire pour les disques et les machines
virtuelles, qui permet de sécuriser et protéger vos données au repos. La figure 14.2 montre
comment fonctionne le chiffrement des disques et des machines virtuelles.
J'espère que ces exemples simplifiés de chiffrement des données dans Azure vous
encourageront à mettre en œuvre le chiffrement lorsque vous concevez et créez des
applications dans Azure. La plupart des clients s'attendent à ce que leurs données
soient sécurisées, et de nombreuses entreprises sont contraintes par des exigences
réglementaires et de conformité qui rendent obligatoire le chiffrement. Vous ne devez
pas prendre en compte uniquement l'amende potentielle à payer par l'entreprise en
cas de violation des données ou la perte de la confiance des clients. Pensez également
au risque d'exposition des données personnelles et financières de vos clients,
et à l'impact que cela peut avoir
208 Chapitre 14 Chiffrement des données
sur leurs vies quotidiennes. Vous n'aimeriez probablement pas que vos propres
données soient ainsi exposées, c'est pourquoi vous devez faire tout votre possible pour
protéger les données de vos clients.
Machine virtuelle
Disque
Disque Mémoire géré
temp. virtuelle Les données sont chiffrées
lorsqu'elles sont écrites
sur un disque géré.
Le disque temporaire et les
données en mémoire de la machine
virtuelle ne sont pas chiffrés.
Figure 14.3 Lorsque les données sont écrites sur un disque géré, elles sont chiffrées. Les données situées dans la
mémoire de la machine virtuelle ou sur des disques temporaires locaux de la machine virtuelle ne sont pas chiffrées,
sauf si la totalité de la machine virtuelle est activée pour le chiffrement, une fonctionnalité que nous verrons plus
loin à la section 14.4.2. Le chiffrement automatique des données écrites sur des disques gérés n'entraîne aucune
surcharge de la machine virtuelle. La plateforme Azure effectue l'opération de chiffrement dans le stockage sous-
jacent. La machine virtuelle n'a pas à gérer les processus de chiffrement/déchiffrement.
Storage Service Encryption 209
Ce chiffrement au repos sur des disques gérés n'a aucun impact en termes de
performances des machines virtuelles. La machine virtuelle n'a pas à effectuer de
traitement supplémentaire pour chiffrer et déchiffrer les données, de sorte que toute
la puissance d'UC disponible peut être utilisée pour exécuter les applications. Dans les
scénarios standard de chiffrement de machine virtuelle, la machine virtuelle utilise
une certaine quantité de puissance de calcul pour traiter et gérer le chiffrement des
données. Avec de chiffrement automatique des disques gérés, le prix à payer est que
seuls le système d'exploitation et les disques de données sont sécurisés. Les autres
données situées dans la mémoire ou sur le disque temporaire de la machine virtuelle
pourraient, potentiellement, être exposées.
Microsoft gère les clés de chiffrement numérique sur la plateforme Azure à l'aide du
chiffrement automatique des disques gérés. Mais là encore il y a un prix à payer, c'est
que si vous pouvez chiffrer automatiquement vos données sans avoir besoin de créer, de
gérer, d'assurer la rotation ou de révoquer des clés, vous devez faire confiance
à Microsoft pour protéger ces clés.
Compte de
stockage chiffré HTTP
Application
Données
HTTPS
Les données sont chiffrées
lorsqu'elles sont écrites Blob Fichier Seul le trafic utilisant une
dans le stockage blob communication chiffrée, telle
ou de fichiers. que HTTPS, est accepté.
Figure 14.4 Lorsque vous activez le SSE, les objets blob et fichiers Azure sont chiffrés lorsque les données sont écrites
sur le disque. Les tables et files d'attente Azure ne sont pas chiffrées. Pour renforcer la sécurité des données, vous
pouvez forcer toutes les communications associées à un compte Stockage à utiliser des protocoles de communication
sécurisés, comme HTTPS. Cette approche permet de protéger les données pendant leur transfert jusqu'au moment où
elles sont chiffrées sur le disque.
(suite)
Les SDK Azure, comme les exemples Python que nous avons examinés au chapitre 4, peuvent
utiliser des connexions chiffrées. Les documents de référence pour chaque SDK spécifique à un
langage fournissent des conseils sur la façon de mettre en œuvre des communications
sécurisées.
L'utilisation de communications sécurisées doit être intégrée aux applications dès le départ.
L'activation de communications sécurisées sur une application existante peut poser problème si
certains composants n'ont pas été correctement configurés au départ. À tout le moins, vous
devez commencer par tester les communications sécurisées pour une application existante
dans un environnement de développement.
Tester
Pour créer un compte de stockage et activer le chiffrement et les communications sécurisées,
procédez comme suit :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell dans le menu du haut.
2 Créez un groupe de ressources, en spécifiant un nom de groupe de ressources, par
exemple azuremolchapter14, et un emplacement, par exemple eastus :
az group create --name azuremolchapter14 --location eastus
4 Vérifiez que le compte de stockage est chiffré et activé pour les communications
sécurisées en interrogeant enableHttpsTrafficOnly et les paramètres de chiffrement :
az storage account show \
--name azuremolstorage \
--resource-group azuremolchapter14 \
--query [enableHttpsTrafficOnly,encryption]
[
true,
{
"keySource": "Microsoft.Storage",
Chiffrement de machine virtuelle 211
"keyVaultProperties": null,
"services": {
"blob": {
"enabled": true,
"lastEnabledTime": "2019-09-27T03:33:17.441971+00:00"
},
"file": {
"enabled": true,
"lastEnabledTime": "2019-09-27T03:33:17.441971+00:00"
},
"queue": null,
"table": null
}
}
]
Tester
Pour créer un coffre de clés et une clé de chiffrement, procédez comme suit :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell dans le menu du haut.
2 Créez un coffre de clés à l'aide de la commande az keyvault create. Spécifiez
le groupe de ressources que vous avez créé dans l'exercice précédent, par
exemple azuremolchapter14, puis fournissez un nom unique pour votre coffre
de clés, tel que azuremolkeyvault :
az keyvault create \
--resource-group azuremolchapter14 \
--name azuremolkeyvault \
--enabled-for-disk-encryption
Je vous propose maintenant de vous arrêter pour réfléchir à la raison pour laquelle
vous ajoutez un paramètre pour --enabled-for-disk-encryption. Lorsque vous
chiffrez une machine virtuelle, la plateforme Azure doit être en mesure de la démarrer
et de la déchiffrer pour qu'elle puisse s'exécuter. La plateforme Azure n'est pas
autorisée à accéder à ces données, et Microsoft ne peut pas afficher les clés de
chiffrement et les utiliser pour autre chose que pour démarrer une machine virtuelle.
Lorsque vous activez un coffre de clés pour le chiffrement de disque, vous autorisez
Azure à accéder à ce coffre ainsi qu'à utiliser la clé de chiffrement associée à une
machine virtuelle.
Encore une fois, Microsoft n'a pas accès à ces clés ni à vos données, et peut
uniquement démarrer votre machine virtuelle chiffrée. Vous admettrez qu'il est difficile
de faire grand-chose avec une machine virtuelle chiffrée si elle ne peut pas démarrer.
La figure 14.5 montre comment la plateforme Azure utilise la clé de chiffrement pour
démarrer une machine virtuelle chiffrée.
Figure 14.5 Lorsqu'un coffre de clés est activé pour le chiffrement de disque, il autorise la plateforme
Azure à demander et utiliser la clé de chiffrement pour démarrer une machine virtuelle chiffrée.
Les clés peuvent être créées et stockées dans un logiciel, mais il est également possible
de les stocker dans des modules de sécurité matérielle (HSM) pour plus de sécurité.
Les clés logicielles sont adaptées à de nombreuses applications, même si l'utilisation de
HSM peut vous être imposée par des exigences de sécurité. Nous reviendrons plus en
détail sur ce point dans le prochain 15.
Chiffrement de machine virtuelle 213
3 Pour créer une clé, spécifiez le coffre que vous avez créé à l'étape précédente,
par exemple azuremolkeyvault, puis indiquez un nom de clé, tel que
azuremolencryptionkey :
az keyvault key create \
--vault-name azuremolkeyvault \
--name azuremolencryptionkey \
--protection software
Figure 14.6 Lorsque vous chiffrez une machine virtuelle, l'extension de chiffrement de disque Azure est installée.
Cette extension gère l'utilisation de BitLocker sur les machines virtuelles Windows ou de dm-crypt sur les machines
virtuelles Linux afin d'effectuer le chiffrement des données sur votre machine virtuelle. Elle est également utilisée
lorsque vous interrogez l'état du chiffrement pour une machine virtuelle.
Presque chaque semaine, on apprend qu'une grande entreprise a été victime d'un
incident de cybersécurité. De la même manière que vous avez utilisé différents
modes d'automatisation pour faire évoluer ou répliquer vos applications et vos
données, les utilisateurs malveillants automatisent leurs propres actions. Il est peu
probable qu'une seule personne tente manuellement de compromettre la sécurité
de vos systèmes. Dès lors, il devient difficile de défendre vos systèmes 24 heures/24,
7 jours/7, 365 jours/an (ou 366 jours, si vous voulez !).
Dans le chapitre 14, nous avons vu comment chiffrer vos données et vos machines
virtuelles. Ce processus constitue un premier pas important, et nous avons aussi vu
rapidement comment créer et utiliser des clés de chiffrement stockées avec le service
Azure Key Vault. La meilleure approche pour stocker des données sécurisées telles
que les clés, secrets et certificats consiste à utiliser un coffre numérique, par exemple
un coffre de clés, qui gère, émet et audite l'utilisation de vos informations
d'identification et données critiques, le tout de façon centralisée. Lorsque vos
applications et services ont besoin d'accéder à différentes ressources, ils peuvent
automatiquement demander, récupérer et utiliser ces clés, secrets et informations
d'identification. Dans ce chapitre, vous découvrirez pourquoi et comment créer un
coffre de clés sécurisé, contrôler l'accès aux secrets et certificats, puis stocker et
récupérer ces derniers.
216
Sécurisation des informations dans le cloud 217
Une méthode courante pour assurer la sécurité des applications et des services consiste à
utiliser des clés numériques, des secrets et des certificats, comme illustré à la figure 15.1.
Plutôt que de recourir à un nom d'utilisateur et un mot de passe que vous devez, chaque
fois, saisir manuellement (ou pire encore peut-être, qui sont écrits dans un fichier de
configuration non chiffré), vous utilisez un coffre numérique pour stocker ces informations
d'identification et données sécurisées. Lorsqu'une application ou un service fait une
demande d'accès, il lui faut demander la clé ou le secret nécessaire, et une piste d'audit est
également créée afin de suivre toute utilisation incorrecte ou violation de sécurité.
Machines
Applications Services
virtuelles
Figure 15.1 Azure Key Vault constitue une méthode sécurisée pour stocker des informations numériques telles
que des certificats, des clés et des secrets. Ces éléments sécurisés sont alors directement accessibles par vos
applications et services, ou encore par les ressources Azure telles que les machines virtuelles. Avec un minimum
d'interaction humaine, vous pouvez distribuer de manière centralisée des informations d'identification et des
certificats sécurisés dans vos environnements applicatifs.
Lorsqu'ils sont correctement conçus et mis en œuvre, ces coffres numériques sont
presque entièrement automatisés et sécurisés. Les services peuvent demander un
nouveau certificat numérique, qui est alors émis, puis stocké en toute sécurité dans le
coffre, et ils peuvent ensuite utiliser ce certificat pour s'octroyer l'accès à d'autres
composantes d'application. Les serveurs peuvent configurer des logiciels en récupérant
les secrets tels que les mots de passe dans le coffre numérique, puis en installant les
composants d'application, sans que les informations d'identification ne soient stockées
dans un fichier de configuration texte. Un administrateur d'application peut gérer de
manière centralisée l'ensemble des secrets, clés et certificats associés à un service, et les
mettre à jour régulièrement en fonction des besoins.
Azure Key Vault propose toutes ces fonctions de sécurité numérique et vous permet
de contrôler étroitement quels utilisateurs et quelles ressources sont autorisés à accéder
aux données sécurisées. Les coffres de clés peuvent être répliqués de façon sécurisée à
des fins de redondance et d'amélioration des performances des applications, et ils
s'intègrent avec les ressources Azure courantes telles que les machines virtuelles, les
applications Web et les comptes Azure Storage.
Figure 15.2 Azure Key Vault est une ressource logique située dans Azure, mais les certificats, secrets
et clés sont stockés dans un HSM (module de sécurité matérielle). Pour les scénarios de développement
ou de test, il est possible d'utiliser un coffre avec protection logicielle, qui exécute toutes les opérations
de chiffrement, telles que le chiffrement/déchiffrement des données, au niveau du logiciel et non du
matériel sur le HSM. Pour la production, vous devez utiliser un coffre avec protection par HSM, dans
lequel tout le traitement est effectué au niveau du matériel.
Pour le moment, deux types de coffres de clés sont disponibles : avec protection
logicielle et avec protection par HSM. Cette différence peut porter à confusion, c'est
pourquoi il convient de l'expliquer avant de commencer :
¡ Un coffre avec protection logicielle stocke les clés, secrets et certificats dans un HSM,
mais toutes les opérations de chiffrement nécessaires pour chiffrer ou déchiffrer
son contenu sont exécutées par la plateforme Azure au niveau du logiciel. Les
coffres avec protection logicielle sont une bonne solution pour les scénarios de
développement et de test, même si vous pouvez décider qu'une méthode un peu
plus sécurisée est nécessaire pour les charges de travail de production.
¡ Un coffre avec protection par HSM stocke les clés, secrets et certificats dans un HSM, et
les opérations nécessaires pour chiffrer ou déchiffrer son contenu sont exécutées
directement au niveau du HSM. Vous pouvez également générer vos propres clés
sécurisées dans un HSM local, puis les importer dans Azure. Cela implique des
outils et processus supplémentaires, mais avec cette méthode, vous êtes certain de
contrôler totalement les clés, et vous êtes sûr qu'elles ne quitteront jamais le HSM.
Pour optimiser la sécurité et l'intégrité de vos données, les
coffres avec protection matérielle constituent l'approche à privilégier pour les
charges de travail de production.
Quel que soit le type de coffre que vous utilisez, il est important de garder à l'esprit que
toutes vos données sont stockées de façon sécurisée sur un HSM conforme à la norme
FPIS (Federal Information Processing Standard) 140–2 de niveau 2 (au minimum), et
que Microsoft ne peut pas accéder à vos clés ni les récupérer. Les coffres protégés par
HSM impliquent un coût supplémentaire, ce qui signifie que comme pour tout ce qui
touche à Azure et au cloud computing, vous devez comparer le coût par rapport au
risque encouru en cas de compromission de vos données.
Sécurisation des informations dans le cloud 219
Installation de
MySQL Server
Figure 15.3 Dans les prochains exercices, vous allez créer un exemple de secret stocké dans un coffre
de clés qui peut être utilisé comme mot de passe de base de données pour une installation de MySQL
Server. Une machine virtuelle disposant des autorisations nécessaires pour demander le secret auprès
du coffre de clés est créée. Le secret récupéré est ensuite utilisé pour saisir automatiquement des
informations d'identifications sécurisées pendant le processus d'installation de l'application.
L'un des premiers exercices proposés dans ce livre consistait à créer une machine
virtuelle, puis à installer la pile Web LAMP. Un mot de passe MySQL Server vous a
probablement été demandé, ou un mot de passe vide a été utilisé automatiquement.
Maintenant que vous connaissez tout ce qu'il y a à savoir sur les coffres de clés, vous
pouvez récupérer automatiquement un mot de passe dans le coffre et l'utiliser de
façon dynamique pour installer et configurer le serveur.
Tester
Pour créer un coffre de clés et ajouter un secret, procédez comme suit :
1 Ouvrez le portail Azure, lancez Cloud Shell et créez un groupe de ressources, par
exemple azuremolchapter15 :
az group create --name azuremolchapter15 --location eastus
2 Créez un coffre de clés en lui attribuant un nom unique, tel que azuremol,
et activez-le pour le déploiement de façon à pouvoir l'utiliser pour injecter des
clés et certificats :
az keyvault create \
--resource-group azuremolchapter15 \
--name azuremol \
--enable-soft-delete \
--enabled-for-deployment
220 Chapitre 15 Sécurisation des informations avec Azure Key Vault
Par défaut, votre compte utilisateur Azure se voit attribuer des autorisations
complètes sur le coffre de clés. Cela ne pose aucun problème pour ces exercices,
même si comme bonne pratique de sécurité, vous devriez envisager de restreindre
l'accès à votre coffre de clés. Vous pouvez ajouter le paramètre --no-self-perms
pour ignorer l'attribution de l'autorisation à votre compte.
3 Créez un secret, tel que databasepassword, et attribuez une valeur de mot de
passe, par exemple SecureP@ssw0rd. (Original, n'est-ce pas ?) Ce secret peut
être utilisé pour s'identifier auprès d'un serveur de base de données, que vous
déploierez dans les exercices suivants :
az keyvault secret set \
--name databasepassword \
--vault-name azuremol \
--description "Database password" \
--value "SecureP@ssw0rd"
4 Vous disposez d'autorisations complètes sur le coffre de clés, de sorte que vous
pouvez afficher le contenu de votre secret :
az keyvault secret show \
--name databasepassword \
--vault-name azuremol
6 Récupérez le secret de sorte que vous puissiez continuer à utiliser le mot de passe
de base de données avec votre application et vos services :
az keyvault secret recover \
--name databasepassword \
--vault-name azuremol
là après que vous l'ayez supprimé et restauré. Voyons maintenant comment une machine
virtuelle peut accéder à un coffre de clés et utiliser le secret pour installer MySQL Server.
Azure Active
1. Un principal de service (un Directory
type de compte spécial) est
créé dans Azure Active Directory Principal de service
Activation de l'identité
de service géré sur une
machine virtuelle Azure Instance 3. La machine virtuelle utilise
Instance Metadata Service pour
Metadata faire une demande de jeton
Service d'accès afin de se connecter
à un service ou une ressource
2. L'identité de service géré
est appliquée à une machine Ord. virt Ressource
virtuelle qui accorde l'accès
aux ressources Azure
Azure 4. Le jeton d'accès est utilisé Azure
pour se connecter à une
ressource, par exemple pour
récupérer le secret dans le
coffre de clés
Figure 15.4 Lorsque vous créez une identité de service géré pour une machine virtuelle, un principal de service
est créé dans Azure Active Directory. Ce principal de service est un type spécial de compte qui peut être utilisé par
les ressources pour s'authentifier. Cette machine virtuelle utilise ensuite le point de terminaison Instance
Metadata Service pour faire des demandes d'accès aux ressources. Le point de terminaison se connecte à Azure
AD pour demander des jetons d'accès lorsque la machine virtuelle doit demander des données provenant d'autres
services. Lorsqu'un jeton d'accès est renvoyé, il peut être utilisé pour demander l'accès à des ressources Azure,
par exemple un coffre de clés.
Une identité gérée vous permet de créer un type spécial de compte qui peut être utilisé
par une ressource Azure, comme une machine virtuelle. Si vous avez utilisé un service
d'annuaire tel que Active Directory, un compte d'ordinateur est souvent utilisé pour
identifier et octroyer l'accès à différentes ressources réseau dont un ordinateur a
besoin. Pour ce type d'authentification, il n'est pas nécessaire de créer et d'utiliser des
comptes utilisateur classiques, ce qui contribue à renforcer la sécurité : vous pouvez
octroyer un ensemble restrictif d'autorisations à un ordinateur uniquement, ce qui
vous évite d'avoir également à vous soucier des autorisations utilisateur et de l'accès
aux dossiers partagés, par exemple.
Une identité gérée est semblable à un compte d'ordinateur, mais elle est stockée
dans Azure Active Directory (Azure AD). L'identité, qui est appelée principal de service,
est propre à chaque machine virtuelle et peut être utilisée pour attribuer des
222 Chapitre 15 Sécurisation des informations avec Azure Key Vault
Tester
Pour créer une machine virtuelle avec une MSI, procédez comme suit :
2 Comme bonne pratique de sécurité, vous ne devez pas autoriser les comptes à
accéder à l'ensemble des ressources de votre abonnement Azure. En particulier
pour les identités gérées, octroyez uniquement le niveau d'autorisation minimum
nécessaire.
Pour cet exercice, définissez l'étendue de l'accès à votre groupe de ressources
uniquement, ici azuremolchapter15. Vous définissez cette étendue en
interrogeant l'identifiant du groupe de ressources à l'aide de la commande
--query id. Cet identifiant est ensuite attribué à une variable nommée scope :
scope=$(az group show --resource-group azuremolchapter15
➥--query id --output tsv)
3 Créez une identité gérée attribuée au système pour la machine virtuelle avec le
rôle de lecteur, de sorte qu'elle puisse uniquement lire les ressources, et pas leur
apporter des modifications. Étendez l'identité au groupe de ressources. La
variable que vous avez créée à l'étape précédente qui contient l'identifiant du
groupe de ressources est fournie :
az vm identity assign \
--resource-group azuremolchapter15 \
--name molvm \
--role reader \
--scope $scope
4 Appliquez les autorisations à Azure Key Vault qui accorde l’accès au principal de
service pour l’identité gérée. Vous pouvez le faire via le portail en accédant à
Stratégies d’accès pour la ressource Key Vault. Vous pouvez également utiliser la
CLI Azure. Utilisons la CLI pour obtenir les informations à l’aide d’un programme.
Tout d'abord, obtenez les informations sur le principal de service Azure AD
pour votre identité de service géré. Appliquez le filtre display-name sur la
machine virtuelle que vous avez créée à l’étape 3, par exemple molvm :
az ad sp list \
--display-name molvm \
--query [].servicePrincipalNames
224 Chapitre 15 Sécurisation des informations avec Azure Key Vault
Un point à préciser ici : lorsque l'identité gérée a été créée et que sa portée a été
définie au groupe de ressources, cela ne signifiait pas pour autant que la machine
virtuelle pouvait faire ce qu'elle voulait. Tout d'abord, le seul rôle créé pour l'identité
était les autorisations de lecture sur les ressources. Mais vous deviez toujours attribuer
des autorisations au coffre de clés lui-même. Ces couches de sécurité et ces autorisations
vous permettent de contrôler précisément les ressources exactes auxquelles chaque
identité peut accéder.
Maintenant que vous avez accès à un coffre de clés, je suppose que vous voulez savoir
comment récupérer le secret, n'est-ce pas ?
Instance
Ord. virt
Metadata
Azure
3. Le jeton d'accès est renvoyé Service
depuis Azure Active Directory
5. Le secret stocké dans 2. IMDS transmet la
le coffre de clés pour demande de jeton d'accès de
4. Le jeton d'accès est utilisé par
databasepassword est la machine virtuelle à Azure
la machine virtuelle pour faire une
renvoyé à la machine Active Directory pour la
demande d'accès à la ressource,
virtuelle ressource cible
par exemple au coffre de clés
Azure Active
Azure Key Vault
Directory
secret databasepass- Principal de service
word
Figure 15.5 La machine virtuelle utilise le service IMDS pour demander l'accès à un coffre de clés.
Le point de terminaison communique avec Azure AD pour faire une demande de jeton d'accès. Le jeton
d'accès est renvoyé à la machine virtuelle, ce qui permet ensuite de faire une demande d'accès auprès du
coffre de clés. Si l'accès est accordé par le coffre de clés, le secret pour databasepassword est renvoyé
à la machine virtuelle.
Tester
Pour récupérer et utiliser un secret sur une VM avec une identité gérée, procédez
comme suit :
1 Obtenez l'adresse IP publique de la machine virtuelle que vous avez créée dans
l'exercice précédent, par exemple molvm :
az vm show \
--resource-group azuremolchapter15 \
--name molvm \
--show-details \
--query [publicIps] \
--output tsv
4 La sortie est un peu difficile à lire, car au premier abord, ce n'est qu'un fouillis de
texte. Elle est au format JSON Web Token (JWT). Pour traiter la sortie JSON et la
rendre plus lisible par l'homme, installez un analyseur JSON appelé jq :
sudo apt-get update && sudo apt-get -y install jq
5 Exécutez à nouveau votre requête curl, mais cette fois affichez la sortie avec jq :
curl 'http://169.254.169.254/metadata/identity/oauth2/token?
➥api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net'
➥-H Metadata:true --silent | jq
Ces premières étapes vous permettent de voir comment les requêtes sont exécutées et
à quoi ressemble la sortie, comme illustré à la figure 15.6. Si vous continuez à vous
connecter à la machine virtuelle et que vous demandez manuellement un jeton
d'accès, quel est l'intérêt d'utiliser une identité gérée ? Vous pourriez simplement
fournir vos propres informations d'identification. Dans le cadre d'une utilisation en
production, vous utiliseriez probablement un script qui s'exécute sur la machine
virtuelle pour faire automatiquement la demande de jeton d'accès, puis pour récupérer
le secret auprès du coffre de clés. Poursuivons, et voyons comment vous pouvez
automatiser ce processus et récupérer le secret.
Instance
Ord. virt
Metadata
Azure
3. Le jeton d'accès est renvoyé Service
5. Le secret stocké dans depuis Azure Active Directory
2. IMDS transmet la
le coffre de clés pour demande de jeton d'accès
databasepassword est 4. Le jeton d'accès est utilisé par de la machine virtuelle
renvoyé à la machine la machine virtuelle pour faire une à Azure Active Directory
virtuelle demande d'accès à la ressource, pour la ressource cible
par exemple au coffre de clés
Azure Active
Azure Key Vault
Directory
secret database- Principal de service
password
Figure 15.6 Sur ce diagramme, la requête curl couvre les trois premières étapes. La requête curl est
exécutée, le point de terminaison communique avec Azure AD, et un jeton d'accès est émis.
6 Pour simplifier les choses, et si vous devez faire toutes ces opérations dans un
script, vous pouvez utiliser jq pour traiter la réponse de curl, extraire uniquement
le jeton d'accès, et définir celui-ci en tant que variable nommée access_token:
access_token=$(curl
➥'http://169.254.169.254/metadata/identity/oauth2/token?
➥api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net'
➥-H Metadata:true --silent | jq -r '.access_token')
Obtention d'un secret à partir d'une machine virtuelle à l'aide d'une identité de service géré 227
8 C'est maintenant que les choses deviennent amusantes ! Utilisez le jeton d'accès
pour demander votre secret au coffre de clés. Nous allons d'abord le faire
manuellement pour que vous compreniez ce qui se passe.
9 Récupérez le secret avec une autre requête curl, puis formatez la sortie avec jq.
Saisissez le nom de votre coffre de clés au début de https:// address:
curl https://azuremol.vault.azure.net/secrets/databasepassword?
➥api-version=2016-10-01 -H "Authorization: Bearer $access_token"
➥--silent | jq
La sortie est similaire à l'exemple suivant, qui montre la valeur du mot de passe
stocké dans le secret, ainsi que des métadonnées supplémentaires sur le secret
dont vous n'avez pas à vous soucier pour le moment :
{
"value": "SecureP@ssw0rd!",
"contentType": "Database password",
"id":
➥"https://azuremol.vault.azure.net/secrets/databasepassword/
➥87e79e35f57b41fdb882c367b5c1ffb3",
}
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api
version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net'
Instance
Ord. virt
Metadata
Azure
3. Le jeton d'accès est renvoyé Service
depuis Azure Active Directory
5. Le secret stocké dans 2. IMDS transmet la
le coffre de clés pour 4. Le jeton d'accès est demande de jeton d'accès
databasepassword est utilisé par la machine de la machine virtuelle à
renvoyé à la machine virtuelle pour faire une Azure Active Directory
demande d'accès à la
virtuelle ressource, par exemple
pour la ressource cible
au coffre de clés
Azure Active
Azure Key Vault
Directory
secret Principal de service
databasepassword
Figure 15.7 Cette deuxième requête curl couvre les deux dernières étapes du diagramme. Le jeton d'accès est
utilisé pour demander le secret au coffre de clés. La réponse JSON (qui inclut la valeur du secret) est renvoyée.
228 Chapitre 15 Sécurisation des informations avec Azure Key Vault
10 De la même manière que vous avez utilisé une variable pour stocker le jeton d'ac-
cès, dans un script, vous pouvez également attribuer la valeur du secret à une
variable. Cette fois, utilisez jq pour traiter la réponse, extrayez uniquement la
valeur du secret, puis définissez-la en tant que variable nommée
database_password :
database_password=$(curl
➥https://azuremol.vault.azure.net/secrets/databasepassword?
➥api-version=2016-10-01 -H "Authorization: Bearer $access_token"
➥--silent | jq -r '.value')
11 Encore une fois, pour vous aider à comprendre le processus, affichez le contenu de
la variable database_password :
echo $database_password
J'espère que vous suivez ! Si vous écrivez une application en Python, ASP.NET ou Node.
js, par exemple, le processus sera le même, car vous demandez le jeton d'accès, puis
vous utilisez ce jeton pour demander un secret auprès d'un coffre de clés. Il y a proba-
blement d'autres bibliothèques que vous pourriez utiliser dans votre code au lieu d'ex-
écuter l'utilitaire jq à partir de la ligne de commande.
Un bref rappel : toutes ces étapes peuvent être condensées en deux lignes, comme
illustré dans l'extrait suivant.
Liste 15.1 Demande de jeton d'accès, puis de secret auprès d'un coffre de clés
access_token=$(curl
➥'http://169.254.169.254/metadata/identity/oauth2/token?
➥api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net'
➥-H Metadata:true --silent | jq -r '.access_token')
database_password=$(curl
➥https://azuremol.vault.azure.net/secrets/databasepassword?
➥api-version=2016-10-01 -H "Authorization: Bearer $access_token"
➥-silent | jq -r '.value')
13 Installez MySQL Server. Il n'y a pas d'invites, car le mot de passe est fourni
par les sélections de configuration :
sudo apt-get -y install mysql-server
Vous êtes connecté à MySQL Server, ce qui confirme que le secret stocké dans le
coffre de clés a été utilisé pour créer les informations d'identification SQL Server !
16 Saisissez exit deux fois pour fermer l'invite de commande MySQL Server, puis
fermez votre session SSH sur la machine virtuelle.
Nous venons de voir un exemple de base, et pour que les applications puissent accéder
aux bases de données ou aux tables, par exemple, il vous faudrait tout de même sécuriser
MySQL Server et fournir des informations d'identification supplémentaires. L'avantage
d'utiliser un secret stocké dans un coffre de clés réside dans le fait que vous êtes certain
que tous les mots de passe sont les mêmes. Si vous utilisez des VMSS, par exemple,
chaque instance de machine virtuelle peut automatiquement demander le secret et
installer MySQL Server de façon à être prête à fournir vos données d'application. Ces
mots de passe ne sont jamais définis dans des scripts, et personne n'a besoin de les
visualiser. Vous pouvez même générer des mots de passe de façon aléatoire et assurer
leur rotation de la même façon qu'avec les secrets stockés dans un coffre de clés.
C'est bien beau de stocker des mots de passe dans un coffre de clés, mais est-il possible
d'utiliser un coffre de clés pour stocker des certificats, puis de récupérer ces certificats
automatiquement à partir de vos applications ou machines virtuelles ? Bien sûr !
Figure 15.8 Un utilisateur, une application ou un service peut demander un nouveau certificat auprès
d'un coffre de clés. Une demande de signature de certificat est envoyée par le coffre de clés à une
autorité de certification tierce ou interne. Azure Key Vault peut également être sa propre autorité de
certification afin de générer des certificats auto-signés. L'autorité de certification émet alors un
certificat X.509 signé, qui est stocké dans le coffre de clés. Pour terminer, le coffre de clés retourne
le certificat au demandeur initial.
certificats auto-signés ne sont pas considérés comme de confiance par les autres
services et applications, ce qui signifie qu'ils génèrent souvent un avertissement, mais
ils permettent d'être rapidement opérationnel et de s'assurer que votre code
fonctionne comme prévu avec le trafic chiffré.
Azure Key Vault peut générer des certificats auto-signés à votre place. En catimini,
Azure KeyVault joue le rôle de sa propre autorité de certification pour demander,
émettre et stocker des certificats. Nous allons utiliser cette possibilité pour générer un
certificat auto-signé et voir comment l'injecter dans une machine virtuelle en toute
simplicité. Le certificat est ensuite utilisé pour un serveur Web de base afin de vous
montrer comment activer rapidement SSL pour sécuriser votre trafic Web.
Tester
Pour créer un certificat et l'injecter dans une machine virtuelle, procédez comme suit :
1 Créez un certificat auto-signé dans Azure Key Vault, puis saisissez un nom, par
exemple molcert. Des stratégies sont utilisées pour définir des propriétés telles
que les délais d'expiration, le niveau de chiffrement et le format du certificat.
Vous pouvez créer différentes stratégies pour répondre aux besoins de vos
applications et services. Pour cet exercice, utilisez la stratégie par défaut qui crée
un certificat de 2 048 bits et est valable pendant un an :
az keyvault certificate create \
--vault-name azuremol \
--name molcert \
--policy "$(az keyvault certificate get-default-policy)"
2 Pour voir le certificat en action, créez une autre machine virtuelle, par exemple
molwinvm. Cette fois, créez une machine virtuelle Windows qui utilise Windows
Server 2019. Vous allez faire aimer ce système d'exploitation, en constatant que
ces fonctionnalités Key Vault ne dépendent pas d’un système d’exploitation
spécifique ! Fournissez vos nom d'utilisateur et mot de passe administrateur :
az vm create \
--resource-group azuremolchapter15 \
Création et injection de certificats 231
--name molwinvm \
--image win2019datacenter \
--admin-username azuremol \
--admin-password P@ssw0rd1234
5 Une fois que vous êtes connecté, cliquez sur le bouton Démarrer de Windows,
puis saisissez mmc et ouvrez la Microsoft Management Console.
6 Sélectionnez Fichier > Ajouter/Supprimer un composant logiciel enfichable,
puis choisissez d'ajouter le composant logiciel enfichable Certificats.
7 Choisissez d'ajouter des certificats pour le compte d'ordinateur, et sélectionnez
Suivant, puis Terminer.
8 Cliquez sur OK pour fermer la fenêtre Ajouter/Supprimer un composant
logiciel enfichable.
9 Développez le dossier Certificats (ordinateur local) > Personnel > Certificats. Le
certificat provenant d'Azure Key Vault que vous avez injecté dans la machine
virtuelle est répertorié, ici CLIGetDefaultPolicy, comme illustré à la figure 15.10.
Figure 15.10 Dans la Microsoft Management Console, ajoutez le composant logiciel enfichable
Certificats sur l'ordinateur local. Développez le dossier Personnel > Certificats pour afficher les certificats
installés. Le certificat injecté à partir de Key Vault est répertorié.
C'est aussi simple que ça ! Créez le certificat dans Key Vault, puis ajoutez le certificat à
la machine virtuelle. Le certificat est placé dans le magasin de certificats local de
l'ordinateur, ce qui permet aux services ou applications d'y accéder. Sur une machine
virtuelle Windows, les certificats sont stockés dans le cache de certificats local, comme
vous pouvez le voir dans cet exercice. Sur les machines virtuelles Linux, les fichiers .prv
et .crt correspondant aux parties privées et publiques des certificats sont stockés dans/
var/lib/waagent/. Vous pouvez déplacer les certificats là où vous le souhaitez pour
votre application ou service.
Les certificats peuvent être utilisés pour l’authentification entre les clients et les
serveurs, ou entre les composants et les services d’application. Un exemple courant
consiste pour un serveur Web à utiliser un certificat SSL, ce que vous allez faire dans
l'exercice pratique de fin de chapitre.
Et si Azure était assez intelligent pour surveiller toutes vos ressources d'application
de base et vous alerter des problèmes de sécurité ? Ne serait-ce pas formidable ? Ou,
si votre entreprise dispose déjà de stratégies de sécurité définies (Si vous n'en avez
aucune, arrêtez immédiatement de lire ce document et prenez note pour ne pas
oublier d'en créer.) Dans ce dernier cas, comment assurer la conformité de vos
déploiements Azure ? Si vous avez déjà passé un audit de sécurité informatique,
vous savez à quel point il peut être merveilleux d'examiner une liste de problèmes
de configuration affectant votre environnement, surtout s'il s'agit d'erreurs de
sécurité de base que vous êtes capables d'éviter !
Avec Azure Security Center, vous disposez d'un emplacement central où consulter
les alertes et les recommandations de sécurité qui vous sont adressées. Vous pouvez
définir vos propres stratégies de sécurité, puis laisser Azure surveiller l'état de vos
ressources pour s'assurer qu'elles sont conformes.
Dans ce chapitre, nous expliquons comment Security Center peut vous alerter
des éventuels problèmes et indiquer la procédure à suivre pour les résoudre,
comment vous pouvez utiliser l'accès Juste à temps aux VM pour contrôler les
connexions à distance et réaliser des audits sur celles-ci, et comment
Update Management veille automatiquement à ce que vos VM restent à jour avec les
derniers correctifs de sécurité.
16.1 Azure Security Center
Tout au long de ce livre, nous avons abordé des sujets liés à la sécurité comme la
création et la configuration de groupes de sécurité réseau (NSG) pour limiter
l'accès à la VM ou la façon de n'autoriser que le trafic chiffré vers les comptes
Stockage Azure. Au-delà des exercices de ce livre, il peut être difficile de savoir par
où commencer dans vos propres déploiements et comment vérifier que vous avez
appliqué toutes les bonnes pratiques de sécurité. C'est dans ce cas
qu'Azure Security Center peut s'avérer très utile : ses capacités d'analyse de votre
environnement permettent de détecter vos éventuels oublis et erreurs.
234
Azure Security Center 235
Machines Réseaux
virtuels Stockage Applications
virtuelles
Figure 16.1 Azure Security
Center surveille vos
Surveillance ressources Azure et utilise des
Génération d'alertes
des ressources stratégies de sécurité définies
et de conseils de
Azure à la correction pour vous avertir des menaces
recherche de et des vulnérabilités
problèmes de potentielles. La solution
sécurité fournit également des
Azure Security Center recommandations et des
mesures de résolution des
problèmes. Vous pouvez aussi
Fonctionnalités de utiliser l'accès Juste à temps
sécurité dédiées à la VM, surveiller et appliquer
pour compléter les des mises à jour de sécurité,
recommandations et contrôler les applications
de stratégie
placées sur liste blanche dont
Accès Juste à Mise en liste
Update l'exécution sur les VM est
temps à la VM blanche
Management autorisée
d'applications
Security Center peut également vous avertir si des bonnes pratiques générales ne sont
pas mises en œuvre (par exemple, si les diagnostics ne sont pas activés pour une VM).
Vous souvenez-vous de la section du chapitre 12 consacrée au pil
otage et au dépannage des VM ? Vous devez installer et configurer l'agent de diagnos-
tics avant de rencontrer un problème. Si vous soupçonnez une violation de la sécurité,
vous ne serez peut-être pas en mesure d'accéder à la VM et de consulter les journaux.
En revanche, si vous avez configuré l'extension de diagnostic pour diffuser des jour-
naux vers Stockage Azure, vous pourrez obtenir des informations sur ce qui s'est passé,
comprendre l'étendue du problème et, (espérons-le), retracer sa cause.
Tester
Pour commencer à utiliser Azure Security Center, procédez comme suit :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell dans le menu du haut.
2 Créez un groupe de ressources, en spécifiant un nom de groupe de ressources,
par exemple azuremolchapter16, et un emplacement, par exemple eastus :
az group create --name azuremolchapter16 --location eastus
3 Créez une VM Linux de base de sorte que Security Center dispose d'un élément
à surveiller et pour lequel fournir des recommandations :
236 Chapitre 16 Azure Security Center et mises à jour
az vm create \
--resource-group azuremolchapter16 \
--name azuremol \
--image ubuntults \
--admin-username azuremol \
--generate-ssh-keys
Figure 16.2 fenêtre Vue d'ensemble d'Azure Security Center fournit une liste de recommandations, d'alertes
et d'événements. Vous pouvez sélectionner un type de ressource de base tel que Calcul ou Mise en réseau pour
afficher une liste d'éléments de sécurité spécifiques à ces ressources.
Security Center examine la façon dont les ressources telles que les VM, les règles de
NSG et le stockage sont déployées. Les bases de référence de sécurité intégrées
permettent d'identifier les problèmes et de fournir des recommandations. Le réseau
virtuel déployé avec vôtre VM génère des avertissements, comme illustré à la figure 16.3.
Vous pouvez (et devriez) mettre en œuvre vos propres stratégies de sécurité qui
indiquent à Azure comment vous souhaitez limiter l'accès ou quelles mesures doivent
être prises pour se conformer aux mandats opérationnels. Lorsque vous créez ou
mettez à jour des ressources, Azure
Accès Juste à temps 237
Azure recherche en
permanence les écarts par
rapport à ces stratégies et vous avertit des mesures à prendre pour résoudre les
problèmes de sécurité. Même si vous utiliserez les stratégies de sécurité Azure par
défaut dans ce chapitre, pensez à toutes les configurations de sécurité particulières
que vous pourriez appliquer à vos VM et à la façon dont elles peuvent être définies
dans vos propres stratégies personnalisées.
6 Choisissez Calcul et applications dans le menu de gauche dans la fenêtre
Security Center, puis sélectionnez les machines virtuelles et les ordinateurs.
7 Sélectionnez la machine virtuelle que vous avez créée à l'étape 3. Même si vous
venez de créer cette VM et avez utilisé les valeurs par défaut de la CLI Azure,
certains avertissements de sécurité s'affichent dans cet exemple.
Étudiez certaines de ces recommandations. Lorsque vous sélectionnez chaque
recommandation, certaines vous permettent simplement d'en savoir plus, tandis que
d'autres vous guident à travers les mesures correctives. Il ne s’agit pas de règles strictes
et infaillibles, ce sont simplement des recommandations et des bonnes pratiques.
Certaines d'entre elles sont susceptibles de ne pas être logiques dans votre propre
environnement. Elles constituent toutefois un bon point de départ pour savoir
comment procéder pour sécuriser les ressources lorsque vous les créez dans Azure.
Autorisations de
contrôle d'accès en
fonction du rôle
(RBAC)
Figure 6.4 Avec l'accès JIT à la VM, les règles de NSG sont configurées pour refuser les connexions à distance à
une VM. Les autorisations RBAC permettent de vérifier les autorisations des utilisateurs lorsqu'ils demandent
l'accès à une VM. Si l'une de ces demandes est accordée après avoir été auditée, les règles de NSG sont mises à
jour pour autoriser le trafic provenant d'une plage d'adresses IP spécifique pendant une période définie. L'utilisateur
ne peut accéder à la VM que pendant cette période. Une fois qu'elle arrive à expiration, les règles de NSG sont
automatiquement redéfinies sur un état de refus.
nécessaire. Bien entendu, vous devez tout de même limiter ce petit créneau de
connectivité à une plage d'adresses IP spécifique ! C'est dans ces situations que l'accès
Juste à temps (JIT) à la VM s'avère utile, comme illustré à la figure 16.4.
Avec l'accès Juste à temps (JIT), Security Center ajuste dynamiquement les
restrictions d'accès sur une VM. Lorsqu'il est activé, des règles de NSG bloquant tout
trafic de connexion à distance sont créées. Un utilisateur peut alors demander l'accès à
une VM uniquement lorsque cela est nécessaire. Lorsqu'il est combiné avec des
contrôles d’accès en fonction du rôle (abordées au chapitre 6), Security Center
détermine si un utilisateur dispose des droits d'accès à une VM lorsqu'il demande une
connexion. Si c'est le cas, Security Center met à jour les règles de NSG pertinentes pour
autoriser le trafic entrant. Ces règles ne sont appliquées que lors d'une période
spécifique. Une fois qu'elle est terminée, les règles sont rétablies et la VM devient à
nouveau fermée aux connexions à distance. Si vous êtes activement connecté à une VM,
vous n’êtes pas déconnecté automatiquement lorsque le délai expire. Vous
pouvez terminer vos travaux de maintenance ou de dépannage et vous déconnecter
lorsque vous êtes prêt. Vous ne serez toutefois pas en mesure d'initier une nouvelle
connexion, à moins que vous ne demandiez à nouveau un accès JIT.
Se laisser envahir
Nous n’avons pas vraiment étudié le pare-feu Azure, mais il s’agit d’une ressource de
réseau virtuel qui est ressemble un peu plus à un pare-feu physique sur site qu’à des
NSG. Si vous recherchez davantage de souplesse et de contrôle du trafic, le pare-feu
Azure constitue une excellente option, même s'il engendre un certain coût.
Sans trop s'attarder sur le pare-feu Azure, je tiens à souligner qu'Azure
Security Center peut également s'intégrer avec le pare-feu Azure, pour ouvrir et
fermer les règles requises. Si vous
Accès Juste à temps 239
utilisez le pare-feu Azure pour protéger le trafic de machines virtuelles sur les réseaux
virtuels, et pas seulement des NSG, vous pouvez toujours utiliser la gestion automatisée
des règles de l’accès JIT aux machines virtuelles.
Pour en savoir plus sur le pare-feu Azure, consultez les documents à l’adresse
https://docs.microsoft.com/azure/firewall/overview.
Dans quel cas utiliseriez-vous l'accès JIT dans votre pizzeria fictive ? Pensez aux VM qui
exécuteraient votre application Web, votre système de commande ou vos applications
de logique métier. Souhaiteriez-vous qu'elles soient connectées à Internet et
disponibles en accès public permanent ? J'espère que non ! L'accès à distance avec SSH
ou RDP est une option parfaitement valable, mais vous devriez toujours essayer de
minimiser autant que possible sa durée de disponibilité. Même si vous disposez de
règles de NSG qui limitent l'accès à certaines plages d'adresses IP, l'accès JIT apporte
une couche de protection supplémentaire concernant les éléments auxquels les
utilisateurs d'Azure peuvent accéder, puis crée une piste de vérification plus simple à
partir de laquelle Security Center peut fournir des rapports.
Tester
Pour activer l'accès Juste à temps à la VM, procédez comme suit :
Figure 16.5 Sélectionnez une VM dans les options recommandées, puis choisissez Activer JIT sur 1 machine
virtuelle. La colonne État indique actuellement que cette VM est ouverte à tous les accès à distance, ce qui entraîne
l'apparition du niveau Haut de gravité du problème de sécurité.
240 Chapitre 16 Azure Security Center et mises à jour
Par défaut, l'accès JIT définit des règles qui peuvent ouvrir les ports pour l'accès
distant SSH (port 22), RDP (port 3389) et PowerShell (ports 5985 et 5986)
pendant trois heures.
6 Pour cet exercice, activez SSH à partir de votre propre adresse IP. Suivez la bonne
pratique pour une utilisation en production et entrez une justification pour
suivre les motifs des demandes d'accès. Laissez les valeurs par défaut et choisissez
Ouvrir les ports, comme illustré à la figure 16.6.
Figure 16.6 Lorsque vous activez l'accès JIT, vous pouvez modifier les règles par défaut à
autoriser, les adresses IP sources autorisées ou la durée maximale de demande (en heures). Ces
règles JIT permettent d'exercer un contrôle précis de ce qui est autorisé, afin de ne tolérer que le
strict minimum en matière de connectivité.
7 Avec l'accès JIT, accédez à votre groupe de ressources, puis sélectionnez votre VM.
8 Choisissez Mise en réseau pour afficher la configuration de réseau virtuel
assignée à la VM. La liste des règles de NSG attribuées s'affiche, comme illustré à
la figure 16.7.
Figure 16.7 Les règles JIT sont créées avec la priorité la plus basse. Ces priorités s'assurent que les règles JIT
prévalent sur toutes les règles ultérieures appliquées au niveau du sous-réseau.
Azure Update Management 241
Les règles JIT s'affichent en haut de la liste, car elles ont la priorité la plus basse. Le
trafic est autorisé vers l’adresse IP de la VM, mais seulement à partir de votre propre
adresse IP. C’est la raison pour laquelle l'accès JIT est configuré. Ce qui peut sembler
étrange dans cet exemple, c'est la présence d'une règle default-allow-ssh qui autorise
tout le trafic. Repensez au chapitre 5, quand nous avons abordé les groupes de sécurité
réseau (NSG). Comprenez-vous ce qui se passe ici ?
L'accès JIT ne s'applique qu'à la VM. Dans la règle JIT, la colonne Destination affiche
l'adresse IP de la VM. Dans l'exemple illustré à la figure 16.7, cette adresse est 10.0.0.4.
Le trafic est autorisé. Mais la règle de NSG véritablement en vigueur est appliquée à
l'ensemble du sous-réseau. La règle default-allow-ssh s'applique au niveau du sous-
réseau et autorise le trafic depuis n’importe quelle source et vers n’importe quelle
destination.
Les règles de NSG sont traitées par ordre croissant de priorité. Comme nous l’avons
vu dans le chapitre 5, une action de refus prend toujours effet, indépendamment de
toutes règles supplémentaires. Même si vous avez modifié cette règle default-allow-ssh
pour refuser le trafic, la règle JIT permettrait toujours d’accéder à la machine virtuelle
spécifique et à partir de l’adresse IP source définie.
Soyez vigilent avec cette superposition de règles NSG. Idéalement, vous devez
supprimer la règle default-allow-sse, puis autoriser l’accès uniquement en cas de besoin
avec l'accès JIT. Dans cette approche, SSH est refusé par la règle DenyAllInbound
finale. Lorsque vous devez vous connecter à une machine virtuelle, utilisez l'accès JIT
pour demander l'accès, qui crée automatiquement une règle pour permettre à SSH
d’être étendu à votre adresse IP pendant une période définie.
La règle de NSG est supprimée automatiquement une fois que la période spécifiée
écoulée. Par défaut, les règles JIT sont appliquées pendant trois heures. Après cette
période, l'état de la VM redevient plus sécurisé, ce qui vous oblige à demander à
nouveau l'accès à cette dernière.
Ce processus JIT contrôle qui peut demander un accès à la VM et se le voir accorder.
Toutefois, le simple fait pour un utilisateur de se voir octroyer l'accès à une VM ne
signifie pas qu'il dispose des autorisations nécessaires pour s'y connecter. La seule
opération effectuée dans Azure est la mise à jour des règles de NSG définies.
Security Center et l'accès JIT ne peuvent pas ajouter, supprimer ou mettre à jour des
informations d'identification d'accès à la VM.
Toutes les requêtes JIT sont également consignées. Dans Security Center,
sélectionnez l'option Accès Juste à temps à la VM, puis choisissez votre règle. Sur la
droite, sélectionnez l'option de menu …, puis choisissez Journal d'activité. Ce journal
d'activité vous aide à vérifier qui a demandé l'accès à une VM en cas de problème.
L'accès JIT à la VM est une méthode permettant à Security Center et à Azure de
protéger vos VM. Contrôler l'accès aux VM est un élément important de la sécurité.
Mais qu'en est-il des applications, des bibliothèques et des services exécutés sur ces
machines ? C'est dans ce cas que vous devez vous assurer que toutes les dernières mises
à jour de sécurité sont appliquées à vos VM en temps opportun.
la conformité. Lorsque vous travaillez avec des applications qui traitent des données
client et des informations de paiement, n'exécutez pas les systèmes sans avoir installé
les derniers correctifs. N'oubliez pas de préparer un environnement de test permet-
tant d'appliquer des correctifs de sécurité de manière sûre et de vérifier qu'ils ne cau-
sent aucun problème avant de les appliquer à des systèmes de production !
Les VM Azure intègrent une fonctionnalité de gestion des mises à jour permettant
de rechercher les mises à jour de système d'exploitation, de signaler leur disponibilité
et de les installer. Ce qui est formidable avec cette solution, c'est qu'elle fonctionne
aussi bien sur Windows que sur Linux. Et ce n'est pas tout : elle est compatible avec
différentes distributions Linux telles qu'Ubuntu, Red Hat et SUSE. La figure 16.8
montre comment Update Management surveille la disponibilité des mises à jour
requises et peut les installer.
Azure Monitor
Surveillance de
l’agent de Gestion des mises à jour Azure Automation
machine virtuelle 3. Les runbooks sont
1. L'agent est installé
sur la VM pour exécutés selon un
transmettre des calendrier défini pour
données sur les mises appliquer les mises à
à jour installées. jour requises.
Figure 16.8 Update Management installe un agent de VM qui recueille des informations au sujet des
mises à jour installées sur chaque VM. Ces données sont analysées par Azure Monitor et retransmises à la
plateforme Azure. Il est ensuite possible de planifier l'installation automatique des mises à jour requises à
l'aide des runbooks Azure Automation.
Tester
Pour configurer votre VM afin d'utiliser Update Management, procédez comme suit :
Puisque les entreprises font désormais appel à des fournisseurs de cloud computing
depuis quelques années, ces composants System Center sur site sont remplacés par des
services Azure capables de travailler dans un environnement hybride. Nous avons
examiné deux composants dans les chapitres précédents, même si vous ne l'avez pas
remarqué :
¡ Azure Backup permet de sauvegarder des VM ou des fichiers individuels, de définir
des stratégies de conservation et de restaurer des données.
¡ Azure Site Recovery vous permet de répliquer des VM dans d'autres régions en cas
de catastrophe naturelle ou de panne prolongée.
Azure Backup et Site Recovery vous ont aidé à protéger vos données dans le chapitre 13.
Maintenant, vous allez utiliser des services supplémentaires avec Update Management :
¡ Les espaces de travail Log Analytics recueillent des informations provenant de divers
agents ou sources, tout en permettant de définir des stratégies et des requêtes
pour vous avertir de différentes situations éventuelles. Ces requêtes et alertes peu-
vent vous aider à suivre l'état des mises à jour d'une VM, ou vous signaler les prob-
lèmes de configuration ou de sécurité.
¡ Azure Monitor détaille et signale les informations basées sur le traitement effectué
dans les espaces de travail Log Analytics. Azure Monitor fournit une méthode
centralisée pour visualiser les alertes, interroger les données des journaux et
générer des notifications sur toutes vos ressources Azure.
¡ Azure Automation vous permet de créer des runbooks qui exécutent des com-
mandes ou des scripts entiers. Les runbooks peuvent représenter de grands
déploiements complexes et peuvent appeler plusieurs autres Runbooks. Nous
étudierons Azure Automation en détail au chapitre 18.
244 Chapitre 16 Azure Security Center et mises à jour
Azure
Les espaces de travail Log Analytics et Azure Automation sont deux composants
puissants sur lesquels nous pourrions facilement écrire des chapitres entiers. Avec
seulement une poignée de VM à gérer, il est facile de négliger la nécessité de mettre en
place un référentiel centralisé de journaux à des fins d'interrogation et d'alerte, ou un
moyen d'automatiser les configurations et les déploiements sur toutes les VM. Si vous
n'avez pas déjà dressé une liste de composants Azure sur lesquels revenir lorsque vous
aurez terminé de lire ce livre, commencez-en une en y ajoutant ces deux composants !
La chose la plus importante à comprendre concernant Azure est que la solution
comporte plusieurs services et composants qui peuvent souvent interagir entre eux et
se compléter les uns les autres. De la même façon que les VM Azure et les réseaux
virtuels Azure sont des services individuels, les deux services se complètent, voire
dépendent l'un de l'autre. Azure Backup et l'extension Azure Diagnostics sont
d'excellents composants individuels, mais ils libèrent véritablement leur potentiel si les
espaces de travail Log Analytics et Azure Monitor sont utilisés pour surveiller leur état
et rassembler tous les événements ou avertissements générés. J'espère que vous avez
commencé à identifier certains de ces composants associés et à voir comment les
services Azure sont interdépendants. Maintenant que vous lisez les derniers chapitres
de ce livre qui abordent les options de sécurité et de pilotage, l'objectif est de s'assurer
que les applications que vous exécutez dans Azure sont intègres et stables.
Azure Update Management 245
Figure 16.10 Une fois que l'agent de VM a effectué l'analyse de conformité, une liste des mises
à jour disponibles est fournie. Selon le système d'exploitation et la version, Update Management peut
fonctionner conjointement avec l'espace de travail Log Analytics et Azure Monitor pour classer les mises
à jour par ordre d'importance ou fournir des liens vers les pages des mises à jour correctives pertinentes.
Tester
Si vous avez de la chance (ou si vous êtes malchanceux), votre VM peut signaler
qu'aucune mise à jour n'est requise. Les images de VM sont souvent mises à jour dans
Azure. Si vous déployez une VM peu de temps après la création de l'image la plus
récente, toutes les mises à jour requises sont déjà installées. Si c'est le cas, lisez ces
étapes pour savoir ce que vous devez faire lorsque vos VM ont besoin d'être mises à jour.
Pour appliquer les mises à jour requises pour votre VM, procédez comme suit :
1 Dans la section Gestion des mises à jour de votre VM, sélectionnez Planifier le
déploiement de la mise à jour.
2 Attribuez un nom au déploiement de la mise à jour, par exemple
azuremolupdates, puis examinez la classification des mises à jour. Vous pouvez
contrôler quels ensembles de mises à jour sont appliqués. Pour l'instant, laissez
toutes les options telles qu'elles sont définies par défaut.
3 La fonctionnalité Mises à jour à exclure vous permet d'indiquer des mises à jour
spécifiques que vous ne souhaitez pas installer. Si vous savez que votre application
nécessite la version spécifique d'un package ou d'une bibliothèque, vous pouvez
vous assurer qu'aucun package mis à jour causant des dysfonctionnements n'est
installé. Examinez les options disponibles, même si aucune modification n'est
nécessaire dans cet exercice.
Azure Update Management 247
Figure 16.11 La liste des tâches de déploiement planifiées s'affiche. Chaque mise à jour est
automatiquement appliquée à l'heure définie, à moins que vous ne décidiez de supprimer la
tâche y étant associée.
Figure 16.12 Dans votre compte Azure Automation, vous pouvez gérer plusieurs ordinateurs et afficher
leur état ou appliquer des mises à jour. Les VM Azure et les ordinateurs non-Azure peuvent tous être
surveillés et contrôlés par le même compte Azure Automation. En coulisses, Azure peut s'intégrer à
d'autres fournisseurs pour installer des agents sur des ordinateurs dans un environnement hybride. Cette
intégration permet d'utiliser un tableau de bord et une plateforme de gestion uniques pour répondre à vos
besoins en matière de mise à jour.
10 Revenez à la fenêtre Gestion des mises à jour pour votre machine virtuelle, puis
sélectionnez l’onglet Hist orique. Lorsque le déploiement de votre mise à jour
démarre, son état s'affiche. N’oubliez pas que vous avez planifié l'exécution de la
tâche d'ici quelques minutes, elle ne s'affichera donc pas immédiatement.
11 Sélectionnez la planification pour afficher l’état et la sortie, comme illustré à la
figure 16.13.
Figure 16.13 Vous pouvez surveiller l'état des tâches Azure Automation en cours dans le portail. Pour
examiner ou dépanner des tâches, vous pouvez cliquer sur l'une d'entre elles pour afficher les résultats
et les journaux générés.
Exercice pratique : activation de l'accès JIT et des mises à jours pour une VM Windows 249
1 Créez une machine virtuelle Windows Server de votre choix dans le même
groupe de ressources que celui utilisé dans les exercices précédents, par exemple
azuremolchapter16.
2 Affichez les règles NSG pour la machine virtuelle/sous-réseau et supprimez
toutes les règles par défaut qui autorisent RDP sur le port TCP 3389.
3 Utilisez votre client local Connexion Bureau à distance pour vérifier que les connex-
ions RDP sont bloquées.
4 Demandez l'accès JIT, réexaminez les règles de NSG et confirmez que vous
pouvez maintenant établir une connexion RDP vers votre VM.
5 Activez Update Management sur votre VM Windows. Cette fois, vous devriez pouvoir
utiliser les comptes Azure Automation et l'espace de travail Log Analytics existants.
6 Laissez l'agent de surveillance rendre compte des mises à jour requises, puis
planifiez les mises à jour à appliquer via Azure Automation.
Partie 4
J'espère que nous ne connaîtrons pas un avenir tout droit tiré de Terminator ou de
Matrix. Dans ces films, les machines se battent pour prendre le contrôle, et
l'ascension de l'intelligence artificielle (IA) met ainsi presque fin à l'humanité. Une
source d'inquiétude que l'on connaît actuellement dans le monde de l'informatique
est le fait que les principaux acteurs du développement de l'IA soient de grandes
entreprises privées, qui travaillent de façon peu (ou pas) réglementée et sans
surveillance centrale. Attention, je ne veux pas dire que l'IA est un problème ! Les
assistants numériques des smartphones peuvent vous aider à accomplir de
nombreuses tâches quotidiennes. Les systèmes de Machine Learning (ML) mis en
œuvre dans les applications de navigation permettent de contrôler le trajet
quotidien des utilisateurs pour suggérer des itinéraires alternatifs au vu des
conditions de trafic ou météorologiques. Les commandes de chauffage domotiques
permettent d'ajuster automatiquement la température en fonction de la
température extérieure, de l'heure de la journée et de la saison (l'été ou l'hiver).
Dans la dernière partie de ce livre, vous allez découvrir les services Azure proposés en
matière d'apprentissage automatique et d'intelligence artificielle. Dans un seul chapitre.
Lors de votre pause déjeuner. Soyons réalistes : 45 minutes de lecture ne suffiront pas
pour faire de vous un expert en ML ou en IA ! Si vous mangez votre sandwich rapidement,
vous pourrez apprendre suffisamment de choses sur les différents services proposés par
Azure pour comprendre comment intégrer certains de ces services de ML et d'IA dans
vos applications. Pour la plupart, les services Azure de ML et d'IA présupposent une
certaine expérience préalable en matière d'algorithmes de données, de langages de
programmation, de traitement par lots ou de compréhension du langage. Ne vous
attendez donc pas à devenir un expert dans l'heure qui suit !
Dans ce chapitre, nous allons faire une présentation éclair de certains des
services Azure Cognitive Services qui proposent des fonctions de ML et d'IA. Vous allez
apprendre à utiliser ces services pour faire appel à des fonctions de Machine Learning de
base sur des modèles de données, puis vous allez rapidement utiliser le service Azure
Web Apps et Microsoft Bot Framework pour appliquer certains des services d'IA qui peuvent
exécuter un bot de pizzeria permettant aux clients de commander des pizzas.
253
254 Chapitre 17 Machine Learning et intelligence artificielle
Commandes vocales
Définir Commandes textuelles
un rappel Vérifier la
météo Créer un E-mail
Appeler mémo envoyé
Bob IA d'assistants
numériques courants Lancer une
minuterie
Assistant
Google Cortana
Siri
Applications intégrées
Rdv de
Notifications
calendrier
par e-mail
Circulation
+ trajet
Figure 17.1 Dans la vie quotidienne, l'IA est fréquemment utilisée sous la forme d'assistants
numériques tels que Cortana, Siri, et l'Assistant Google. Vous pouvez utiliser des commandes vocales ou
textuelles pour interagir avec eux, et ils peuvent surveiller votre calendrier quotidien ou les conditions de
circulation pour vous avertir d'éventuels problèmes.
Les assistants numériques comme ceux-ci ne peuvent pas généralement être qualifiés
de très intelligents. Ils écoutent vos entrées et y répondent. Mais ces entrées peuvent
varier, et il peut ne pas toujours s'agir de commandes spécifiques. Pensez à la façon
dont un assistant numérique vous permet de définir un rappel. Vous pouvez utiliser
l'une des phrases suivantes :
Présentationdel'intelligenceartificielle(IA)etduMachineLearning(ML),ainsiquedulienentrelesdeuxtechnologies 255
Figure 17.2 L'IA peut tenir compte des entrées de l'utilisateur et prendre les décisions qui conviennent le mieux à
l'action prévue. L'IA n'est pas préprogrammée avec toutes les réponses et tous les arbres de décision possibles. Au
lieu de cela, elle utilise des modèles de données et des algorithmes pour appliquer le contexte à l'entrée de
l'utilisateur et interpréter sa signification ainsi que le résultat souhaité.
Même dans des formes complexes d'IA, il ne s'agit pas (encore) d'une véritable
intelligence, mais plutôt d'une supposition éclairée basée sur un modèle de données
utilisé pour l'apprentissage de l'IA. Ce modèle de données peut inclure de nombreuses
variantes et expressions, ainsi qu'apprendre de nouvelles significations au fil du temps.
Comment l'IA apprend-elle, et d'où viennent ces modèles de données ? C'est dans ce
cadre que le Machine Learning joue un rôle majeur.
Figure 17.3 De grandes quantités de données brutes sont traitées et rendues prêtes à l'emploi. Différentes méthodes
de préparation et d'assainissement des données peuvent être mises en œuvre en fonction des signaux d'entrée bruts.
Des algorithmes de Machine Learning sont ensuite appliqués aux données préparées afin de construire un modèle de
données approprié qui reflète la meilleure corrélation entre tous les points de données. Différents modèles de données
peuvent être créés et affinés au fil du temps. Les applications peuvent utiliser les modèles de données sur leurs propres
entrées de données pour prendre de meilleures décisions et comprendre les tendances.
Prévisions
Utilisateur 1 météo
Trajet quotidien Météo en Automobiliste
Trajet quotidien temps réel actif 1
Trajet quotidien Automobiliste
actif 2
Utilisateur 2 Automobiliste
actif 3
Trajet quotidien Service Google
Trajet quotidien Maps
Trajet quotidien
Figure 17.4 Chaque jour, le service Google Maps reçoit plusieurs points de données de la part des
utilisateurs qui enregistrent les détails de leur trajet. Ces données peuvent être préparées et traitées,
tout comme les prévisions météorologiques et les conditions météo en temps réel lors de ces trajets
domicile-travail. Des algorithmes de ML peuvent être appliqués à ces jeux de données volumineux et à un
modèle de données généré. Les utilisateurs actifs d'un plus petit échantillon fournissent les données des
conditions de leur trajet ou météorologiques actuelles au service Google Maps. Ainsi, le modèle de
données peut être appliqué afin de prédire le déroulement de leur trajet domicile-travail et de générer une
alerte concernant la circulation sur leur smartphone, qui suggère alors un itinéraire alternatif.
Azure propose plusieurs composants très intéressants lorsqu'il s'agit d'explorer des
données à très large échelle. Tout d'abord, il y a Azure Machine Learning, un service
Web qui vous permet de créer des expériences visuellement en ajoutant des jeux de
données et des modèles d'analyse. Ces expériences peuvent utiliser des sources de
données telles que Hadoop et SQL, ainsi que des fonctionnalités de programmation
supplémentaires via des langages comme R et Python. Vous pouvez faire glisser et
déposer des sources de données, des méthodes de préparation des données et des
algorithmes de Machine Learning. Vous pouvez ajuster ces algorithmes, puis revoir et
mettre au point les modèles de données générés.
L'objectif d'Azure Machine Learning est de rendre aussi accessibles que possible les
ressources de calcul à grande échelle disponibles dans Azure. L'un des principaux avantages
offerts par l'exécution des tâches d'analyse des données de Machine Learning dans Azure
est que cela vous permet de bénéficier d'une puissance de calcul très importante, que vous
pouvez utiliser seulement lorsque cela est nécessaire pour réaliser vos calculs. Dans les
environnements traditionnels, ces ressources de calcul onéreuses resteraient longtemps
inactives entre chaque tâche de traitement de données.
Azure propose une autre ressource intéressante pour effectuer des opérations
avancées de Machine Learning et d'analyses de chiffres : les machines virtuelles de
science de données (DSVM). Ces VM sont disponibles sous Linux et sous Windows.
Elles sont proposées avec de nombreuses applications courantes préinstallées, telles
que Jupyter Notebooks, Anaconda Python et R Server ou SQL Server (figure 17.5).
Figure 17.5 Des DSVM sont disponibles sous Linux et sous Windows. Cette DSVM Window Server 2016
est proposée avec plusieurs applications de science des données préinstallées, telles R Server et
Jupyter Notebooks. Les DSVM vous permettent d'être rapidement opérationnel en matière de traitement
du Big Data et de création d'algorithmes de Machine Learning.
Azure Cognitive Services 259
Vous n'avez pas besoin d'installer tous les outils et toutes les dépendances sur votre
ordinateur local. Vous pouvez créer une DSVM dotée d'autant de ressources processeur
et mémoire que nécessaire pour traiter rapidement vos données, puis la supprimer
lorsque votre tâche de traitement est terminée et que vous avez les modèles de données
dont vous avez besoin.
17.3 Création d'un bot intelligent pour aider les clients à commander
des pizzas
Un bot est une application programmée pour répondre à des tâches et à des entrées
d'un utilisateur. Si cette description vous fait penser à n'importe quelle application,
c'est normal : un bot, c'est à peu près ça ! La différence réside dans la façon dont
l'application de bot détermine la réponse.
Le plus souvent, un bot basique courant n'est rien de plus qu'une application
proposant une certaine forme d'automatisation. Lorsqu'un utilisateur envoie un
message, définit une balise sur un e-mail ou soumet un terme de recherche, le bot
effectue des tâches préprogrammées qui exécutent une action spécifique. Ni l'IA ni le
Machine Learning n'entrent véritablement en jeu ici. L'application de bot répond
simplement à l'entrée de l'utilisateur.
Avec l'infrastructure adaptée, les capacités d'un bot peuvent être étendues, et nous
pouvons le rendre plus libre et plus intelligent. Au début de ma présentation de l'IA, j'ai
expliqué qu'une application classique doit être préprogrammée avec toutes les entrées
utilisateur prévues et leur sortie correspondante. Mais cela n'offre aucune flexibilité si
l'utilisateur fournit une expression d'entrée différente ou fait une erreur d'orthographe,
par exemple.
Microsoft produit le Bot Framework, qui permet à un bot Azure
d'intégrer les kits de développement logiciel (SDK) Bot Builder et de se connecter à
Azure Cognitive Services en toute simplicité. Une expérience limitée en programmation
suffit pour créer des bots intelligents qui exploitent toute la puissance d'Azure afin
d'offrir une expérience client de qualité. Gardez-vous toutefois de créer Skynet, à moins
que vous ne connaissiez la fin de Terminator !
Abonnement Azure
Plan App Service
Tester
Pour créer un bot d'application Web Azure, procédez comme suit :
1 Ouvrez le portail Azure, puis sélectionnez Créer une ressource dans le coin
supérieur gauche.
2 Recherchez et sélectionnez Web App Bot (Bot d'application Web), puis
sélectionnez Créer.
3 Saisissez un nom, tel que azuremol, puis créez un nouveau groupe de ressources,
tel que azuremolchapter17.
4 Sélectionnez la région la plus appropriée, puis choisissez le niveau de tarification
F0. Votre bot ne traitera pas beaucoup de messages. Le niveau gratuit (F0)
convient donc très bien.
5 Sélectionnez un modèle de bot et choisissez le langage de SDK node.js.
6 Créez un bot de base, car nous fournirons notre propre exemple de code
d’application dans un exercice ultérieur. Cette étape crée une application LUIS que
vous pouvez utiliser à des fins d'apprentissage linguistique et de Machine Learning.
7 Choisissez la région la plus appropriée pour votre application LUIS et créez un
compte LUIS.
8 Nommez le compte LUIS, par exemple, azuremol. Ce compte LUIS gère le
sentiment des utilisateurs pour notre bot.
9 Choisissez Plan App Service, puis créez un plan. Saisissez un nom, par exemple
azuremol, et là encore, sélectionnez la région la plus appropriée.
10 Désactivez App Insights, car votre bot n'utilisera pas cette fonctionnalité. Comme
pour les chapitres précédents sur les applications Web, vous pouvez exploiter
tout le potentiel d'App Insights à des fins de production pour bénéficier d'une
visibilité sur les performances de votre application en transmettant des données
et des analyses directement à partir du code.
11 Acceptez l'option de création automatique de l'ID d'application et de mot de
passe Microsoft, acceptez le contrat et sélectionnez Créer.
La création du bot d'application Web et des composants associés prend quelques
minutes. Le travail réalisé en arrière-plan est considérable :
¡ Un plan Azure App Service est créé.
¡ Une application Web est déployée, ainsi qu'une application Web Node.js d'exemple.
¡ Une application LUIS est créée, et les clés de connexion sont configurées avec
votre application Web.
¡ Un bot est créé avec le Microsoft Bot Connector, et les clés de connexion sont
configurées à partir de votre application Web.
Tester
Pour créer une application LUIS et utiliser le Machine Learning pour la former, procédez
comme suit
greetings
showMenu
orderFood
Modèle de
Formation données de Bot d'application
l'application LUIS Compréhension du Web
Entités langage et traitement
« Une pizza au de l'intention
pepperoni »
Figure 17.7 Lorsque vous formez l'application LUIS, les intentions et les entités sont entrées et traitées pour créer un modèle de
données. Votre bot d'application Web utilise ensuite ce modèle de données pour traiter la compréhension du langage et de
l'intention. Seul un petit nombre d'intentions et d'entités sont entrées à des fins de traitement. Le modèle de données n'est donc
pas parfait. En situation réelle, beaucoup plus d'intentions et d'entités seraient fournies. Vous formeriez, testeriez et affineriez le
modèle de données à plusieurs reprises afin de créer des jeux de données de plus en plus volumineux, qui vous permettraient
d'élaborer un modèle précis pour le traitement du langage et de l'intention.
Création d'un bot intelligent pour aider les clients à commander des pizzas 263
Intentions
greetings
showMenu
orderFood
N'oubliez pas, votre bot est exécuté sur une application Web. Il comporte donc des
emplacements de production et de préproduction, comme vous l'avez appris dans le
chapitre 3. En situation réelle, vous devriez effectuer la publication dans un emplacement
de préproduction, vérifier que tout fonctionne comme prévu, puis publier le bot dans
l'emplacement de production. Les mêmes fonctions PaaS qui vous ont permis de tester
et de déplacer du code Web entre les cycles de développement et de production sont
également utiles pour votre bot d'application Web optimisé par LUIS.
Cet exemple simple montre que le système de Machine Learning a été en mesure de
comprendre que votre entrée de donnée (good) morning est une salutation et que les
formules de politesse similaires, telles que (good) evening, en sont également. Le Machine
Learning permet d'obtenir les meilleurs résultats lorsqu'un jeu de données volumineux
peut être entré dans le modèle de données. Il est donc important d'effectuer des tests
approfondis et de favoriser la formation de votre application. Les performances de l'IA
(l'application LUIS, dans notre cas) dépendent directement du volume et de la qualité
des données fournies aux algorithmes de Machine Learning.
17.3.3 Création et exécution d'un bot d'application Web avec LUIS
Vous disposez maintenant d'un bot d'application Web simple dans Azure et d'une
application LUIS chargée du traitement du langage et de la compréhension de l'intention
des clients. Pour intégrer ces deux éléments,vous devez modifier le code de votre bot pour
utiliser LUIS. Des kits de développement logiciel (SDK) sont disponibles pour les langages
de programmation C# and Node.js. Si vous êtes néophyte en la matière, je trouve qu'il est
plus rapide et plus simple de comprendre comment fonctionne le code avec Node.js. Si
vous connaissez bien le langage C#, libre à vous de découvrir le SDK C# lorsque vous aurez
fini de lire ce chapitre. Pour l'instant, nous allons utiliser une application Node.js basique
tirée du référentiel d'exemples GitHub pour voir votre bot à l'œuvre avec LUIS.
Tester
Pour mettre à jour votre bot d'application Web avec votre bot LUIS formé, procédez comme suit :
7 Lorsque vous y êtes invité, saisissez le mot de passe de l'utilisateur Git que vous
avez créé et utilisé dans les chapitres précédents (le compte créé au chapitre 3).
Si vous avez oublié de noter votre mot de passe Git sur un Post-It
Si vous avez oublié le mot de passe, vous pouvez le réinitialiser. Tout d'abord, obtenez le
nom d'utilisateur de votre compte de déploiement Git local :
az webapp deployment user show --query publishingUserName
Pour réinitialiser le mot de passe, saisissez le nom de votre compte à partir de la com-
mande précédente, puis répondez aux invites pour définir un nouveau mot de passe.
L'exemple suivant réinitialise le mot de passe du compte utilisateur nommé azuremol :
az webapp deployment user set --user-name azuremol
Examinons la figure 17.9 pour voir ce que vous avez déployé. L'application LUIS est
maintenant formée avec des algorithmes de Machine Learning, et votre modèle de
données est prêt à être utilisé par l'application Node.js pour permettre aux clients
d'interagir avec le bot et de commander des pizzas.
Abonnement Azure
Plan App Service
Compréhension Application Web
du langage et de
l'intention Microsoft Bot Un client affamé
Application Node.js
Connector veut commander
LUIS Web Le client interagit
Framework une pizza en ligne
avec le bot, puis la
conversation est
Stockage des données persistantes traitée par LUIS
du bot et de l'état de la session
Compte de stockage
Table
Figure 17.9 Un client peut maintenant accéder à votre bot en ligne et demander à voir le menu ou commander une
pizza. LUIS fournit les capacités de compréhension du langage, qui permettent au bot de traiter les commandes et
de les envoyer à Azure Storage à des fins de traitement supplémentaire.
266 Chapitre 17 Machine Learning et intelligence artificielle
Une fois de retour dans le portail Azure pour votre bot d'application Web, sélectionnez
Tester dans la discussion Web. La première connexion au bot prend quelques
secondes, mais vous devriez alors être en mesure d'interagir avec celui-ci, d'afficher la
liste des pizzas du menu et de créer une commande, comme illustré à la figure 17.10.
Essayez par vous-même !
Figure 17.10 Avec votre bot d'application Web en cours d'exécution, engagez une conversation et
essayez de commander une pizza. Dans cet exemple de dialogue, vous pouvez afficher le menu, commander
une pizza et vérifier l'état de la commande. L'application est rudimentaire et ne crée pas vraiment de
commandes ni ne met à jour leur état (autrement que pour indiquer quelle pizza a été commandée), mais
l'exercice devrait normalement pouvoir vous montrer comment déployer rapidement un bot dans Azure.
Création d'un bot intelligent pour aider les clients à commander des pizzas 267
J'espère que ces exercices simples vous ont donné une idée de ce qu'Azure peut offrir
en matière d'IA et de Machine Learning. Les capacités du bot d'application Web avec
LUIS peuvent être étendues afin d'inclure d'autres services Azure Cognitive Services,
tels que la Vérification orthographique ou le Traducteur. Grâce à ces services, vous
pouvez interpréter des mots et des expressions employés par l'utilisateur s'il les
orthographie incorrectement. Ils peuvent également permettre à votre bot de
dialoguer dans plusieurs langues. Vous pouvez aussi utiliser Visage et Personalizer
pour identifier le client effectuant une commande grâce aux capacités de
reconnaissance faciale de son appareil photo, afin de suggérer automatiquement des
pizzas qu'il serait susceptible d'apprécier.
Le Machine Learning fait partie intégrante de l'application LUIS, mais Azure
propose bien d'autres ressources et outils en la matière. La possibilité de traiter des jeux
de données volumineux et de calculer des modèles de données de Machine Learning
sur des ressources de calcul Azure très performantes permet de lever les obstacles à la
création d'applications reposant sur des jeux de données conséquents. Les applications
sont plus précises et efficaces, et il n'est pas nécessaire d'acheter du matériel ni
d'installer des outils spéciaux, car les DSVM comprennent tous des composants requis.
L'IA et le Machine Learning ne constituent pas les outils parfaits pour toutes les
applications, mais ces services Azure peuvent souvent vous permettre de sortir du lot en
cette ère où les attentes des clients envers votre entreprise augmentent.
1 Dans le portail Azure, sélectionnez votre bot d'application Web, puis choisissez
Canaux.
2 Sélectionnez le canal de votre choix (Skype, par exemple).
Souvent, d'autres canaux comme Facebook ou Slack nécessitent de créer une
connexion développeur. Avec Skype, il vous suffit de copier et coller du code
HTML pour que l'opération fonctionne.
3 Fournissez toutes les informations requises, telles que l'ID de l'application de
bot. Vous pouvez trouver cet identifiant sous Paramètres pour Bot Management
(Gestion de bots).
4 Si nécessaire, utilisez l'éditeur de code en ligne pour créer une page HTML de
base, telle que default.htm, dans le répertoire wwwroot, puis collez tout code
intégré pour votre canal. Vous pouvez ouvrir votre application Web à partir du
portail Azure, puis sélectionner son URL pour ouvrir la page default.htm qui
inclut le code de votre canal, par exemple http://azuremol.azurewebsites.net/
default.htm.
18 Azure Automation
269
270 Chapitre 18 Azure Automation
Azure Automation
Figure 18.1 Azure Automation propose de nombreuses fonctionnalités connexes. Vous pouvez utiliser
un ensemble partagé de ressources, tels que des informations d'identification, des certificats, des
calendriers et des objets de connexion pour exécuter automatiquement des scripts PowerShell ou python
sur des serveurs cibles. Vous pouvez définir l'état souhaité d'un serveur, et Azure Automation installera
et configurera le serveur de manière appropriée. Les mises à jour de l'hôte et les correctifs de sécurité
peuvent être appliqués automatiquement. Toutes ces fonctionnalités valent à la fois pour les serveurs
Windows et Linux, dans Azure et sur site, ou auprès d'autres fournisseurs de cloud.
Tester
Pour créer un compte Azure Automation et des exemples de procédures opérationnelles,
procédez comme suit :
1 Dans le coin supérieur gauche du portail Azure, sélectionnez Créer une ressource.
2 Recherchez et sélectionnez Automation, puis sélectionnez Créer.
272 Chapitre 18 Azure Automation
Tester
Pour visualiser les ressources et les exemples de procédures opérationnelles configurés,
procédez comme suit :
Figure 18.3 L'empreinte du
certificat RunAsCertificate
correspond à celle affichée
dans RunAsConnection.
Dans vos procédures
opérationnelles, vous
définissez la ressource
de connexion à utiliser.
Le certificat approprié
est utilisé pour ouvrir une
session sur le compte Azure.
274 Chapitre 18 Azure Automation
5 Maintenant que vous comprenez les ressources pour les connexions et les
certificats, examinons un des exemples de procédures opérationnelles.
Sélectionnez Procédures opérationnelles dans le menu à gauche dans le compte
Automation. Plusieurs exemples de procédures opérationnelles sont disponibles.
6 Choisissez la procédure opérationnelle PowerShell appelée
AzureAutomationTutorialScript.
7 En haut de l'exemple de procédure opérationnelle, se trouvent les options
permettant de Démarrer, Afficher et Modifier la procédure opérationnelle. Ces
options devraient être explicites !
Vous disposez également d'une option pour la planification, qui vous permet de
créer ou de sélectionner une ressource partagée qui définit un calendrier pour
exécuter la procédure opérationnelle à un moment donné, et d'une option pour
Webhook, qui vous permet de créer une URL webhook pour exécuter la procédure
opérationnelle à partir d'un autre script ou action. Choisissez Afficher.
"Logging in to Azure..."
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId ` Se connecte
-ApplicationId $servicePrincipalConnection.ApplicationId ` à Azure
-CertificateThumbprint
➥$servicePrincipalConnection.CertificateThumbprint
}
Le code commence par créer un objet pour $connectionName. Dans l'exercice « Testez
dès maintenant », vous avez vu qu'une ressource de connexion par défaut pour
AzureRunAsConnection a été créée. Lorsque vous créez vos propres procédures
opérationnelles, vous pouvez créer des comptes d'identification supplémentaires et
des ressources de connexion pour séparer les procédures opérationnelles et les
informations d'identification qu'elles utilisent. Les parties de connexion et la gestion
des exceptions, que nous examinerons ensuite, doivent être communes à toutes les
procédures opérationnelles. Au besoin, vous pouvez modifier la ressource l'actif
connexion d'identification à utiliser.
Ensuite, une instruction try est utilisée pour établir la requête de connexion. Un
objet principal de service nommé $servicePrincipalConnection est créé, basé sur
$connectionName. La procédure opérationnelle se connecte ensuite à Azure avec Add-
AzureRmAccount et utilise l'objet $servicePrincipalConnection pour obtenir les
éléments TenantId, ApplicationId, et Certificate-Thumbprint. Nous avons
précédemment discuté de ces paramètres dans le cadre de la ressource de connexion.
La ressource de certificat qui correspond à l'empreinte de
$servicePrincipalConnection est alors utilisée pour finaliser la connexion à Azure.
La liste suivante montre que si la connexion échoue, la procédure opérationnelle
intercepte l'erreur et arrête l'exécution.
catch {
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}
L'instruction catch gère les erreurs dans le cadre de la tentative de connexion. Si une
connexion à un principal de service est introuvable, une erreur est générée.
Généralement, cette erreur indique que la ressource de connexion que vous avez
spécifiée est introuvable. Vérifiez deux fois le nom et l'orthographe de votre connexion.
Sinon, cela signifie que l'objet de connexion a été trouvé, et que le principal de
service a été utilisé pour se connecter, mais que ce processus d'authentification a
échoué. Cet échec peut provenir de la fin de validité du certificat ou de la fin d'activation
du compte d'identification. Cette fonctionnalité montre comment vous pouvez
révoquer un compte dans Azure AD et vous assurer que toutes les procédures
opérationnelles qui utilisent les informations d'identification ne peuvent plus
s'exécuter correctement.
276 Chapitre 18 Azure Automation
$ResourceGroups = Get-AzureRmResourceGroup
foreach ($ResourceGroup in $ResourceGroups)
{
Write-Output ("Showing resources in resource group "
➥+ $ResourceGroup.ResourceGroupName)
$Resources = Find-AzureRmResource -ResourceGroupNameContains
➥$ResourceGroup.ResourceGroupName |
➥Select ResourceName, ResourceType
ForEach ($Resource in $Resources)
{
Write-Output ($Resource.ResourceName + " of type "
➥+ $Resource.ResourceType)
}
Write-Output ("")
}
Tester
Pour observer la procédure opérationnelle en action, procédez comme suit :
Figure 18.4 Vous pouvez consulter le résultat de la procédure opérationnelle, ainsi que les
rapports ou erreurs et avertissements générés. Cet exemple de base s'exécute en quelques
secondes, mais des procédures opérationnelles plus complexes peuvent prendre plus de temps.
Vous pouvez surveiller l'état de ces procédures opérationnelles plus longues, et arrêter ou
suspendre leur exécution si nécessaire.
estimiez qu'il est inutile de consacrer du temps à la mise en œuvre de petites procédures
opérationnelles réutilisables. Vous changerez toutefois d'avis à mesure que votre
environnement et votre utilisation de l’automatisation se développent. Une grande
partie des opérations effectuées dans cet ouvrage a concerné de plus petits
déploiements, maais vous devez néanmoins réfléchir à la façon de déployer et de gérer
des applications à grande échelle.
Figure 18.5 La configuration d'état souhaité pour un serveur est créée et stockée dans Azure
Automation. Le compte Automation agit comme un serveur de type pull, ce qui permet aux serveurs
connectés de venir chercher la configuration requise à partir d'un emplacement central. Différents modes
de configuration peuvent être définis pour le comportement de remédiation du serveur lorsque leur
configuration s'écarte de l'état souhaité.
PowerShell et configuration d'état souhaité (DSC) 279
Tester
Pour afficher PowerShell DSC en cours d’exécution, procédez comme suit :
Le serveur pull Azure Automation DSC compile automatiquement la définition DSC que vous
fournissez dans un fichier MOF (Managed Object Format). Les certificats numériques gérés par
Automation sont utilisés pour chiffrer le fichier MOF. Les serveurs cibles DSC reçoivent les
certificats numériques publics requis et permettent au moteur LCM de déchiffrer et de traiter le
fichier MOF. L'état souhaité peut alors être appliqué au serveur.
Étant donné que le fichier MOF définit l'état complet de vos serveurs, vous devez protéger
son contenu. Si un utilisateur malveillant connaissait tous les composants d'application
installés et l'emplacement des divers fichiers de configuration et de code personnalisé,
cela augmenterait les risques de compromettre vos serveurs. Les versions récentes de
PowerShell chiffrent l'intégralité du fichier MOF. Azure Automation génère
automatiquement les certificats et les clés numériques requis lorsqu'un serveur cible est
configuré pour DSC, ce qui vous permet d'utiliser de façon transparente des
fichiers MOF chiffrés. Automation chiffre également le trafic entre le serveur pull
DSC et les nœuds cibles, et pas seulement le fichier MOF.
Le processus de compilation dans Azure Automation convertit à la fois la définition DSC
que vous fournissez dans un fichier MOF et chiffre le fichier MOF avec les certificats et
les clés numériques. Le processus de compilation de votre définition DSC prend
quelques secondes, mais sécurise considérablement votre environnement. Voilà encore
un autre exemple où Azure sécurise vos ressources par défaut !
12 Avez-vous ouvert le port TCP 80 pour la machine virtuelle lorsque vous l'avez
créée ? Si ce n’est pas le cas, créez une règle de groupe de sécurité réseau pour
autoriser le trafic, puis ouvrez l’adresse IP publique de la machine virtuelle dans
un navigateur Web. Le processus DSC installe le serveur Web IIS et la page Web
par défaut se charge, comme illustré à la figure 18.6.
Figure 18.6 Une fois que l'ordinateur virtuel a été connecté à Azure Automation DSC, l'état souhaité
est appliqué et le serveur Web IIS est installé.
1 PowerShell DSC pour Linux présente quelques limitations dans les distributions
Linux qu’il prend en charge sans configuration supplémentaire. Afin de
maintenir cet exercice pratique de fin de chapitre aussi simple que possible,
créez une machine virtuelle CentOS 7.7 ou ultérieure, et ouvrez le port 80.
2 Dans votre compte Azure Automation, sélectionnez Modules dans le menu
de gauche.
3 Sélectionnez Parcourir la galerie, puis recherchez, sélectionnez et importez le
module nx pour gérer les ressources Linux DSC.
4 Sur votre ordinateur local, créez un fichier nommé httpd.ps1, et tapez le
code suivant :
configuration httpd {
Import-DSCResource -Module nx
Node localhost {
nxPackage httpd {
Name = "httpd"
Ensure = "Present"
PackageManager = "yum"
}
nxService httpd {
Name = "httpd"
State = "running"
Enabled = $true
Controller = "systemd"
}
}
}
284
Que sont les conteneurs ? 285
Hôte de virtualisation
Figure 19.1 Avec une infrastructure de machines
Hyperviseur
virtuelles traditionnelle, l'hyperviseur de chaque hôte de
virtualisation fournit une couche d'isolation en délivrant
VM 1 VM 2 à chaque machine virtuelle son propre ensemble de
ressources matérielles virtuelles, telles qu'une UC
vCPU vRAM vNIC vCPU vRAM vNIC
virtuelle, une RAM virtuelle et des cartes réseau
OS invité Linux OS invité Windows virtuelles. La machine virtuelle installe un système
d'exploitation invité, tel qu'Ubuntu Linux ou
Bibliothèques principales + binaires Bibliothèques principales + binaires Windows Server, qui peut utiliser ce matériel virtuel.
Enfin, vous installez votre application et toutes les
Votre code d'application Votre code d'application bibliothèques requises. Ce niveau d'isolation crée des
machines virtuelles très sécurisées, mais ajoute aussi
une couche de contrainte en termes de ressources de
calcul, de stockage et de temps de démarrage.
Un conteneur supprime le
matériel virtuel et le système Hôte de conteneurs
d'exploitation invité. Tout ce Runtime de conteneurs (tel que docker)
qu'il contient, ce sont les Conteneur 1 Conteneur 2
applications et les bibliothèques
Bibliothèques principales + binaires Bibliothèques principales + binaires
de base requises pour exécuter
votre application, comme Votre code d'application Votre code d'application
illustré à la figure 19.2.
De nombreuses machines
Figure 19.2 Un conteneur contient uniquement les
virtuelles peuvent s'exécuter sur bibliothèques de base, les binaires et le code d'application
un même hyperviseur, chaque nécessaires pour exécuter une application. Le conteneur est
VM avec son propre système léger et portable, car il supprime le système d'exploitation
d'exploitation invité virtuel, son invité et la couche de matériel virtuel, ce qui réduit également
matériel virtuel et sa pile la taille sur disque du conteneur et les temps de démarrage.
d'applications. L'hyperviseur
gère les demandes du matériel
virtuel de chaque VM, planifie
l’allocation et le partage des
ressources matérielles physiques
et applique la sécurité et
l’isolation requises au niveau de Hôte de virtualisation
chaque machine virtuelle. Le Processeur RAM physique NIC physique
physique
travail de l'hyperviseur est
illustré à la figure 19.3.
Hyperviseur
Figure 19.3 Dans un
hôte de VM traditionnel, l'hyperviseur
assure la planification des demandes du
matériel virtuel de chaque VM sur vCPU vRAM vNIC vCPU vRAM vNIC
le matériel physique et l'infrastructure
sous-jacents. L'hyperviseur n'a VM 1 VM 2
généralement pas connaissance des
instructions spécifiques que le système OS invité Linux OS invité Windows
d'exploitation invité planifie concernant le
temps processeur physique, simplement
que du temps processeur est nécessaire.
286 Chapitre 19 Conteneurs Azure
Plusieurs conteneurs peuvent également s'exécuter sur un même hôte. L'hôte de con-
teneurs reçoit les divers appels système de chaque conteneur et planifie l'allocation et
la distribution de ces demandes sur un noyau de base, un système d'exploitation et des
ressources matérielles partagés. Les conteneurs fournissent une isolation logique des
processus d'application. Le travail du runtime de conteneurs est illustré à la
figure 19.4.
Hôte de conteneurs
Système Noyau invité
d’exploitation invité
Les conteneurs sont généralement beaucoup plus légers que les machines virtuelles.
Les conteneurs démarrent plus rapidement que les machines virtuelles, souvent en
quelques secondes contre plusieurs minutes pour les VM. La taille d'une image de
conteneur ne représente généralement que quelques dizaines ou centaines de Mo,
contre plusieurs dizaines de Go pour une VM. Il y a toujours des limites et des contrôles
de sécurité en place, mais il est important de garder en tête que chaque conteneur
partage techniquement le même noyau que les autres conteneurs sur le même hôte.
Tester
Il vous faudra quelques minutes pour créer un cluster AKS pour les exercices à venir , par
conséquent, créez-le dès à présent à la l'aide de la procédure ci-après avant de pour-
suivre la lecture de ce chapitre :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell dans le menu du haut.
2 Créez un groupe de ressources. Spécifiez un nom, par exemple
azuremolchapter19, et un emplacement, par exemple eastus. La disponibilité
régionale d'AKS peut varier ; choisissez par conséquent une région majeure, telle
qu'eastus ou westeurope. (Pour obtenir la liste actualisée des disponibilités
régionales, accédez à la page https://azure.microsoft.com/regions/services.)
az group create --name azuremolchapter19 --location eastus
L'approche microservices des applications 287
3 Pour créer un cluster Kubernetes, définissez --node-count sur 2 et utilisez les VMSS
et les zones de disponibilité (que nous avons évoqués dans les chapitres précédents) :
az aks create \
--resource-group azuremolchapter19 \
--name azuremol \
--node-count 2 \
--vm-set-type VirtualMachineScaleSets \
--zones 1 2 3 \
--no-wait
Microservices
Application monolithique
Figure 19.5 Dans une application monolithique traditionnelle, l'application tout entière fonctionne comme
une seule et même application. L'application peut comprendre divers composants, mais elle s'exécute
à partir d'une seule installation et est corrigée et mise à jour en tant qu'instance unique. Dans l'approche
microservices, chaque composant constitue un service applicatif et une unité d'exécution à part entière.
Chaque composant peut être mis à jour, corrigé et mis à l'échelle indépendamment des autres.
Une machine virtuelle standard inclut une installation complète de son système
d'exploitation invité, tel qu'Ubuntu ou Windows Server. Cette installation du système
d'exploitation de base comprend des centaines de composants, de bibliothèques et
d'outils. Vous installez ensuite d'autres bibliothèques et applications, par exemple
pour le serveur Web NGINX ou Microsoft SQL Server. Enfin, vous déployez votre code
d'application. Cette machine virtuelle exécute généralement une grande partie, sinon
la totalité, de l'application. Vous disposez en fait d'une grosse instance d’installation et
d’exécution de votre application. Pour améliorer les performances, vous pouvez
ajouter plus de mémoire ou de capacité UC à votre machine virtuelle (mise à l'échelle
verticale, telle que décrite plus tôt dans ce document) ou augmenter le nombre
d'instances qui exécutent votre application (mise à l'échelle horizontale, comme avec
des VMSS). La création d'instances multiples de l'application ne fonctionne que si
cette dernière est compatible avec les clusters, et elle implique souvent une certaine
forme de stockage partagé pour assurer un état cohérent entre les instances
d'application. Cette forme traditionnelle de déploiement est qualifiée de monolithique.
Une autre façon d'approcher la conception, le développement et l'exécution d'une
application consiste à décomposer les choses en composants de plus petite taille. On
parle dans ce cas d'approche microservices du développement et du déploiement
d'applications. Chaque microservice est responsable d'une petite partie de
l'environnement applicatif plus large. Les microservices peuvent croître, être mis à
l'échelle et être mis à jour indépendamment du reste de l'environnement applicatif.
Bien que ce modèle puisse poser quelques difficultés au début, le temps que les
équipes de développement et le département informatique s'approprient cette
manière différente de créer et de déployer des applications, les conteneurs sont
parfaitement adaptés à l'approche microservices. Les développeurs sont en mesure de
déployer des mises à jour plus petites et plus incrémentielles à un rythme plus rapide
qu'avec l'approche monolithique du développement d'applications. Les microservices
et les conteneurs sont également une solution idéale pour les workflows d'intégration
continue et de livraison continue (CI/CD), en ceci qu'ils vous permettent de créer, de
tester, de mettre en préproduction et de déployer plus facilement vos mises à jour. Vos
clients reçoivent les nouvelles fonctionnalités ou les corrections de bogues plus
rapidement, ce qui est susceptible de profiter à votre activité.
Azure Container Instances 289
19.3 Azure Container Instances
Maintenant que vous en savez plus sur ce que sont les conteneurs et sur la façon de les
utiliser, nous allons nous lancer et créer une instance de base de notre pizzeria. Cet
exemple est identique à celui des chapitres précédents, dans lequel vous avez créé une
machine virtuelle de base pour exécuter votre site Web, et déployé votre application
sur une application Web. Dans les deux cas, vous aviez dû créer la VM ou l'application
web, vous y connecter, puis y déployer une page Web de base. La puissance des
conteneurs aurait-elle pu vous faciliter la vie ? C'est certain !
Le service ACI (Azure Container Instances) vous permet de créer et d'exécuter des
conteneurs en quelques secondes. Vous n'avez pas de ressources réseau initiales à créer
et à configurer, et chaque instance de conteneur vous est facturée à la seconde de
consommation. Si vous n'avez jamais utilisé de conteneurs et que vous ne voulez rien
installer localement sur votre ordinateur, ACI est un excellent moyen de tester la
technologie.
290 Chapitre 19 Conteneurs Azure
Pour voir comment vous pouvez rapidement exécuter votre pizzeria en ligne, nous
allons créer une instance de conteneur. Si une seule commande suffit pour exécuter
une instance de conteneur, la figure 19.6 vous montre les divers composants mobilisés
en coulisses pour que cela soit possible. Nous verrons ici les composants d'un Dockerfile
et du Docker Hub une fois l'instance de conteneur opérationnelle.
Image de base
1. NGINX :1.17.5
Dockerfile
Azure Container
FROM nginx : 1.17.5 Docker Hub Instance
2. Mappage port externe 80 Déployer
EXPOSE 80:80 iainfoulds
-> port de conteneur 80 azuremol
: azuremol
COPY index.html
/usr/share/nginx/html 3.
index.html
/usr/share/nginx/html
Image de conteneur
local créée à parr du
Dockerfile et poussée
vers le référenel
azuremol public Docker Hub
Figure 19.6 Un Dockerfile a été utilisé pour créer une image complète du conteneur : azuremol. Cette
image a été poussée vers un registre public en ligne, le Docker Hub. Vous pouvez alors créer une instance
de conteneur à l'aide de cette image publique prédéfinie à partir du Docker Hub, qui fournit une image
d'application prête à être exécutée.
Tester
Pour créer une instance de conteneur Azure qui exécute un site Web de base, procé-
dez comme indiqué ci-après :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell dans le menu
du haut.
2 Créez une instance de conteneur et spécifiez que vous souhaitez disposer d’une
adresse IP publique pour ouvrir le port 80 :
az container create \
--resource-group azuremolchapter19 \
--name azuremol \
--image iainfoulds/azuremol \
--ip-address public \
--ports 80
Cet exercice utilise un exemple d'image que j'ai créé pour vous, que nous
examinerons un peu plus lorsque le conteneur sera opérationnel.
Azure Container Instances 291
3 Pour voir ce que nous avons créé, regardez la sortie de la commande pour créer
le con teneur.
Dans la section Événements, vous pouvez voir que l'image est extraite
(téléchargée) du Docker Hub, qu'un conteneur est créé et que le conteneur est
ensuite démarré.
Certaines réservations de capacité UC et de mémoire sont également
affectées, qui peuvent être ajustées au besoin. Une adresse IP publique est affichée,
ainsi qu'un certain nombre d'informations sur le conteneur, telles que son état de
provisionnement, son type de système d'exploitation et sa stratégie de redémarrage.
4 Pour ouvrir le site Web de base exécuté dans le conteneur, il vous suffit
d'interroger l'adresse IP publique attribuée :
az container show \
--resource-group azuremolchapter19 \
--name azuremol \
--query ipAddress.ip \
--output tsv
Figure 19.7 Lorsque vous créez une instance de conteneur, le site Web de la pizzeria
s'exécute sans aucune configuration supplémentaire. Toute la configuration et le
contenu sont inclus dans l'image du conteneur. Ce bref exercice met en lumière la
portabilité et la puissance des conteneurs : une fois l'image du conteneur préparée, votre
application est opérationnelle dès qu'une nouvelle instance de conteneur est déployée.
Examinons l'image du conteneur. Je ne voudrais pas rentrer dans trop de détails sur le
fonctionnement de Docker et la manière dont sont créées les images de conteneur,
mais il est important de comprendre d'où nous est venue cette image et comment elle
exécute notre site Web sans aucune configuration supplémentaire.
292 Chapitre 19 Conteneurs Azure
L’image est créée à partir d’une définition de configuration appelée Dockerfile. Dans
un Dockerfile, vous définissez la plateforme de base, la configuration que vous souhaitez
appliquer et les commandes à exécuter ou les fichiers à copier. Les Dockerfiles peuvent
être, et sont souvent, plus complexes que l'exemple de définition suivant, qui nous a
servi à créer notre conteneur azuremol :
FROM nginx:1.17.5
EXPOSE 80:80
Lorsque ce Dockerfile a été employé pour générer une image de conteneur Docker,
NGINX a été utilisé comme image source, et l'exemple de page Web a été copié
dedans. Ce conteneur a ensuite été poussé vers le Docker Hub, un référentiel public
en ligne que Docker fournit pour partager et déployer des conteneurs. Pour déployer
l'instance de conteneur, vous avez fourni iainfoulds/azuremol comme image de
conteneur à utiliser. Azure a examiné le Docker Hub et y a trouvé un référentiel
nommé iainfoulds et, à l'intérieur, une image nommée azuremol.
Passons en revue chacune des lignes du Dockerfile :
¡ FROM nginx : 1.17.5 : dans les chapitres précédents, vous aviez créé une VM de
base, vous y étiez connecté avec SSH, puis aviez installé manuellement le serveur
web NGINX. Dans notre exemple de Dockerfile, tout cela est réalisé au moyen
d'une seule ligne. Cette ligne indique de baser le conteneur sur une image de
conteneur existante qui est préinstallée avec NGINX. Le 1.17.5 est la version de
l’image de conteneur NGINX public à utiliser. C’est la version la plus récente au
moment de la rédaction du présent document. Il est recommandé d’inclure un
numéro de version spécifique. Si vous ne le faites pas, la dernière version est
toujours utilisée. Même si cela semble judicieux en théorie, les applications de
microservices peuvent s'étenddre vers un grand nombre de conteneurs actifs.
Vous devez donc vérifier l'homénégité de votre environnement et contrôler le
numéro de version exact de chaque composant utilisé.
¡ EXPOSE 80:80 : pour permettre l'accès à votre VM dans les chapitres précédents,
vous aviez créé une règle NSG qui autorisait le port 80. Dans notre Dockerfile, cette
ligne indique au conteneur d'ouvrir le port 80 et de le mapper sur le port 80 interne.
Lorsque vous avez créé votre instance de conteneur avec az container create,
vous avez également indiqué à la plateforme Azure d'autoriser le trafic approprié
avec --ports 80. Vous n'avez rien d'autre à faire pour la mise en réseau virtuelle !
¡ COPY index.html /usr/share/nginx/html : la dernière ligne vous permet de copier
votre application dans le conteneur. Dans les chapitres précédents, vous aviez utilisé
Git pour récupérer la page Web de la pizzeria et l'afficher dans votre application Web.
Avec le Dockerfile, vous copiez simplement avec COPY le fichier index.html dans le
répertoire /usr/share/nginx/html local du conteneur. Et le tour est joué !
Pour vos propres scénarios, vous pouvez définir un Dockerfile qui utilise une image de
base différente, telle que Node.js ou Python. Vous installez ensuite les bibliothèques ou les
packages supplémentaires requis, extrayez votre code d'application du contrôle de source,
tel que GitHub, et déployez votre application. Ce Dockerfile serait utilisé pour créer des
images de conteneur qui seraient ensuite stockées dans un registre de conteneurs privé, et
non dans un référentiel Docker Hub public comme celui de l'exemple.
Azure Kubernetes Service 293
open source les plus importants et les plus dynamiques sur GitHub. De nombreuses
grandes entreprises technologiques, telles que Red Hat, IBM et Microsoft, contribuent
au projet Kubernetes de base.
Dans cette section, reprenons notre exemple d'application Web de l'exercice précédent
avec ACI pour exécuter un déploiement redondant et évolutif dans Kubernetes. La
figure 19.8 illustre les composants avec lesquels nous allons nous retrouver.
Pod 1
Pod 2
Tester
Pour afficher les informations sur votre cluster AKS, procédez comme indiquez ci-après :
1 Ouvrez le portail Azure, puis sélectionnez l'icône Cloud Shell dans le menu du haut.
2 Plus tôt dans ce chapitre, vous avez créé un cluster Kubernetes. Le processus a dû
prendre quelques minutes, mais j'espère que votre cluster est prêt maintenant !
Vérifiez l'état du cluster comme suit :
az aks show \
--resource-group azuremolchapter19 \
--name azuremol
Azure Kubernetes Service 295
C'est tout ce qu'il y à faire pour rendre Kubernetes opérationnel dans Azur ! Vous vous
demandez peut-être : « Est-ce que je ne peux pas simplement créer mon propre cluster
avec des machines virtuelles ou des VMSS, et installer manuellement les mêmes
composants Docker et Kubernetes ? Si, c'est tout à fait possible. On peut faire le
parallèle avec l'approche IaaS et PaaS des VM par rapport aux applications Web.
L'approche des applications Web offre de nombreux avantages : vous ne vous occupez
que des options de configuration de haut niveau, puis vous chargez votre code
d'application. Un cluster Kubernetes managé, tel que le propose AKS, réduit le niveau
de complexité et de gestion, et vous permet ainsi de mieux vous concentrer sur vos
applications et l'expérience de vos clients.
De la même façon que vous pouvez faire le choix de machines virtuelles au lieu
d'applications Web, vous pouvez choisir de déployer votre propre cluster Kubernetes
plutôt que d'utiliser AKS. Aucun problème, les deux approches finissent par utiliser les
mêmes composants de services d'Azure. Les VM, les VMSS, les équilibreurs de charge et
les NSG, sujets que nous avons étudiés aux chapitres précédents, sont tous des composants
qui restent présents, bien qu'abstraits, dans les clusters AKS. Du point de vue de la
planification et du dépannage, vous devez disposer des compétences voulues pour
comprendre ce qui se passe sous le capot aux fins du bon fonctionnement de l'offre de
service Kubernetes managé. Votre niveau de confort et le temps que vous pouvez
consacrer à la gestion de l'infrastructure guideront votre prise de décision au moment de
vous lancer dans la création d'une nouvelle application avec des conteneurs dans Azur.
Pod 1
Pod 2
Figure 19.9 Avec le cluster Kubernetes créé dans AKS, vous pouvez désormais créer un déploiement
Kubernetes et exécuter votre application. Votre conteneur s'exécutera sur deux nœuds, avec un pod
logique sur chaque nœud ; vous devez créer un service Kubernetes qui exposera un équilibreur de charge
publique pour acheminer le trafic vers votre application.
296 Chapitre 19 Conteneurs Azure
Tester
Pour déployer une application sur votre cluster Kubernetes, procédez comme indiqué
ci-après :
Même si l'état du pod est Running, vous ne pourrez pas accéder à votre application.
L'instance de conteneur que vous avez créée précédemment pourrait acheminer le trafic
sur une adresse IP publique directement vers cette seule instance, mais de quoi un
cluster Kubernetes a-t-il besoin selon vous pour acheminer le trafic vers des conteneurs ?
Si vous avez deviné, « un équilibreur de charge », Félicitations ! Pour le moment, vous
n'avez qu'un seul pod : une seule instance de conteneur. Vous augmenterez le nombre
de pods dans l'exercice pratique de la fin du chapitre, et pour que cela fonctionne, vous
avez besoin d'un moyen d'acheminer le trafic vers plusieurs instances. Nous devons donc
indiquer à Kubernetes d'utiliser un équilibreur de charge.
Et c'est là que l’intégration entre Kubernetes et Azure devient puissante. Lorsque vous
demandez à Kubernetes de créer un équilibreur de charge pour vos conteneurs, en
coulisses, Kubernetes joint la plateforme Azure et crée automatiquement un équilibreur de
charge Azure. Cet équilibreur de charge Azure est semblable à celui que nous avons étudié
au chapitre 8. Il s'appuie sur des pools d'adresses IP front-end et back-end ainsi que sur des
règles d'équilibrage de charge, et vous donne la possibilité de configurer des sondes
d’intégrité. Lorsque votre déploiement Kubernetes voit son nombre de pods augmenter ou
diminuer, l'équilibreur de charge est automatiquement mis à jour au besoin.
Tester
Pour exposer votre application à Internet, procédez comme suit :
Pensez au ménage
N'oubliez pas de nettoyer et de supprimer vos groupes de ressources pour ne pas vous
retrouver avec une surconsommation de vos crédits Azur gratuits. Lorsque vous vous
mettez à utiliser des conteneurs, il devient encore plus important de faire attention aux
ressources Azure que vous laissez activées. Une application Web en elle-même ne coûte
pas cher, mais un cluster AKS de cinq nœuds et quelques instances de conteneur avec
des images ACR géorépliquées, c'est une autre affaire !
Les instances ACI sont facturées à la seconde, et les frais s'accumulent rapidement
lorsqu'on les laisse s'exécuter pendant des jours ou des semaines. Un cluster AKS exécute
une VM pour chaque nœud ; dès lors que vous augmentez le nombre de nœuds et exécutez
plusieurs VM dans votre cluster, vous payez donc une VM pour chaque nœud présent.
Le nombre de conteneurs que chacun de ces nœuds AKS exécute n'a pas d'impact sur la
note, mais comme avec n'importe quelle VM, un nœud AKS devient coûteux quand on le
laisse tourner. Ce qui est génial avec Kubernetes, c'est que vous pouvez exporter vos
configurations de service (la définition de vos pods, équilibreurs de charge, règles de
mise à l’échelle automatique, etc.) pour les déployer ailleurs. Lorsque vous créez et
testez vos applications, vous n'avez pas besoin de laisser votre cluster AKS s'exécuter ;
vous pouvez déployer un cluster au moment où vous en avez besoin et déployer votre
service à partir d'une configuration précédente.
Les clusters AKS peuvent être dimensionnés, comme nous le verrons dans l’exercice
pratique de fin de chapitre. Vous pouvez également configurer la mise à l’échelle
automatique qui effectue cette mise à l’échelle pour vous en fonction de la
charge. Il s’agit de la même sorte de mise à l’échelle automatique que nous avons
évoquée au chapitre 9 pour les VMSS et les applications Web. Commencez-vous
à réaliser comment tout s'assemble dans Azure ?
Dans ce chapitre, nous avons dû ici passer très vite sur le sujet des conteneurs et de
Kubernetes, alors ne vous inquiétez pas si vous vous sentez un peu décontenancé
maintenant ! Manning propose plusieurs excellents livres, comme par exemple Learn
Docker in a Month of Lunches, par Elton Stoneman (https://livebook.manning.com/
book/learn-docker-in-a-month-of-lunches) et Kubernetes dans
298 Chapitre 19 Conteneurs Azure
(suite)
Action, par Marko Luksa (https://livebook.manning.com/book/kubernetes-in-action),
qui peuvent vous aider à approfondir sur Docker, le développement d'applications en
microservices et Kubernetes. Consultez-les si ce sujet vous intéresse et que vous désirez
en savoir plus !
Les exemples de ce chapitre utilisaient des machines virtuelles Linux pour les nœuds
de cluster AKS, avant d'exécuter des conteneurs Linux pour NGINX. Les conteneurs
sont un peu compliqués car vous ne pouvez exécuter des conteneurs Linux que sur des
nœuds Linux, par exemple. Comme vous l’avez appris au début du chapitre, les
conteneurs partagent le système d’exploitation invité et le noyau. Ainsi, vous ne pouvez
pas exécuter de conteneurs Windows sur un nœud Linux. En général, vous ne pouvez
pas non plus exécuter de conteneurs Linux sur un nœud Windows. Certaines astuces
techniques intéressantes peuvent être appliquées, mais en général, le conteneur et le
système d’exploitation du nœud sous-jacent doivent correspondre l'un à l'autre.
AKS est une solution très intéressante car vous pouvez exécuter à la fois des nœuds
Linux et Windows, afin de pouvoir exécuter des conteneurs Linux et Windows ! Même
si devez aborder avec soin la planification de ces différents conteneurs sur les différents
systèmes d’exploitation de nœuds, cette approche élargit considérablement les
applications et les services que vous pouvez exécuter dans AKS.
La mise à l'échelle et l'ajout du nouveau nœud ne devrait pas prendre plus d'une
minute ou deux.
2 Utilisez à nouveau kubectl pour contrôler l'état de vos nœuds. Lorsque vous
mettez à l’échelle un nœud, Kubernetes ne crée aucune instance de conteneur
supplémentaire pour vos applications de manière automatique. Ainsi, vous ne
bénéficiez pas immédiatement des avantages des ressources de
calcul supplémentaires fournies par le nouveau nœud.
Exercice pratique : mise à l'échelle de vos déploiements Kubernetes 299
Pour moi, l'une des avancées technologiques les plus intéressantes de ces dernières
années est certainement l’Internet des objets (IoT). Je ne crois pas vraiment qu'un
lave-vaisselle ou un réfrigérateur ait besoin d'être connecté à Internet pour l'instant,
et un téléviseur ou un appareil audio connecté en permanence à Internet et
toujours à l'affût du son de votre voix pour émettre une commande pose sans nul
doute des préoccupations légitimes s'agissant de la protection de la vie privée.
Néanmoins, il y a aussi de nombreuses applications utiles de l'IoT. Prenons par
exemple un équipement de fabrication installé dans différentes usines à travers le
monde et capable de rendre compte de son état d'intégrité, de générer des alertes
de maintenance et dont il est possible de comprendre les performances. Pour une
entreprise de camionnage, il est utile de pouvoir streamer les données télémétriques
de ses véhicules concernant les charges transportées et les temps de conduite
moyens, et de pouvoir rediriger ses chauffeurs de manière plus intelligente au
besoin. Et pour une compagnie maritime, la possibilité de suivre chaque conteneur
et la capacité d'indiquer à tout moment à ses clients où sont leurs ressources pour
les aider à mieux gérer leur chaîne logistique, n'est pas non plus sans intérêt.
Dans Azure, vous pouvez intégrer des appareils IoT avec un certain nombre de
services. Azure Web Apps fournit un front-end pour la visualisation de vos données,
Azure Storage vous permet d'enregistrer les données transmises par les appareils, et
des fonctionnalités serverless telles qu'Azure Logic Apps (décrites au chapitre
suivant) traitent les données reçues.
Dans ce chapitre, nous allons examiner ce qu'est l'IoT ainsi la façon dont
Azure IoT Hub peut être utilisé pour gérer et collecter de manière centralisée les
données des appareils. Nous verrons ensuite comment utiliser une application Web
Azure pour visualiser les données en temps réel d'un appareil IoT.
300
Qu’est-ce que l’Internet des objets ? 301
rapportent généralement les informations qu'ils collectent via leurs capteurs ou entrées.
Ces informations peuvent ensuite être traitées par un système central, intégrant
potentiellement de l’IA ou du ML comme évoqué au chapitre 17, pour l'exécution
d'actions appropriées. La figure 20.1 décrit le schéma de principe général de l'IoT.
Appareil IoT
Système Applications
central Les données collectées sur les
et services
Appareil IoT appareils IoT sont traitées et
des instructions peuvent être
renvoyées aux appareils ou à
d’autres systèmes.
Figure 20.1 Des messages sont échangés entre le parc des appareils IoT connectés et un système central.
Vos applications et services peuvent dès lors traiter les données reçues et envoyer des instructions aux
appareils pour l'exécution d'actions supplémentaires compte tenu des données collectées.
appareils IoT pour les rendre accessibles sur des appareils mobiles ou générer des alertes
et des notifications. Les données reçues des appareils IoT peuvent être consignées dans
un système de base de données tel qu'Azure Cosmos DB pour traitement ultérieur par
des applications de Business Intelligence et pour la génération de rapports.
Au nombre des applications futures envisagées de l'IoT, on peut également citer des
choses telles que des réfrigérateurs capables de détecter les quantités restantes de vos
aliments et de générer une liste de courses en conséquence, voire de passer commande
auprès de votre épicerie locale. Votre voiture pourra sans doute à l'avenir transmettre à
votre concessionnaire toutes les données utiles pour que l'ensemble des
pièces et consommables voulus pour sa révision soient fin prêts à son arrivée au garage.
Et que diriez-vous d'une sonnerie de réveil qui commanderait à votre cafetière de vous
préparer votre café du petit-déjeuner ?
La sécurité des appareils est un grand sujet de préoccupation avec l'IoT. Avec autant
d'appareils en dehors de votre infrastructure réseau principale et souvent connectés à
l'Internet public, le provisionnement, la maintenance et la mise à jour de ces appareils
représentent un véritable défi. De nombreux appareils IoT sont des dispositifs
électroniques simples, basse consommation, qui peuvent ne pas disposer des capacités
de stockage ou de traitement nécessaires pour s'appliquer eux-mêmes les mises à jour
de sécurité et d'application requises de la même manière qu'un ordinateur de bureau
ou portable classique. Il est hasardeux de déployer un parc d'appareils IoT, en
particulier des appareils grand public, sans un plan pour les sécuriser de manière
appropriée et assurer leur mise à jour et leur maintenance.
Ces questions de sécurité ne doivent pas vous dissuader de créer des applications et
des services utilisant ces appareils IoT. L'IoT pose des problématiques d'un nouveau
genre à la maintenance traditionnelle, mais il existe des solutions qui vous permettent
de provisionner et de maintenir vos appareils IoT de manière centralisée et de sécuriser
les communications avec eux.
À ce stade, je suppose que vous avez deviné qu'Azure dispose d'une telle solution IoT !
Il offre une suite de services IoT. Voyons comment vous pouvez explorer l’IoT avec Azure.
Figure 20.2 Avec un hub IoT, vous pouvez provisionner et gérer de manière centralisée tout un parc
d'appareils IoT à l'échelle. Une communication bidirectionnelle s'installe entre les appareils et Azure
pour la lecture et l'écriture des données. Vous pouvez traiter les données reçues des appareils et les
router vers d'autres services Azure, tels que Azure Web Apps et Azure Storage. Pour la surveillance et
le dépannage, vous pouvez router les informations vers Azure Event Grid, que nous examinerons dans le
chapitre 21, puis relier d'autres solutions de surveillance.
Vous contrôlez l'accès à un hub IoT au moyen de stratégies d'accès partagé. Ces
stratégies s'appuient sur des comptes utilisateur et des autorisations. Des stratégies par
défaut sont proposées qui permettent aux appareils et services de se connecter au
hub IoT, ou de lire et d'écrire des informations dans le registre des appareils qui assure
le suivi des appareils IoT connectés et des clés de sécurité. Chaque stratégie peut se
voir attribuer une ou plusieurs des autorisations suivantes :
¡ Lecture du registre
¡ Écriture du registre
¡ Connexion de service
¡ Connexion d'appareil
304 Chapitre 20 Azure et l'Internet des objets
Des clés d'accès partagées sont utilisées par les applications et les services pour se
connecter au hub IoT. Comme pour le stockage, (sujet traité au chapitre 4), les clés
d'accès partagé vous permettent de définir des chaînes de connexion pour identifier
l'hôte, la stratégie d'accès et la clé d'accès. Une chaîne de connexion combine la clé
d'accès, le type de stratégie d'accès et le nom d'hôte du hub IoT. Voici un exemple de
chaîne de connexion à un hub IoT :
HostName=azuremol.azure-devices.net;SharedAccessKeyName=registryRead;
➥SharedAccessKey=6be2mXBVN9B+UkoPUMuwVDtR+7NZVBq+C7A1xCmQGAb=
Il existe des clés primaires et secondaires, qui peuvent être régulièrement changées et
mises à jour à des fins de sécurité, à l'image du schéma classique appliqué aux mots de
passe. Des solutions telles qu'Azure Key Vault (présenté au chapitre 15), offrent un
moyen efficace de suivre et de stocker ces clés pour que les applications puissent se les
procurer lorsqu'elles en ont besoin. Cette approche de la gestion des clés signifie que
vous pouvez changer fréquemment les clés d'accès sans avoir à mettre à jour tout votre
code d'application.
Des certificats numériques peuvent être stockés sur le hub IoT et automatiquement
fournis aux appareils IoT. N'oubliez pas que vos appareils IoT se trouvent souvent en
dehors de votre infrastructure principale et peuvent se connecter directement sur
Internet sans aucune forme de connexion réseau sécurisée, telle qu'un VPN. Veillez à
ce que toutes les données transitant entre vos appareils et le hub IoT soient chiffrées à
l'aide de connexions SSL/TLS. Azure Key Vault peut générer et stocker des certificats
SSL qui sont ensuite ajoutés au hub IoT. Ou vous pouvez aussi utiliser une autorité de
certification existante pour demander et émettre des certificats. L'important est de
faire en sorte que toutes les communications entre vos appareils IoT et Azure soient
chiffrées. Vous recevrez probablement une erreur si ce n'est pas le cas.
Les routages du hub IoT vous permettent d'envoyer des données transmises par vos
appareils IoT vers d'autres services Azure. Vous pouvez définir des critères, tels que la
présence dans le message d'un certain mot-clé ou d'une certaine valeur, puis router de
manière appropriée les messages à stocker sur Azure Storage ou à traiter par une
application Web. Dans l'un des exercices ci-après, vous simulerez un capteur de
température de base connecté à un appareil IoT. Vous pourriez définir un routage sur
le hub IoT pour surveiller les données entrantes et, en cas d'enregistrement d'une
température supérieure à 30°C, router les données vers une
application logique pour l'envoi d'une alerte par e-mail. Nous discuterons du monde
merveilleux de l'informatique serverless et des applications logiques au prochain 21.
Traitement à la périphérie
Dans ce chapitre, il est essentiellement question d'Azure IoT Hub. Un autre service,
Azure IoT Edge, vous permet d'exécuter certains services tels qu'Azure Functions et
Stream Analytics dans votre environnement local. Plutôt que de streamer les données de
l'ensemble de vos appareils IoT pour les traiter de manière centralisée dans Azure, vous
pouvez aussi traiter les données sur place.
Azure IoT Edge exécute des applications et des services dans des conteneurs (abordés
au chapitre 19). L’utilisation de conteneurs permet à l’IoT Edge de fonctionner de façon
portable et cohérente sur différents appareils et environnements. Vous pouvez déployer
des services Azure prédéfinis ou écrire vos propres applications et les distribuer sur les
sites périphériques.
Gestion centralisée des appareils avec Azure IoT Hub 305
Tester
Pour vous lancer et créer un hub IoT, procédez comme indiqué ci-après :
1 Ouvrez le portail Azure, lancez Cloud Shell et créez un groupe de ressources, par
exemple azuremolchapter20 :
az group create --name azuremolchapter20 --location eastus
2 Vous avez beaucoup utilisé la CLI Azure dans ce livre pour la simple raison que
les commandes Cloud Shell et CLI accélèrent la création et la gestion des
ressources. Comme indiqué précédemment, la CLI Azure peut également
utiliser des modules complémentaires, appelés extensions. Ces extensions
apportent des fonctionnalités supplémentaires et se mettent souvent à jour
en dehors du cycle de publication ordinaire de la CLI Azure principale.
Azure IoT se développant rapidement et proposant régulièrement de nouvelles
fonctionnalités, les commandes principales pour interagir avec IoT Hub
proviennent d'une extension de la CLI Azure.
Pour obtenir toutes les fonctionnalités dont vous avez besoin pour ces
exercices, installez l'extension Azure CLI IoT :
az extension add --name azure-cli-iot-ext
3 Sélectionnez Créer, puis fournissez un nom, par exemple azuremol. Pour ces
exercices, vous pouvez utiliser un hub IoT de niveau Gratuit, f1 :
az iot hub create \
--resource-group azuremolchapter20 \
--name azuremol \
--sku f1 \
--partition-count 2
Tester
Pour créer un appareil IoT Raspberry Pi simulé, procédez comme indiqué ci-après :
1 Dans Azure Cloud Shell, créez une identité d’appareil dans votre Hub IoT, par
exemple azuremol, et indiquez un nom pour l’appareil, par exemple
raspberrypi :
az iot hub device-identity create \
--hub-name azuremol \
--device-id raspberrypi
2 Vous vous souvenez des stratégies d'accès partagé de la section 20.2 ? Chaque
appareil IoT possède également ses propres clé d'accès et chaîne de connexion
qui sont utilisées pour l'identifier lorsqu'il communique avec le hub IoT. Cette
fonctionnalité clé d’Azure IoT sécurise les appareils et minimise le risque
d’exposition en cas de compromis.
Pour utiliser votre appareil avec le simulateur Raspberry Pi, vous avez besoin
de la chaîne de connexion de l'appareil. Cet identificateur unique se compose du
nom d'hôte de votre hub IoT, de l'ID de l'appareil et d'une clé d'accès :
az iot hub device-identity show-connection-string \
--hub-name azuremol \
--device-id raspberrypi \
--output tsv
Figure 20.3 Copiez et collez la chaîne de connexion de votre appareil Azure IoT dans le simulateur
Raspberry Pi. La variable connectionString est utilisée pour la connexion pour permettre la
transmission des données du capteur simulé à Azure.
La sortie est similaire à la suivante, laquelle montre que 5 messages sur un total de
8 000 messages par jour autorisés ont été reçus et qu’un périphérique sur un total
de 500 périphériques autorisés est connecté. La génération de ces métriques peut
prendre quelques minutes ; par conséquent, ne vous inquiétez pas si vous ne
voyez aucune donnée tout de suite :
[
{
"currentValue": 5,
Streaming de données Azure IoT Hub vers des applications Web Azure 309
"maxValue": 8000,
"name": "TotalMessages"
},
{
"currentValue": 1,
"maxValue": 500,
"name": "TotalDeviceCount"
}
]
Rififi au paradis
Si vous ne recevez aucun message dans votre hub IoT, vérifiez la fenêtre de sortie de
votre appareil Raspberry Pi simulé. L'une des premières choses que fait l'application est
de se connecter à Azure IoT Hub. Une erreur de connexion s'affiche si votre chaîne de
connexion est incorrecte. Vérifiez que vous avez correctement copié et collé l'ensemble
de la chaîne de connexion. La chaîne de connexion commence par HostName, et le
dernier caractère de toute clé d'accès est toujours un signe égal (=).
Si la fenêtre de sortie signale une erreur, copiez le texte de l'erreur dans votre
moteur de recherche favori et recherchez un résultat correspondant. Vérifiez que vous n'avez
modifié aucune des autres lignes de code, ce qui causerait un problème ! La seule chose que
vous devez modifier dans la fenêtre du code est la ligne de votre chaîne de connexion.
Étant donné que l'appareil Raspberry Pi simulé s'exécute dans un navigateur Web, il est
possible que vous rencontriez un problème de site Web générique. Essayez d'actualiser
la page ou d'accéder au simulateur dans un autre navigateur (https://azure-samples.
github.io/raspberry-pi-web-simulator).
Appareil IoT
Azure IoT Point de
Hub terminaison
Messages envoyés à un
Appareil IoT
point de terminaison
défini.
Figure 20.4 Un hub IoT reçoit des messages d'appareils IoT connectés et les envoie à un point de
terminaison. Ces points de terminaison peuvent être utilisés par d'autres services Azure afin d'utiliser
des données d'appareils IoT. Il existe un point de terminaison par défaut pour les événements, à partir
duquel des services, tels que des applications Web, peuvent accéder en lecture.
Vous pouvez créer des points de terminaison personnalisés qui routent directement les
messages vers des services Azure, tels que Azure Storage et Azure Service Bus. Au le
chapitre 4, nous avons étudié les files d'attente Azure Storage afin de transférer des
messages entre des applications. Azure Service Bus est une plateforme de messagerie
d'entreprise évolutive et plus performante. Les messages peuvent être ajoutés au
service bus, tels que des données reçues d'appareils IoT, et d'autres applications
peuvent ensuite se mettre à l’écoute de ces messages et agir en conséquence.
Si vous ne souhaitez pas faire face à la complexité de la lecture de messages depuis
une file d'attente de messages (telle qu'un service bus), vous pouvez utiliser des groupes
de consommateurs avec les points de terminaison des événements par défaut. Un
groupe de consommateurs permet aux services comme Azure Web Apps de lire des
données depuis le point de terminaison, comme illustré à la figure 20.5. Chaque service
qui lit depuis Azure IoT Hub devrait avoir son propre groupe de consommateurs.
Plusieurs services, chacun avec son propre groupe de consommateurs, peuvent recevoir
les mêmes messages et les traiter selon les besoins.
Figure 20.5 Les messages sont envoyés par des appareils IoT au hub IoT, qui dirige ensuite les messages vers un
point de terminaison. Des groupes de consommateurs peuvent être créés dans chaque point de terminaison. Ces
groupes de consommateurs permettent à d'autres services Azure d'accéder aux messages des appareils, auxquels
ils n'auraient autrement pas accès. Avec les groupes de consommateurs, vous n'avez pas besoin d'utiliser les files
d'attente de messages pour autoriser des applications externes à lire des données d'appareils IoT.
Créons une application Web Azure qui utilise un groupe de consommateurs pour lire
les données de message en temps réel à partir de votre appareil Raspberry Pi simulé.
Cet exemple basique illustre comment diffuser des données à partir d'appareils IoT et
y accéder depuis des applications Web.
Streaming de données Azure IoT Hub vers des applications Web Azure 311
Tester
Pour créer une application Web Azure qui lit des données d'appareils IoT, procédez
comme suit :
1 Créez un plan Azure App Service pour votre application Web dans Azure Cloud
Shell et indiquez un nom, par exemple azuremol. Pour ces exercices, le niveau
gratuit (f1) est suffisant et n'est pas trop coûteux :
az appservice plan create \
--resource-group azuremolchapter20 \
--name azuremol \
--sku f1
2 Créez votre application Web. Spécifiez un nom, ici molwebapp, et activez-le pour
l'utiliser avec Git afin de déployer l'exemple d'application. Comme avec d’autres
ressources Azure accessibles au public, vous devez fournir un nom unique au monde.
az webapp create \
--resource-group azuremolchapter20 \
--plan azuremol \
--name molwebapp \
--deployment-local-git
3 Définissez le groupe de consommateurs pour votre hub IoT, ainsi que certains
paramètres d'application Web. Ces paramètres permettent à votre application
Web de se connecter à votre hub IoT. La figure 20.6 illustre ce que vous allez
réaliser lors des prochaines étapes.
Groupe de
clients Navigateur web
Les messages reçus par le point de terminaison Azure IoT Hub sont
lus par une application Web. Une connexion WebSocket est utilisée
pour pousser automatiquement les mises à jour vers les navigateurs
Web connectés.
Figure 20.6 Pour permettre à votre application Web de lire les données de votre appareil Raspberry Pi simulé,
vous devez créer un groupe de consommateurs dans le hub IoT. Vous définissez ensuite deux paramètres
d'application pour votre application Web, qui vont vous permettre de vous connecter au groupe de consommateurs.
Pour que votre navigateur Web puisse recevoir automatiquement le flux de données du Raspberry Pi au fur et à
mesure que de nouvelles données sont reçues, vous devez également activer un paramètre pour WebSockets.
312 Chapitre 20 Azure et l'Internet des objets
6 Pour vous connecter à votre hub IoT, votre application Web doit connaître la
chaîne de connexion pour le hub. Cette chaîne de connexion est différente de
celle que vous avez copiée à l'exercice précédent pour votre appareil Raspberry Pi
simulé. Rappelez-vous qu’il existe une chaîne de connexion pour votre Hub IoT,
qui utilise des stratégies d’accès partagé pour définir les autorisations d'accès.
Chaque appareiI IoT dispose d'une chaîne de connexion . Votre application
Web doit lire à partir du point de terminaison du
groupe de consommateurs du point de terminaison du hub IoT. Vous devez
donc définir une chaîne de connexion pour le hub IoT lui-même.
7 Obtenez la chaîne de connexion du hub IoT et assignez-la à une variable
nommée iotconnectionstring, qui est utilisée à l'étape 8 :
iotconnectionstring=$(az iot hub show-connection-string \
--hub-name azuremol \
--output tsv)
8 Créez un autre paramètre d'application Web App, mais cette fois pour la chaîne
de connexion du hub IoT. La variable définie à l'étape 7 permet à l'exemple
d'application de se connecter et de lire des données de l'appareil IoT :
az webapp config appsettings set \
--resource-group azuremolchapter20 \
--name molwebapp \
--settings iot=$iotconnectionstring
Faisons une pause et discutons de ce que vous avez réalisé jusqu'à présent. Vous
avez travaillé avec des applications Web dans la plupart des chapitres précédents,
mais les paramètres d'application Web App et WebSockets sont des concepts
nouveaux. La figure 20.7 récapitule la connexion entre votre application Web et
le hub IoT.
Groupe de
clients Navigateur web
Les messages reçus par le point de terminaison Azure IoT Hub sont
lus par une application Web. Une connexion WebSocket est utilisée
pour pousser automatiquement les mises à jour vers les navigateurs
Web connectés.
Figure 20.7 Lorsque des messages sont envoyés depuis des appareils IoT, ils passent par le hub IoT jusqu'à
atteindre un point de terminaison. Votre code d'application lit dans les paramètres des applications Web qui
définissent quelle chaîne de connexion du hub IoT et du groupe de consommateur utiliser. Une fois l'application
connectée au hub IoT, le groupe de consommateurs permet aux applications Web de lire les messages de l'appareil
IoT. Chaque fois qu'un nouveau message est reçu d'un appareil IoT, votre application Web utilise une connexion
WebSocket avec des navigateurs Web qui accèdent à votre site pour pousser automatiquement les mises à jour.
Cette connexion vous permet de visualiser en temps réel les données streamées depuis des appareils IoT (telles
que des informations relatives à la température et au taux d'humidité), et cela à partir de votre appareil
Raspberry Pi simulé.
Dans les chapitres précédents, vous avez du rechercher cette adresse. Mais
j'espère qu'à présent, vous avez commencé à découvrir les fonctionnalités de la
CLI d'Azure et à réaliser que la plupart de ces informations peuvent être obtenues
rapidement.
14 Poussez l'exemple de site HTML vers votre application Web à l'aide de la
commande suivante :
git push molwebapp master
15 Lorsque vous y êtes invité, saisissez le mot de passe de l'utilisateur Git que vous
avez créé et utilisé dans les chapitres précédents (le compte créé au chapitre 3).
Si vous avez oublié de noter votre mot de passe Git sur un Post-It
Si vous avez oublié le mot de passe, vous pouvez le réinitialiser. Tout d'abord, obtenez le
nom d'utilisateur de votre compte de déploiement Git local :
az webapp deployment user show --query publishingUserName
16 Affichez le nom d'hôte de votre application Web, puis accédez à l'adresse dans
un navigateur Web :
az webapp show \
--resource-group azuremolchapter20 \
--name molwebapp \
--query defaultHostName \
--output tsv
Figure 20.8 L'exemple d'application utilise une connexion WebSocket entre votre navigateur et votre
application Web, afin d'effectuer une mise à jour automatique toutes les deux secondes, en affichant les
données les plus récentes de votre appareil Raspberry Pi simulé.
Vous souvenez-vous que j'ai déclaré que « Vous deviez toujours supprimer vos
groupes de ressources » ?
Il vous a été conseillé, tout au long de cet ouvrage, de supprimer vos groupes de
ressources à chaque fin de chapitre. Cela permet de s'assurer que vous ne continuiez
pas d'utiliser des applications et des services payants lorsque vous n'en avez pas besoin.
316 Chapitre 20 Azure et l'Internet des objets
(suite)
Azure IoT vous offre une plateforme efficace pour streamer des données vers Azure.
Vous avez généralement besoin de traiter ces données, et non pas seulement de les
afficher dans une application Web, comme vous avez pu le faire dans les exercices. Le
chapitre 21 aborde le sujet de l'informatique sans serveur avec les services Functions et
Logic Apps.
Pour montrer comment ces services Azure fonctionnent parfaitement ensemble, ne
supprimez pas le groupe de ressources et les services que vous avez déployés dans ce
chapitre. Vous commencerez à les prendre en main dès le début du chapitre 21, afin de voir
comment vous pouvez prendre des mesures selon les données reçues de vos appareils IoT.
Assurez-vous seulement de revenir sur votre appareil Raspberry Pi simulé et de cliquer sur le
bouton Stop, faute de quoi votre limite de 8 000 messages sera rapidement atteinte !
1 Dans quels domaines pensez-vous que les appareils IoT pourraient profiter
à votre entreprise ? Si vous ne travaillez pas au sein d'une entreprise pour
l'instant, pensez donc à la pizzeria mentionnée à maintes reprises dans cet ouvrage.
2 Que pourriez-vous faire pour améliorer l'expérience client grâce à l'IoT ?
3 Utiliseriez-vous Azure IoT Edge ? Quelles sont les raisons qui motivent votre
réponse ?
4 Quels autres services Azure seriez-vous susceptible d'intégrer pour exécuter vos
applications ?
5 S'il vous reste un peu de temps durant votre pause déjeuner, testez donc l'un des
accélérateurs de solution Azure IoT disponibles sur www.azureiotsolutions.com/
Accelerators. Vous trouverez un scénario de Simulation d'appareil, qui crée une
machine virtuelle et des capteurs simulés. Celui-ci est similaire à l'appareil
Raspberry Pi simulé, mais en bien plus important ! La configuration
des ressources nécessaires prend quelques minutes, mais vous pouvez ensuite
naviguer sur le portail Azure afin de découvrir ce qui a été créé et comment
fonctionne l'ensemble.
6 Arrivez-vous à comprendre comment sont utilisés les services mentionnés dans
les chapitres précédents, tels que Azure Storage et Cosmos DB ?
7 Quels sont les autres accélérateurs de solutions IoT disponibles ? Certains
conviennent-ils à des idées que vous pourriez avoir pour vos propres applications ?
21
Informatique Serverless
317
318 Chapitre 21 Informatique Serverless
Message d’entrée
¡ Applications de fonction d'Azure : pour exécuter de petits blocs de code, les applications
de fonction vous permettent d’utiliser des langages de programmation courants
tels que C#, node.js et Python, sans gestion d’infrastructure supplémentaire. Votre
code s’exécute dans un environnement sécurisé et isolé, et vous êtes facturé sur la
base de la consommation de mémoire par seconde. La figure 21.3 décrit le
processus de base d’une application de fonction.
Avec les applications sans serveur, vous avez souvent besoin d’un moyen d’échanger
des messages et de transmettre des données d’application à jour, pas seulement les
diagnostics de panne ou les mises à jour de statut. C’est à cet égard que vous avez besoin
d’une plateforme de messagerie.
Figure 21.4 Les services Azure comme Azure IoT et Azure Storage peuvent envoyer des notifications
à Azure Event Grid. Ces notifications peuvent se produire lorsqu’un message est reçu d’un appareil IoT
ou qu’un fichier est téléchargé dans le stockage. Azure Event Grid permet à d’autres services et
fournisseurs de s’abonner à ces notifications pour effectuer des actions supplémentaires en réponse
à des événements.
Examinons quelques scénarios que vous pourrez peut-être utiliser dans votre pizzéria :
¡ Message reçu dans un hub IoT : un appareil IoT raccordé au hub IoT peut
signaler une mesure de température dans un four ou la position d’un véhicule de
livraison. Le hub IoT est configuré pour transférer une notification à
Azure Event Grid.
Une fonction Azure est abonnée aux notifications d’Event Grid pour le
hub IoT et exécute un petit composant d’application sans serveur pour
enregistrer les informations dans Azure Cosmos DB et envoyer une notification
par e-mail. Vous pouvez également utiliser des applications logiques au lieu des
applications de fonction d’Azure, selon le niveau de complexité attendue de la
réponse de l’application.
¡ Fichier téléchargé vers le stockage Azure : le service marketing peut télécharger dans le
stockage un coupon promotionnel pour économiser de l’argent sur une
commande de pizza. Lorsqu’un nouveau fichier est créé, une notification est
envoyée à Event Grid.
Un webhook est abonné à Event Grid et publie une copie de l’image depuis le
stockage vers Twitter. Ce tweet informe le client sur l’affaire de la semaine ou le
coupon de remise.
Plateformes de messagerie Azure 321
Ces scénarios valent pour des scénarios informatiques serverless vraiment non-
interventionnistes, mais Event Grid peut également s’intégrer à des ressources plus
traditionnelles telles que les machines virtuelles et les applications Web. Par exemple,
un groupe de ressources peut être configuré pour envoyer des notifications à
Event Grid. Il existe de nombreuses façons de créer une machine virtuelle, comme sur
le portail, avec la CLI Azure, ou avec un modèle Ressource Manager, de sorte que vous
devez vous assurer que la machine virtuelle est correctement configurée pour la gestion
des mises à jour via le Security Center. Une procédure opérationnelle Azure Automation
peut être abonnée à Event Grid pour les notifications concernant les opérations de
création de machines virtuelles, puis embarquer la machine virtuelle dans le service de
gestion des mises à jour et installer les mises à jour de sécurité ou d’application requises.
Figure 21.5 Les appareils IoT se connectent au hub IoT et peuvent diffuser toutes leurs données issues de
capteurs. Il pourrait y avoir des centaines ou des milliers de d’appareils l’IoT connectés. Azure Event Hub gère tous
ces flux de données distincts et permet aux services tels qu’Azure HDInsight de traiter les données brutes dans
des clusters Hadoop ou Spark pour faire des analyses et générer des rapports.
322 Chapitre 21 Informatique Serverless
Msg Msg
Azure Service Bus
Figure 21.6 Les messages sont placés dans une file d’attente de service bus par des composants
d’application, en l'occurrence une application front-end dans cet exemple. D’autres applications
middleware ou back-end peuvent récupérer ces messages et les traiter au besoin. Ici, une application
back-end récupère le message et le traite. Les fonctions de messagerie avancées incluent la garantie de
l’ordre des messages dans la file d’attente, le verrouillage des messages, les temporisations et les relais.
Avec trois services qui vous permettent de transmettre, recevoir et traiter les données
entre les applications et les services dans Azure, lequel devez-vous utiliser et quand ? Le
tableau 21.1 fournit un bref récapitulatif des services proposés par Event Grid,
Event Hubs et Service Bus.
Tableau 21.1 Chaque service est conçu pour recouvrir un scénario différent. Event Grid vous permet
de réagir aux événements, Event Hubs vous permet de diffuser de grandes quantités de données et
Service Bus vous permet de transmettre des messages entre les services et les composants d’application.
Event Hubs Flux de données Recevoir et transmere de gros volumes de données simultanées.
Service Bus Transmission de messages Assurer une communicaon entre les services et les applicaons.
21.2.3 Création d’un service bus et intégration de ce service bus à un hub d’IoT
Dans ce scénario, vous utilisez un service bus pour transmettre des messages reçus d’un
hub IoT. Votre appareil simulé Raspberry Pi du chapitre 20 génère des mesures de
température et les transmet au hub IoT. Si la température est supérieure à 30 °C, une
Plateformes de messagerie Azure 323
autre donnée est incluse dans le message émis par l’appareil IoT : temperature-Alert
= true. La figure 21.7 décrit comment vous pouvez intégrer un hub IoT à un service
bus pour traiter les messages contenant cette alerte de température.
Msg Msg
Azure Service Bus
Figure 21.7 Lorsque votre appareil IoT Raspberry Pi simulé envoie des données de message, une
mesure de température supérieure ou égale à 30 °C génère une alerte. Les messages marqués avec
cette alerte sont placés sur un service bus. Ces messages peuvent ensuite être utilisés pour déclencher
des applications logiques.
Tester
Pour créer un service bus, procédez comme suit :
critères selon lesquels les messages doivent être dirigés vers un point de terminaison
est alors défini. Dans l'exemple, cet itinéraire impose que tout message contenant
temperatureAlert = true dans le corps du message soit acheminé vers le point de
terminaison du service bus, comme illustré à la figure 21.8.
Figure 21.8 Au fur et à mesure que les messages sont transmis des appareils IoT à un hub IoT, ils
peuvent être acheminés vers des points de terminaison spécifiques en fonction des critères que vous
définissez. Les messages qui contiennent une alerte de température dans le corps du message peuvent
être acheminés vers un point de terminaison qui utilise la file d’attente de service bus. Les messages
placés dans la file d’attente de service bus et contenant une alerte de température peuvent ensuite être
utilisés pour déclencher, entre autres, des applications logiques ou des applications de fonction d’Azure.
Tester
Pour configurer un hub IoT afin d’acheminer les messages d’alerte de température vers
le service bus, procédez comme suit :
Vous disposez maintenant d’un appareil simulé Raspberry Pi qui envoie des données
au hub IoT et d’un itinéraire pour placer des messages contenant une alerte de
température dans une file d’attente de messages de service bus. Vous n’avez pas encore
vraiment d’application : vous ne pouvez rien faire avec les données de la file d’attente
de service bus. Que voulez-vous faire d’une alerte de température ? L’envoi d’une
notification par e-mail est un exemple courant, nous allons donc voir comment vous
pouvez déclencher une application logique chaque fois qu’un message est placé dans
la file d’attente Service Bus.
Figure 21.9 Chaque message reçu dans la file d’attente des services bus du Hub IoT déclenche
l’application logique. Lorsque l’application logique s’exécute, elle envoie une notification par e-mail par
l’intermédiaire d’un fournisseur de messagerie défini.
Tester
Pour créer une application logique, procédez comme suit :
1 Sur le portail Azure, sélectionnez Créer une ressource, en haut à gauche du menu.
2 Recherchez et sélectionnez Logic App, puis choisissez Créer.
3 Fournissez un nom, par exemple azuremol et sélectionnez votre groupe de
ressources, par exemple azuremolchapter21. Encore une fois, choisissez
l'emplacement utilisé par vos autres ressources au chapitre 20.
4 Acceptez les autres valeurs par défaut et choisissez Créer.
5 Une fois la ressource créée, sélectionnez votre groupe de ressources, puis
ouvrez l’application logique. Sélectionnez « Quand un message est reçu dans la
file d’attente Service Bus » pour l'option « Ajouter des déclencheurs courants ».
326 Chapitre 21 Informatique Serverless
3. Le message de la file
d’attente de service bus
1. Envoi du message déclenche l’exécution de
Hub IoT
de l’appareil IoT l’application logique.
Application
Itinéraire Service bus logique
Raspberry
pi simulé Connecteur
Msg
de messagerie
Msg électronique
Point de
temperatureAlert = true
terminaison
4. L’application logique
envoie une notification
Adresse de
2. Le Hub IoT achemine le par e-mail concernant messagerie
message vers un point de l’alerte de température.
terminaison du service bus.
Figure 21.11 Le Raspberry Pi simulé envoie, toutes les deux secondes, un message au hub IoT, qui
contient les mesures de température effectuées par la sonde. Si la température est supérieure à 30 °C,
une alerte de température est constatée. Le hub IoT achemine tous les messages contenant une alerte
de température vers une file d’attente de service bus. Les messages dans cette file d’attente
déclenchent l’exécution d’une application logique Azure. L’application logique est connectée à un
fournisseur de messagerie, comme Outlook ou Gmail, et envoie une notification par e-mail concernant
l’avertissement de température émis par l’appareil IoT.
Tester
Pour exécuter votre Raspberry Pi simulé et tester votre application logique, procédez
comme suit :
Figure 21.12 L’application logique déclenche l’application de fonction. Le message reçu dans la file
d’attente de service bus est transmis dans la fonction. Le code dans l’application de fonction analyse
le message, extrait la température et retourne cette valeur à l’application logique. Il faut quelques
millisecondes à l’application de fonction pour exécuter ce code, ainsi le coût pour exécuter ces
tâches de calcul est de l’ordre de quelques fractions de centimes.
Création d’une application de fonction Azure pour analyser les données de l’appareil IoT 329
Tester
Pour créer une application de fonction et la déclencher à partir de l’application logique,
procédez comme suit :
1 Sur le portail Azure, sélectionnez Créer une ressource, en haut à gauche du menu.
2 Recherchez et sélectionnez Function App, puis choisissez Créer.
3 Sélectionnez votre groupe de ressources, par exemple azuremolchapter21 et
fournissez un nom, comme azuremol. Vous devez sélectionner la même région
que celle de vos ressources précédentes.
Vous devez publier du code, mais notez que vous pouvez également publier
une image de conteneur Docker (chapitre 19). Vous n’avez même pas besoin de
créer une instance de conteneur, ni d'infrastructure supplémentaire ; un
conteneur éphémère s’exécuterait selon les besoins, avant de s'arrêter.
4 Pour cette application de base, choisissez un runtime Node.js, étant donné que
nous utilisons simplement JavaScript.
5 Vous disposez de trois options de plan d’hébergement. Un Modèle de consommation
vous permet de payer en fonction de l'exécution et les ressources dont vous avez
besoin sont affectées dynamiquement au moment de l’exécution. Pour des
applications plus cohérentes et prêtes à la production, vous pouvez utiliser un
plan Premium ou un plan d'hébergement dédié qui propose un coût fixe et plus
prévisible. Les plans Premium fournissent des fonctions supplémentaires, telles
que la sécurisation de la connectivité sur un ensemble défini de réseaux virtuels
Azure et une instance toujours prête pour prévenir certains retards dans un
scénario de démarrage à froid de votre application. Pour cet exercice, choisissez
un plan de consommation.
6 Acceptez les autres valeurs par défaut pour créer un compte de stockage nommé
et Application Insights, puis choisissez Examiner + créer.
7 Lorsque vous êtes prêt, créez l’application de fonction. La création de
l’application de fonction nécessite quelques minutes.
8 Une fois la ressource créée, sélectionnez votre groupe de ressources, puis ouvrez
votre application logique créée lors de l'exercice précédent, puis sélectionnez
Modifier.
9 Dans le Concepteur d'applications logiques, choisissez d’ajouter une
nouvelle étape.
10 Recherchez et sélectionnez Azure Functions, puis choisissez la fonction créée au
cours des étapes précédentes, par exemple azuremol, et sélectionnez Créer une
nouvelle fonction.
11 Fournissez un nom de fonction, par exemple analyzeTemperature.
12 Supprimez tout code existant, remplacez-le par le code des extraits suivants,
puis sélectionnez Créer.
Ce code est également disponible dans le référentiel GitHub à l’adresse w.
330 Chapitre 21 Informatique Serverless
Figure 21.14 Lorsque des messages sont reçus du Raspberry Pi simulé, tous les messages contenant une alerte de
température sont acheminés vers le point de terminaison de la file d’attente de service bus. Les messages de la file
d’attente de service bus déclenchent une application logique qui transmet le message à une application de fonction.
Une fonction JavaScript analyse la mesure de la température et la renvoie à l’application logique, qui envoie ensuite
une notification par e-mail comportant la température enregistrée par un capteur sur l’appareil de l’IoT.
335
336 index
Déployer dans Azure, bouton 98 définition de la distribution du trafic avec des règles
détection du point de terminaison 153 112–114
diagnostics de démarrage 175–177 en action 120–122
disque dur virtuel (VHD) 53 équilibreurs de charge 94
ajout à des machines virtuelles 50–52 erreurs d’authentification 332
disques de données 49–50 espaces de travail Log Analytics 243
options de mise en cache 50 état de refus 238
temporaire 49–50 ETW (suivi d'événements Windows) 180
disques exemple Google Maps 256
disques de données 49–50 ExpressRoute 19, 183
disques durs standard 18 extension de script personnalisé 179
disques gérés 18 extensions 305
disques SSD(solid-state drive) premium 18–19
disques temporaires 49–50
distant 41 f
Docker 284, 287
Docker Swarm 293 fenêtre Vue d’ensemble d’Update Management 243
Dockerfile 291–292 fenêtre Vue d’ensemble de Security Center 236
erreur 96–97 fichier Managed Object Format (MOF) 280
mettre à jour 97–98 fichiers journaux. Voir journaux de diagnostic
réel, délégation à Azure DNS 160–162 filtrage 67–68
domaines flux des fichiers journaux 43
domaines de défaillance 96–97 flux IP, vérification 183–184
domaines de mise à jour 96 fonction concat, Resource Manager 85
DomainKeys Identified Mail (DKIM) 160 fonction copy, Resource Manager 84
DomainKeys Identified Mail (DKIM) 160 forum, pour cet ouvrage 5
données au repos 208 FPIS (Federal Information Processing Standard) 218
données distribuées mondialement 152–156 FPIS (Federal Information Processing Standard) 218
données non structurées 144 FQDN (nom de domaine qualifié complet) 63
données structurées 144 Function Apps 328–331
DR (récupération d'urgence) 201
DSVM (machines virtuelles de science de données) 258
durée de vie (TTL) 167
G
échange automatique 46 Gardner, Lyza Danger 315
échange avec aperçu 46 Gestionnaire de Configuration Local (LCM) 278
éditeur Visual Studio 85–86 déploiement d’exemples de site HTML avec 39–42
emplacement de production 46 formations 37
emplacements de déploiement 44–46 mot de passe pour, réinitialisation 314
emplacements des points de terminaison 153 Git 12
git push azure master, commande 156
git push dev master, commande 45
E Azure Automation et contrôle de code source avec 274
enableHttpsTrafficOnly, paramètre 210 compte pour, création 7
enregistrements d’alias 160 exemples de démarrage rapide Azure sur 87
environnements App Service 36 présentation de 39
environnements isolés 36 référentiel, pour cet ouvrage 5
équilibreur de charge interne 108 ressources 333
équilibreur de charge Internet 108 GitHub
affectation de groupes de machines virtuelles à des GPU (processeur graphique) 267
pools back-end 116–119 distribution des VM sur 98–101
création de pools IP front-end 108–110 domaines de défaillance 96–97
définition de la distribution du trafic avec des règles domaines de mise à jour 97–98
d’équilibrage de charge 112–114 redondance des VM avec 96–102
routage du trafic direct à l’aide de règles de visualisation de la distribution des VM sur 101–102
traduction d’adresses réseau 114–116 groupes à haute disponibilité 91
sondes d’intégrité 110–112 création 131–133
composants des 106–119 création de règles de mise à l’échelle automatique
création et configuration de machines virtuelles avec 133–136
119–122 groupes de machines virtuelles identiques 129–136
groupes de ressources 315
index 339
H
J
HashiCorp 86
hôte Bastion 23–24 JavaScript sur les objets (Gardner) 315
hôte IPv4, enregistrement 160 jeton de signature d'accès partagé (SAS) 87
hôte IPv6, enregistrement 160 journaux de diagnostic 42–44
HPC (calcul haute performance) 267 JSON (JavaScript Object Notation) 82–83, 86
HSM (modules de sécurité matérielle) 212, 217–218 JWT (JSON Web Token) 226
HTTP 20, 168, 206 Voir aussi AKS
HTTPS 20, 168, 206 Kubernetes 293, 295–299
Hyper-V 15 Kubernetes in Action (Luksa) 298
Azure Cognitive Services 259–260 langage de programmation Perl 34
création 260 langage de programmation Python 28, 34
création avec LUIS 264–267 langage de requête structurée (SQL) 53, 142
exécution avec LUIS 264–267 langues prises en charge 34–35
bots d’application web LCM (Gestionnaire de Configuration Local) 278
LUIS 261–264 Learn Docker in a Month of Lunches (Stoneman) 297
machine learning et 254–259 Learn Git in a Month of Lunches (Umali) 37
présentation de 254–255 exécution de Web Apps sur 34
IA (intelligence artificielle) 253–268 utilisation de DSC avec 282–283
Linux
livraison continue (CD) 75
I Logiciel en tant que service (SaaS) 10
création de bots d’application web avec 264–267
IaaS (Infrastructure en tant que service) 9, 14, 33–34 exécution de bots d’application web avec 264–267
IaC (infrastructure en tant que code) 82 présentation de 257–264
identités gérées attribuées à l’utilisateur 222 LUIS (Language Understanding Intelligent Service)
identités gérées attribuées au système 222 Luksa, Marko 298
IIS (Internet Information Services) 29, 233
images, machine virtuelle 16–17
IMDS (Instance Metadata Service) 222 M
informations d’identification 270
création d’applications de fonction pour analyser les machine virtuelle B-series 18
données de l’appareil IoT 328–331 machines virtuelles de science de données
création d’applications logiques 325–328 (DSVM) 258
Azure Event Grid 320–321 machines virtuelles. Voir VM
Azure Event Hubs 321–322 Marketplace, Azure 7
Azure Service Bus 321–322 Maven 12
création de service bus 322–325 mémoire (vRAM) 11
intégration de Service Bus aux hubs IoT 322–325 Message Analyzer, Microsoft 186
présentation de 317–319 Message Text, propriété 56
plateformes de messagerie 319–325 messages d’erreur 31
plateformes de messagerie 319–325 mesures de performances 178–182, 188
ressources GitHub 333 méthode de routage pondéré, Traffic Manager 163
informatique sans serveur 317–333 méthode de routage prioritaire, Traffic Manager 163
infrastructure en tant que code (IaC) 82 Microsoft Message Analyzer 186
Infrastructure en tant que service (IaaS) 9, 14, 33 présentation de 136–139
injection de certificats 229-232 verticalement 127–128
install, commande 27 applications web
installation de serveurs web 24–27 bases de données 143–144
Instance de conteneur Azure. Voir ACI descente en puissance des machines virtuelles 127
Instance Metadata Service (IMDS) 222 horizontale des ressources 128–129
instances, création 290–292 mise à l’échelle à un niveau inférieur 127
intégration continue (CI) 75 redimensionnement des machines virtuelles
interface de ligne de commande (CLI) 12 126–127
340 index
observation du serveur web en action 28–29 VMSS à une seule machine virtuelle 130
permettant au trafic web d’atteindre 27–29 VMware 15
redimensionnement 126–127 VPN (réseaux privés virtuels) 19, 36, 38, 183
domaines de défaillance 96–97
domaines de mise à jour 97–98
redondance des machines virtuelles avec des groupes à W
haute disponibilité 96–102
webhooks 274
restauration au niveau du fichier 199
WebSockets 312
restauration complète de VM 199–201
Windows, exécution de Web Apps sur 34
restauration 198–201
création de ressources réseau sur 94–95
disques de données 49–50
création de VM dans 95
disques temporaires 49–50
redondance de l’infrastructure avec 95
options de mise en cache du disque 50
stockage standard contre stockage premium 48–49
stockage 47–50
suppression 30
Z
tailles de 17 zones de disponibilité 91
VM (machines virtuelles) ZRS (stockage redondant interzone) 56
VM protégées, suppression 205
By developers, Get technical articles, sample
code, and information on
● Keep up on the latest
technologies