Exercice : exécuter et tester localement une fonction Azure
Dans les unités précédentes, vous avez découvert comment créer une fonction Azure de service web serverless à partir d’un archétype Maven. Vous avez également découvert comment générer et exécuter votre fonction dans Cloud Shell et comment configurer votre environnement shell pour tester votre fonction.
Dans cet exercice, vous mettez en pratique les connaissances acquises pour ouvrir un port HTTP dans Cloud Shell afin de tester votre fonction. Ensuite, vous créez et vous exécutez votre fonction dans Cloud Shell, et vous créez une URL d’API pour tester votre fonction en utilisant un navigateur web.
Ouverture d’un port HTTP à des fins de test
Avant de pouvoir tester votre fonction à distance, vous devez ouvrir un port afin que les requêtes HTTP soient mappées à votre fonction. Cette action génère une URL publique que vous utilisez plus tard dans cet exercice pour tester votre fonction.
Dans Azure Cloud Shell, utilisez la commande cURL suivante pour ouvrir un port HTTP à des fins de test :
curl -X POST http://localhost:8888/openPort/7071
Quand le port est ouvert, vous voyez une réponse JSON semblable à l’exemple suivant :
{"message":"Port 7071 is open","url":"https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/"}
La réponse JSON est concaténée en une seule ligne, comme le montre l’exemple précédent. Toutefois, l’exemple suivant montre à quoi ressemble la réponse JSON si elle a été mise en forme :
{ "message": "Port 7071 is open", "url": "https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/" }
Cet exemple doit vous aider à examiner les données contenues dans la réponse.
Copiez l’URL à partir de la réponse JSON dans votre instance Cloud Shell. Plus loin dans cet exercice, vous utilisez cette URL pour tester votre fonction dans un navigateur web.
Création et exécution de votre fonction dans Cloud Shell
Une fois que vous avez ouvert votre port à des fins de test, vous pouvez créer et exécuter votre fonction.
Dans Azure Cloud Shell, accédez au dossier racine de votre application. Par exemple :
cd ~/event-reporting
Utilisez la commande Maven suivante pour nettoyer le répertoire de votre projet et créer votre fonction :
mvn clean package
Maven affiche un état d’exécution du processus de build. La première fois que vous générez votre fonction, Maven télécharge des dizaines de fichiers de prise en charge : ces fichiers sont les dépendances listées dans vos fichiers pom.xml et host.json. L’extrait suivant montre un exemple abrégé d’une création réussie :
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Azure Java Functions 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] . . . [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.509 s [INFO] Finished at: 2020-01-01T04:55:05+00:00 [INFO] Final Memory: 57M/306M [INFO] ------------------------------------------------------------------------
Quand Maven a fini de créer et d’empaqueter votre fonction, utilisez la commande Maven suivante pour exécuter votre fonction :
mvn azure-functions:run
Maven affiche un état En cours d’exécution du processus de build. L’extrait suivant montre un exemple abrégé d’un démarrage réussi :
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Azure Java Functions 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- azure-functions-maven-plugin:1.4.1:run (default-cli) @ event-reporting --- [INFO] Azure Function App's staging directory found at: /home/user/event-reporting/target/azure-functions/event-reporting-20200101063700664 [INFO] Azure Functions Core Tools found. %%%%%% %%%%%% @ %%%%%% @ @@ %%%%%% @@ @@@ %%%%%%%%%%% @@@ @@ %%%%%%%%%% @@ @@ %%%% @@ @@ %%% @@ @@ %% @@ %% % Azure Functions Core Tools (2.7.2184 Commit hash: 5afacc827c2848e4debc23bb96604f1ffce09cc7) Function Runtime Version: 2.0.12961.0 . . . Hosting environment: Production Content root path: /home/user/event-reporting/target/azure-functions/event-reporting-20200101063700664 Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
Votre fonction sans serveur écoute désormais les requêtes HTTP.
Copiez la section de l’URL qui suit le port HTTP. Par exemple :
/api/HttpExample
Vous utilisez cet extrait d’URL dans la section suivante pour tester votre fonction dans un navigateur web.
Test de la fonction à partir de votre navigateur web
Plus tôt dans cet exercice, vous avez ouvert un port HTTP à des fins de test : ce port vous permet de tester votre application dans un navigateur web. Pour cela, procédez comme suit.
Construire l’URL de l’API de votre fonction :
Récupérez l’URL que vous avez copiée précédemment dans la section Ouverture d’un port HTTP à des fins de test de cet exercice. Par exemple :
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/
Ajoutez l’extrait de l’URL d’API de votre fonction copiée précédemment dans la section Création et exécution de votre fonction dans Cloud Shell de cet exercice. Par exemple :
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample
Ajoutez une chaîne de requête qui transmet un nom à l’URL de l’API, par exemple :
https://gateway.westus.console.azure.com/n/cc-12345678/cc-12345678/proxy/7071/api/HttpExample?name=Bob
Copiez cette URL entièrement construite pour l’utiliser dans les étapes suivantes.
Ouvrez un nouvel onglet dans votre navigateur web, puis collez l’URL entièrement construite des étapes précédentes dans le champ d’adresse.
Quand vous accédez à cette URL dans votre navigateur web, vous voyez un message en texte clair retourné à votre navigateur web, personnalisé avec le nom que vous avez passé dans la chaîne de requête. Par exemple :
Hello, Bob
Dans Azure Cloud Shell, vous devriez voir un message d’état similaire à l’exemple suivant, qui indique que la requête a été traitée avec succès :
[1/1/20 7:08:11 AM] Executing HTTP request: { [1/1/20 7:08:11 AM] "requestId": "12345678-1234-1234-1234-123456789abc", [1/1/20 7:08:11 AM] "method": "GET", [1/1/20 7:08:11 AM] "uri": "/api/HttpExample" [1/1/20 7:08:11 AM] } [1/1/20 7:08:12 AM] Executing 'Functions.HttpExample' (Reason='This function was programmatically called via the host APIs.', Id=12345678-1234-1234-1234-123456789abc) [1/1/20 7:08:12 AM] Java HTTP trigger processed a request. [1/1/20 7:08:12 AM] Function "HttpExample" (Id: 12345678-1234-1234-1234-123456789abc) invoked by Java Worker [1/1/20 7:08:12 AM] Host lock lease acquired by instance ID '00000000000000000000000052DF09EB'. [1/1/20 7:08:12 AM] Executed 'Functions.HttpExample' (Succeeded, Id=12345678-1234-1234-1234-123456789abc) [1/1/20 7:08:13 AM] Executed HTTP request: { [1/1/20 7:08:13 AM] "requestId": "12345678-1234-1234-1234-123456789abc", [1/1/20 7:08:13 AM] "method": "GET", [1/1/20 7:08:13 AM] "uri": "/api/HttpExample", [1/1/20 7:08:13 AM] "identities": [ [1/1/20 7:08:13 AM] { [1/1/20 7:08:13 AM] "type": "WebJobsAuthLevel", [1/1/20 7:08:13 AM] "level": "Admin" [1/1/20 7:08:13 AM] } [1/1/20 7:08:13 AM] ], [1/1/20 7:08:13 AM] "status": 200, [1/1/20 7:08:13 AM] "duration": 1759 [1/1/20 7:08:13 AM] }
Si vous ne voyez pas d’erreurs, c’est que le test local de votre fonction est a réussi.
Avant de continuer, revenez à Cloud Shell et appuyez sur Ctrl + C pour fermer le serveur de test.
Dans l’unité suivante, vous découvrez comment déployer votre fonction sur Azure Functions.