Exercice : Analyser les limitations d’une application web basée sur l’interrogation
Avant de modifier le prototype, vous devez l’exécuter afin de valider les hypothèses. Le prototype se trouve dans un référentiel de code source sur GitHub.
Créer des ressources Azure
Dans une fenêtre ou un onglet de navigateur distinct, dupliquez l’exemple de référentiel sur GitHub à l’aide du lien suivant : mslearn-advocates.azure-functions-and-signalr. Cette étape vous permet d’effectuer un envoi (push) de vos modifications vers votre propre version du code source. Elle est requise pour déployer le code source sur Azure à un stade ultérieur du module.
Dans le terminal, clonez le dépôt. Dans la commande suivante, remplacez
MicrosoftDocs
par votre compte :git clone https://github.com/MicrosoftDocs/mslearn-advocates.azure-functions-and-signalr stock-prototype
Installez les dépendances dans le dossier setup-resources.
cd stock-prototype/setup-resources && npm install
Si vous recevez des avertissements concernant
EBADENGINE
, vous pouvez les ignorer.Se connecter à Azure avec Azure CLI.
az login
Affichez vos abonnements et définissez votre abonnement Azure par défaut.
Affichez les abonnements.
az account list --output json | jq -r '.[] | .name' | sort
Pour définir l’abonnement par défaut, remplacez
YOUR-SUBSCRIPTION-ID
par un ID d’abonnement de la sortie Azure CLI précédente.az account set --subscription <YOUR-SUBSCRIPTION-ID>
Cet abonnement est utilisé par défaut pour créer les ressources Azure.
Créez les ressources Azure et chargez les exemples de données dans la base de données. L’exécution de ce processus peut prendre plusieurs minutes.
bash create-start-resources.sh "<YOUR-SUBSCRIPTION-NAME>"
Assurez-vous de placer le nom entre des guillemets doubles. Si le script affiche une erreur concernant l’absence de ressources disponibles, modifiez le script pour changer l’emplacement :
LOCATION=<NEW LOCATION>
.Copiez les informations requises (vous en aurez besoin pour exécuter le prototype).
Type de ressource Variable d’environnement Azure Cosmos DB Appelée COSMOSDB_CONNECTION_STRING Stockage Azure Appelée STORAGE_CONNECTION_STRING Groupe de ressources Appelée RESOURCE_GROUP_NAME. Utilisez un script Node.js pour charger les exemples de données dans la base de données avec la commande suivante.
npm start
À partir du terminal, accédez à au dossier racine.
cd ..
Installer des dépendances et exécuter le prototype
Installez les dépendances.
cd start/client && npm install && cd ../.. cd start/server && npm install && cd ../..
Si la notification vous invite à choisir une application Azure Functions pour l’espace de travail, sélectionnez
start/server
. Il s’agit de l’application de fonction que vous utiliserez pour exécuter le code côté serveur.Si vous recevez une notification concernant l’installation de la dernière version d’Azure Functions Core Tools, sélectionnez Installer.
Obtenir les URL client et serveur
Lors de l’exécution locale, il est important que les applications client et serveur connaissent leur emplacement respectif. Les URL sont les suivantes :
- Client : http://localhost:3000
- Serveur : http://localhost:7071
Mettre à jour les paramètres locaux de l’application Azure Functions
Ajoutez les chaînes de connexion à l’application Azure Functions du prototype.
Créez le fichier ./start/server/local.settings.json et collez-y les éléments suivants. Ce fichier contient les paramètres de configuration du projet de fonctions locales.
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "<STORAGE_CONNECTION_STRING>", "FUNCTIONS_WORKER_RUNTIME": "node", "AzureWebJobsFeatureFlags": "EnableWorkerIndexing", "COSMOSDB_CONNECTION_STRING": "<COSMOSDB_CONNECTION_STRING>" }, "Host" : { "LocalHttpPort": 7071, "CORS": "http://localhost:3000", "CORSCredentials": true } }
Mettez à jour les variables suivantes avec les valeurs que vous avez copiées ci-dessus.
Propriété Valeur AzureWebJobsStorage À remplacer par la chaîne de connexion de stockage. COSMOSDB_CONNECTION_STRING À remplacer par la chaîne de connexion Cosmos DB. À présent, l’application Functions peut recevoir des requêtes du client, puis se connecter à la base de données et gérer correctement le déclencheur du minuteur.
Ajouter des paramètres locaux pour l’application cliente
Ajoutez l’URL du serveur à l’application cliente du prototype.
Ouvrez ./start/client et créez un fichier .env
avec le contenu suivant.
BACKEND_URL=http://localhost:7071
Exécuter l’application serveur
Lancez l’application Azure Functions dans le terminal.
cd start/server && npm start
Attendez que le terminal affiche les points de terminaison d’API.
Functions: getStocks: [GET] http://localhost:7071/api/getStocks setPrice: timerTrigger
Exécution de l’application cliente
Démarrez l’application cliente dans un nouveau terminal.
cd start/client && npm start
Quand la notification indique que l’application est en cours d’exécution, sélectionnez Ouvrir dans le navigateur pour utiliser le prototype.
Arrangez vos fenêtres de navigateur de manière à pouvoir visualiser à la fois le terminal et le prototype du cours des actions.
Dans la fenêtre de navigateur du prototype, ouvrez les outils de développement du navigateur. Notez que le navigateur envoie une requête à l’API toutes les cinq secondes pour obtenir toutes les données, même si ces dernières n’ont pas fait l’objet de modifications.
Dans la fenêtre du navigateur, examinez la sortie de l’application Azure Functions. Le cours d’une action est actualisé toutes les minutes. Lorsque le prix change dans l’API, cette modification est comprise dans l’extraction suivante de l’ensemble des données par le client.
Dans les terminaux de démarrage du client et du serveur, arrêtez les applications avec Ctrl + C ou supprimez le terminal en sélectionnant l’icône corbeille.
Dans cette unité, vous avez exécuté le prototype. Bien que le client s’exécute correctement, il ne fonctionne pas de manière efficace. Cette faiblesse peut ne pas être perceptible individuellement par chaque client lorsqu’il s’agit d’un petit nombre d’actions, mais elle devient apparente à mesure que le nombre d’actions augmente et que les requêtes des clients affluent vers le serveur. Le prototype peut être amélioré. C’est ce que nous allons voir dans l’unité suivante.