Créer votre première fonction durable en Python
Durable Functions est une extension d’Azure Functions qui vous permet d’écrire des fonctions avec état dans un environnement serverless. L’extension gère l’état, les points de contrôle et les redémarrages à votre place.
Dans cet article, vous allez découvrir comment utiliser l’extension Azure Functions pour Visual Studio Code afin de créer et tester localement une fonction durable appelée « Hello World ». Cette fonction permet d’orchestrer et de chaîner des appels à d’autres fonctions. Vous pouvez ensuite publier le code de la fonction dans Azure.
Prérequis
Pour suivre ce tutoriel :
Installez Visual Studio Code.
Installez l’extension Azure Functions de Visual Studio Code.
Vérifiez que vous disposez de la dernière version d’Azure Functions Core Tools.
Durable Functions nécessite un compte de stockage Azure. Vous avez besoin d’un abonnement Azure.
Veillez à disposer de la version 3.7, 3.8, 3.9 ou 3.10 de Python installée.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.
Créer votre projet local
Dans cette section, vous utilisez Visual Studio Code pour créer un projet Azure Functions local.
Dans Visual Studio Code, appuyez sur F1 (ou Ctrl/Cmd+Maj+P) pour ouvrir la palette de commandes. Dans la palette de commandes, recherchez et sélectionnez
Azure Functions: Create New Project...
.Désignez un emplacement de dossier vide pour votre projet et choisissez Sélectionner.
Suivez les invites et fournissez les informations suivantes :
Prompt Valeur Description Sélectionnez un langage pour votre projet d’application de fonction Python Créez un projet Functions Python local. Sélectionner une version Azure Functions v4 Vous voyez cette option uniquement quand les outils Core Tools ne sont pas déjà installés. Dans le cas présent, les outils Core Tools sont installés la première fois que vous exécutez l’application. Version Python Python 3.7, 3.8, 3.9 ou 3.10 Visual Studio Code crée un environnement virtuel avec la version que vous sélectionnez. Sélectionner un modèle pour la première fonction de votre projet Ignorer pour le moment Sélectionner la façon dont vous souhaitez ouvrir votre projet Ouvrir dans la fenêtre active Ouvre à nouveau Visual Studio Code dans le dossier que vous avez sélectionné.
Suivez les invites et fournissez les informations suivantes :
Prompt Valeur Description Sélectionner une langue Python (Modèle de programmation V2) Créez un projet Python Functions local à l’aide du modèle de programmation V2. Sélectionner une version Azure Functions v4 Vous voyez cette option uniquement quand les outils Core Tools ne sont pas déjà installés. Dans le cas présent, les outils Core Tools sont installés la première fois que vous exécutez l’application. Version Python Python 3.7, 3.8, 3.9 ou 3.10 Visual Studio Code crée un environnement virtuel avec la version que vous sélectionnez. Sélectionner la façon dont vous souhaitez ouvrir votre projet Ouvrir dans la fenêtre active Ouvre à nouveau Visual Studio Code dans le dossier que vous avez sélectionné.
Visual Studio Code installe la solution Azure Functions Core Tools, si nécessaire. Il crée également un projet d’application de fonction dans un dossier. Ce projet contient les fichiers config host.json et local.settings.json.
Un fichier requirements.txt est également créé dans le dossier racine. Il spécifie les packages Python requis pour exécuter votre application de fonction.
Installer azure-functions-durable à partir de PyPI
Quand vous avez créé le projet, l’extension Azure Functions de Visual Studio Code crée automatiquement un environnement virtuel en utilisant la version de Python que vous avez sélectionnée. Vous devez alors activer l’environnement virtuel dans un terminal et installer certaines dépendances requises par Azure Functions et Durable Functions.
Ouvrez le fichier requirements.txt dans l’éditeur et remplacez son contenu par le code suivant :
azure-functions azure-functions-durable
Ouvrez le terminal intégré de l’éditeur dans le dossier actif (Ctrl+Maj+`).
Dans le terminal intégré, activez l’environnement virtuel dans le dossier actif selon votre système d’exploitation :
Dans le terminal intégré où l’environnement virtuel est activé, utilisez pip pour installer les packages que vous avez définis.
python -m pip install -r requirements.txt
Créer vos fonctions
Une application Durable Functions de base contient trois fonctions :
- La fonction d’orchestrateur : décrit un workflow qui orchestre d’autres fonctions.
- La fonction d’activité : appelée par la fonction d’orchestrateur, elle effectue un travail et retourne éventuellement une valeur.
- La fonction de client : fonction Azure normale qui démarre une fonction d’orchestrateur. Cet exemple utilise une fonction déclenchée via HTTP.
Fonction d’orchestrateur
Vous utilisez un modèle pour créer le code de fonction durable dans votre projet.
Dans la palette de commandes, recherchez et sélectionnez
Azure Functions: Create Function...
.Suivez les invites et fournissez les informations suivantes :
Prompt Valeur Description Sélectionner un modèle pour votre fonction Orchestrateur Durable Functions Créer une orchestration Durable Functions Fournir un nom de fonction HelloOrchestrator Nom de votre fonction durable
Vous avez ajouté un orchestrateur pour coordonner les fonctions d’activité. Ouvrez HelloOrchestrator/__init__.py pour voir la fonction d’orchestrateur. Chaque appel à context.call_activity
appelle une fonction d’activité nommée Hello
.
Ajoutez maintenant la fonction d’activité Hello
référencée.
Fonction d’activité
Dans la palette de commandes, recherchez et sélectionnez
Azure Functions: Create Function...
.Suivez les invites et fournissez les informations suivantes :
Prompt Valeur Description Sélectionner un modèle pour votre fonction Activité Durable Functions Créer une fonction d’activité Fournir un nom de fonction Hello Nom de votre fonction d’activité
Vous avez ajouté la fonction d’activité Hello
qui est appelée par l’orchestrateur. Ouvrez Hello/__init__.py pour voir qu’elle accepte un nom comme entrée et retourne un message d’accueil. Une fonction d’activité vous permet d’effectuer des actions, telles que le lancement d’un appel de base de données ou l’exécution d’un calcul.
Pour terminer, vous ajouterez une fonction déclenchée par HTTP qui démarrera l’orchestration.
Fonction de client (démarrage HTTP)
Dans la palette de commandes, recherchez et sélectionnez
Azure Functions: Create Function...
.Suivez les invites et fournissez les informations suivantes :
Prompt Valeur Description Sélectionner un modèle pour votre fonction Démarrage HTTP Durable Functions Créer une fonction de démarrage HTTP Fournir un nom de fonction DurableFunctionsHttpStart Nom de votre fonction cliente Niveau d’autorisation Anonyme À des fins de démonstration, autorisez l’appel sans authentification à la fonction
Vous avez ajouté une fonction déclenchée par HTTP qui démarre une orchestration. Ouvrez DurableFunctionsHttpStart/__init__.py pour voir qu’elle se sert de client.start_new
pour démarrer une nouvelle orchestration. Elle utilise ensuite client.create_check_status_response
pour retourner une réponse HTTP contenant des URL qui peuvent être utilisées pour superviser et gérer la nouvelle orchestration.
Vous disposez maintenant d’une application Durable Functions qui peut être exécutée localement, et déployée sur Azure.
Spécifications
La version 2 du modèle de programmation Python nécessite les versions minimales suivantes :
- Azure Functions Runtime v4.16+
- Azure Functions Core Tools v4.0.5095+ (en cas d’exécution locale)
- azure-functions-durable v1.2.4+
Activer le modèle de programmation v2
Le paramètre d’application suivant est requis pour exécuter le modèle de programmation v2 :
- Nom :
AzureWebJobsFeatureFlags
- Valeur:
EnableWorkerIndexing
Si vous exécutez localement à l’aide de Azure Functions Core Tools, vous devez ajouter ce paramètre à votre fichier local.settings.json
. Si vous exécutez dans Azure, procédez comme suit avec l’outil de votre choix :
Remplacez <FUNCTION_APP_NAME>
et <RESOURCE_GROUP_NAME>
par le nom de votre application de fonction et du groupe de ressources, respectivement.
az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing
Pour créer une application Durable Functions de base à l’aide de ces 3 types de fonctions, remplacez le contenu de function_app.py
par le code Python suivant.
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
function_name = req.route_params.get('functionName')
instance_id = await client.start_new(function_name)
response = client.create_check_status_response(req, instance_id)
return response
# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
result1 = yield context.call_activity("hello", "Seattle")
result2 = yield context.call_activity("hello", "Tokyo")
result3 = yield context.call_activity("hello", "London")
return [result1, result2, result3]
# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
return f"Hello {city}"
Consultez le tableau ci-dessous pour obtenir une explication de chaque fonction et de son objectif dans l’exemple.
Méthode | Description |
---|---|
hello_orchestrator |
Fonction d’orchestrateur, qui décrit le flux de travail. Dans ce cas, l’orchestration démarre, appelle trois fonctions dans une séquence et retourne les résultats triés des 3 fonctions d’une liste. |
hello |
Fonction d’activité, qui effectue le travail orchestré. La fonction retourne un message d’accueil simple à la ville passée en tant qu’argument. |
http_start |
Fonction déclenchée par HTTP qui démarre une instance de l’orchestration et retourne une réponse d’état de vérification. |
Notes
Durable Functions prend également en charge les blueprints de Python V2. Pour les utiliser, vous devez inscrire vos fonctions blueprint à l’aide de la classe azure-functions-durable
Blueprint
, comme illustré ici. Le blueprint obtenu peut ensuite être inscrit normalement. Consultez cette page pour obtenir un exemple.
Tester la fonction en local
Azure Functions Core Tools vous permet d’exécuter un projet Azure Functions sur votre ordinateur de développement local. Si cela n’a pas déjà été fait, vous êtes invité à installer ces outils la première fois que vous démarrez une fonction dans Visual Studio Code.
- Pour tester votre fonction, définissez un point d’arrêt dans le code de la fonction d’activité
Hello
(Hello/__init__.py). Appuyez sur F5 ou sélectionnezDebug: Start Debugging
dans la palette de commandes pour démarrer le projet d’application de fonction. La sortie de Core Tools est affichée dans le panneau Terminal.
- Pour tester votre fonction, définissez un point d’arrêt dans le
hello
code de la fonction d’activité. Appuyez sur F5 ou sélectionnezDebug: Start Debugging
dans la palette de commandes pour démarrer le projet d’application de fonction. La sortie de Core Tools est affichée dans le panneau Terminal.
Notes
Pour plus d’informations sur le débogage, consultez Diagnostics Durable Functions.
Durable Functions nécessite l’exécution d’un compte de stockage Azure. Lorsque Visual Studio Code vous invite à sélectionner un compte de stockage, choisissez Sélectionner un compte de stockage.
Suivez les invites et fournissez les informations suivantes pour créer un compte de stockage dans Azure :
Prompt Valeur Description Sélectionner un abonnement nom de votre abonnement Sélectionner votre abonnement Azure Sélectionner un compte de stockage Création d’un nouveau compte de stockage Entrer le nom du nouveau compte de stockage nom unique Nom du compte de stockage à créer Sélectionner un groupe de ressources nom unique Nom du groupe de ressources à créer Sélectionner un emplacement region Sélectionner une région proche de vous Dans le panneau Terminal, copiez le point de terminaison de l’URL de votre fonction déclenchée via HTTP.
Utilisez votre navigateur ou un outil comme Postman ou cURL, envoyez une requête HTTP au point de terminaison de l’URL. Remplacez le dernier segment par le nom de la fonction d’orchestrateur (
HelloOrchestrator
). L’URL doit être similaire àhttp://localhost:7071/api/orchestrators/HelloOrchestrator
.La réponse est le résultat initial provenant de la fonction HTTP, qui vous indique que l’orchestration durable a bien été démarrée. Il ne s’agit pas encore du résultat final de l’orchestration. La réponse contient plusieurs URL utiles. Pour le moment, demandons l’état de l’orchestration.
Utilisez votre navigateur ou un outil comme Postman ou cURL, envoyez une requête HTTP au point de terminaison de l’URL. Remplacez le dernier segment par le nom de la fonction d’orchestrateur (
hello_orchestrator
). L’URL doit être similaire àhttp://localhost:7071/api/orchestrators/hello_orchestrator
.La réponse est le résultat initial provenant de la fonction HTTP, qui vous indique que l’orchestration durable a bien été démarrée. Il ne s’agit pas encore du résultat final de l’orchestration. La réponse contient plusieurs URL utiles. Pour le moment, demandons l’état de l’orchestration.
Copiez la valeur de l’URL pour
statusQueryGetUri
, collez-la dans la barre d’adresse du navigateur, puis exécutez la requête. Vous pouvez également continuer à utiliser Postman pour envoyer la requête GET.La requête interroge l’instance d’orchestration pour obtenir l’état. Une fois l’exécution de l’instance terminée, vous devez recevoir une réponse contenant les sorties ou résultats de la fonction durable. Voici comment il se présente :
{
"name": "HelloOrchestrator",
"instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
"runtimeStatus": "Completed",
"input": null,
"customStatus": null,
"output": [
"Hello Tokyo!",
"Hello Seattle!",
"Hello London!"
],
"createdTime": "2020-03-18T21:54:49Z",
"lastUpdatedTime": "2020-03-18T21:54:54Z"
}
{
"name": "hello_orchestrator",
"instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
"runtimeStatus": "Completed",
"input": null,
"customStatus": null,
"output": [
"Hello Tokyo!",
"Hello Seattle!",
"Hello London!"
],
"createdTime": "2020-03-18T21:54:49Z",
"lastUpdatedTime": "2020-03-18T21:54:54Z"
}
- Pour arrêter le débogage, appuyez sur Maj+F5 dans Visual Studio Code.
Après avoir vérifié que la fonction s’exécute correctement sur votre ordinateur local, il est temps de publier le projet sur Azure.
Connexion à Azure
Avant de pouvoir créer des ressources Azure ou de publier votre application, vous devez vous connecter à Azure.
Si vous n’êtes pas déjà connecté, choisissez l’icône Azure dans la barre d’activité. Puis, dans la zone Ressources, choisissez Se connecter à Azure....
Si vous êtes déjà connecté et que vous pouvez voir vos abonnements existants, accédez à la section suivante. Si vous n’avez pas encore de compte Azure, choisissez Créer un compte Azure.... Les étudiants peuvent choisir Créer un compte Microsoft Azure for Students....
Quand vous y êtes invité dans le navigateur, choisissez votre compte Azure, puis connectez-vous à l’aide de vos informations d’identification de compte Azure. Si vous créez un compte, vous pouvez vous connecter une fois votre compte créé.
Une fois la connexion réussie, vous pouvez fermer la nouvelle fenêtre de navigateur. Les abonnements qui font partie de votre compte Azure sont affichés dans la barre latérale.
Créer l’application de fonction dans Azure
Dans cette section, vous créez une application de fonction et les ressources associées dans votre abonnement Azure.
Sélectionnez l’icône Azure dans la barre Activité. Ensuite, dans la zone Ressources, sélectionnez l’icône + et choisissez l’option Créer une application de fonction dans Azure.
Quand vous y êtes invité, indiquez les informations suivantes :
Prompt Sélection Sélectionner un abonnement choisissez l’abonnement à utiliser. Vous ne verrez pas cette invite si vous n’avez qu’un abonnement visible sous Ressources. Entrer un nom global unique pour l’application de fonction Tapez un nom valide dans un chemin d’URL. Le système vérifie que le nom que vous tapez est unique dans Azure Functions. Sélectionner une pile d’exécution Choisissez la version du langage que vous avez exécutée localement. Sélectionnez un emplacement pour les nouvelles ressources Pour de meilleures performances, choisissez une région proche de vous. L’extension montre l'état des ressources individuelles au fur et à mesure qu’elles sont créées dans Azure, dans le panneau Azure : journal d’activité.
Quand la création est terminée, les ressources Azure suivantes sont créées dans votre abonnement. Les ressources sont nommées en fonction du nom de votre application de fonction :
- Un groupe de ressources, qui est un conteneur logique pour les ressources associées.
- Un compte Stockage Azure standard, qui conserve l’état et d’autres informations spécifiques à vos projets.
- Une application de fonction, qui fournit l’environnement d’exécution de votre code de fonction. Une application de fonction vous permet de regrouper des fonctions en une unité logique pour faciliter la gestion, le déploiement et le partage des ressources au sein du même plan d’hébergement.
- Un plan App Service, qui définit l’hôte sous-jacent pour votre application de fonction.
- Une instance Application Insights connectée à l’application de fonction, qui suit l’utilisation de vos fonctions dans l’application.
Une notification s’affiche après que votre application de fonction a été créée et que le package de déploiement a été appliqué.
Conseil
Par défaut, les ressources Azure nécessaires à votre application de fonction sont créées d’après le nom d’application de fonction que vous indiquez. Par défaut, elles sont également créées dans le même nouveau groupe de ressources avec l’application de fonction. Si vous souhaitez personnaliser les noms de ces ressources ou réutiliser des ressources existantes, vous devez plutôt publier le projet à l’aide des options de création avancées.
Déployer le projet dans Azure
Important
Le déploiement vers une application de fonction existante remplace toujours le contenu de cette application dans Azure.
Dans la zone Ressources de l’activité Azure, recherchez la ressource d’application de fonction que vous venez de créer, cliquez avec le bouton droit sur la ressource, puis sélectionnez Déployer sur l’application de fonction....
Quand vous êtes invité à remplacer les déploiements précédents, sélectionnez Déployer pour déployer le code de votre fonction sur la nouvelle ressource de l’application de fonction.
Une fois le déploiement terminé, sélectionnez Afficher la sortie pour afficher les résultats de la création et du déploiement, y compris les ressources Azure que vous avez créées. Si vous manquez la notification, sélectionnez l’icône de cloche dans le coin inférieur droit pour la voir de nouveau.
Tester votre fonction dans Azure
- Copiez l’URL du déclencheur HTTP à partir du panneau Sortie. L’URL qui appelle la fonction déclenchée via HTTP doit se présenter sous ce format :
https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
- Copiez l’URL du déclencheur HTTP à partir du panneau Sortie. L’URL qui appelle la fonction déclenchée via HTTP doit se présenter sous ce format :
https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
- Collez cette nouvelle URL de requête HTTP dans la barre d’adresse de votre navigateur. Vous devez obtenir la même réponse d’état que lorsque vous avez utilisé l’application publiée.
Étapes suivantes
Vous avez utilisé Visual Studio Code pour créer et publier une application de fonction durable Python.