Extension Dapr pour Azure Functions
L’extension Dapr pour Azure Functions est un ensemble d’outils et de services qui permettent aux développeurs d’intégrer facilement Azure Functions à la plateforme de l’application distribuée Dapr (Distributed Application Runtime).
Azure Functions est un service de calcul basé sur les événements qui fournit un ensemble de déclencheurs et de liaisons pour se connecter facilement à d’autres services Azure. Dapr fournit un ensemble de blocs de construction et de bonnes pratiques pour la création d’applications distribuées, notamment les microservices, la gestion de l’état, la publication/la messagerie secondaire, et plus encore.
Avec l’intégration entre Dapr et Functions, vous pouvez créer des fonctions qui réagissent aux événements à partir de Dapr ou de systèmes externes.
Action | Sens | Type |
---|---|---|
Déclencheur sur une liaison d’entrée Dapr | N/A | daprBindingTrigger |
Déclencheur sur un appel de service Dapr | N/A | daprServiceInvocationTrigger |
Déclencher sur un abonnement à une rubrique Dapr | N/A | daprTopicTrigger |
Extraire l’état Dapr pour une exécution | Dans | daprState |
Extraire des secrets Dapr pour une exécution | Dans | daprSecret |
Enregistrer une valeur dans un état Dapr | Out | daprState |
Appeler une autre application Dapr | Out | daprInvoke |
Publier un message dans une rubrique Dapr | Out | daprPublish |
Envoyer une valeur à une liaison de sortie Dapr | Out | daprBinding |
Installer l’extension
Le package NuGet d’extension que vous installez dépend du mode C# in-process ou processus worker isolé que vous utilisez dans votre application de fonction :
Cette version de l’extension est disponible via l’installation du package NuGet, version 1.0.0.
Utilisation de l’interface CLI .NET :
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr
Installer le bundle
Vous pouvez ajouter l’extension en ajoutant ou en remplaçant le code suivant dans votre fichier host.json
:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Activation de Dapr
Vous pouvez configurer Dapr à l’aide de différents [arguments et annotations][dapr-args] en fonction du contexte d’exécution. Vous pouvez configurer Dapr pour Azure Functions via deux canaux :
- Modèles Infrastructure as Code (IaC), comme dans les modèles Bicep ou Azure Resource Manager (ARM)
- Le portail Azure
Lorsque vous utilisez un modèle IaC, spécifiez les arguments suivants dans la section properties
de la définition de ressource de l’application conteneur.
DaprConfig: {
enabled: true
appId: '${envResourceNamePrefix}-funcapp'
appPort: 3001
httpReadBufferSize: ''
httpMaxRequestSize: ''
logLevel: ''
enableApiLogging: true
}
Les valeurs de configuration Dapr ci-dessus sont considérées comme des modifications d’étendue d’application. Lorsque vous exécutez une application conteneur en mode de révision multiple, les modifications apportées à ces paramètres ne créent pas de révision. Au lieu de cela, toutes les révisions existantes sont redémarrées pour s’assurer qu’elles sont configurées avec les valeurs les plus à jour.
Lorsque vous configurez Dapr à l’aide du portail Azure, accédez à votre application de fonction et sélectionnez Dapr dans le menu de gauche :
Ports et écouteurs Dapr
Lorsque vous déclenchez une fonction à partir de Dapr, l’extension expose automatiquement le port 3001
pour écouter les requêtes entrantes à partir du side-car Dapr.
Important
Le port 3001
est exposé uniquement et écouté si un déclencheur Dapr est défini dans l’application de fonction. Lors de l’utilisation de Dapr, le sidecar attend de recevoir une réponse du port défini avant de terminer l’instanciation. Ne pas définir l’annotation dapr.io/port
ou --app-port
, sauf si vous avez un déclencheur. Cela peut verrouiller votre application à partir du side-car Dapr.
Si vous utilisez uniquement des liaisons d’entrée et de sortie, le port 3001
n’a pas besoin d’être exposé ou défini.
Par défaut, quand Azure Functions tente de communiquer avec Dapr, il appelle Dapr sur le port résolu à partir de la variable d’environnement DAPR_HTTP_PORT
. Si cette variable a la valeur Null, elle est définie par défaut sur le port 3500
.
Vous pouvez remplacer l’adresse Dapr utilisée par les liaisons d’entrée et de sortie en définissant la propriété DaprAddress
dans function.json
pour la liaison (ou l’attribut). Par défaut, il utilise http://localhost:{DAPR_HTTP_PORT}
.
L’application de fonction expose toujours un autre port et point de terminaison pour des éléments tels que les déclencheurs HTTP, qui sont localement par défaut 7071
, mais dans un conteneur, la valeur par défaut est 80
.
Types de liaisons
Les types de liaisons pris en charge pour .NET dépendent à la fois de la version de l’extension et du mode d’exécution C#, qui peut être l’un des suivants :
Une bibliothèque de classes in-process est une fonction C# compilée exécutée dans le même processus que le runtime Functions.
L’extension Dapr prend en charge les types de paramètres en fonction du tableau ci-dessous.
Liaison | Types de paramètres |
---|---|
Déclencheur Dapr | daprBindingTrigger daprServiceInvocationTrigger daprTopicTrigger |
Entrée Dapr | daprState daprSecret |
Sortie Dapr | daprState daprInvoke daprPublish daprBinding |
Pour obtenir des exemples d’utilisation de ces types, consultez le dépôt GitHub pour l’extension.
Essayer l’extension Dapr pour Azure Functions
Découvrez comment utiliser l’extension Dapr pour Azure Functions via les exemples fournis.
Exemples | Description |
---|---|
Démarrage rapide | Commencez à utiliser la liaison Dapr Pub/sub et HttpTrigger . |
Dapr Kafka | Découvrez comment utiliser l’extension Dapr Azure Functions avec le composant Dapr des liaisons Kafka. |
.NET in-process | Découvrez comment utiliser le modèle in-process Azure Functions pour s’intégrer à plusieurs composants Dapr dans .NET, tels que l’appel de service, Pub/sub, liaisons et gestion d’état. |
Isolé .NET | Intégrez des composants Dapr dans .NET à l’aide du modèle d’exécution OOP (Out-of-Proc) d’Azure Functions. |
Essayer l’extension Dapr pour Azure Functions
Découvrez comment utiliser l’extension Dapr pour Azure Functions via les exemples fournis.
Exemples | Description |
---|---|
Fonctions Java | Découvrez comment utiliser l’extension Dapr Azure Functions à l’aide de Java. |
Essayer l’extension Dapr pour Azure Functions
Découvrez comment utiliser l’extension Dapr pour Azure Functions via les exemples fournis.
Exemples | Description |
---|---|
Démarrage rapide | Commencez à utiliser la liaison Dapr Pub/sub et HttpTrigger . |
Dapr Kafka | Découvrez comment utiliser l’extension Dapr Azure Functions avec le composant Dapr des liaisons Kafka. |
JavaScript | Exécutez une application de fonction Dapr JavaScript et intégrez à Dapr Service Invocation, Pub/sub, Bindings et State Management à l’aide d’Azure Functions. |
Essayer l’extension Dapr pour Azure Functions
Découvrez comment utiliser l’extension Dapr pour Azure Functions via les exemples fournis.
Exemples | Description |
---|---|
Fonctions PowerShell | Découvrez comment utiliser l’extension Dapr Azure Functions avec PowerShell. |
Essayer l’extension Dapr pour Azure Functions
Découvrez comment utiliser l’extension Dapr pour Azure Functions via les exemples fournis.
Exemples | Description |
---|---|
Dapr Kafka | Découvrez comment utiliser l’extension Dapr Azure Functions avec le composant Dapr des liaisons Kafka. |
Python v1 | Exécutez une application Python dapr et utilisez le modèle de programmation Azure Functions Python v1 pour l’intégrer aux composants Dapr. |
Python v2 | Lancez une application Dapr à l’aide du modèle de programmation Azure Functions Python v2 pour l’intégrer aux composants Dapr. |
Dépannage
Cette section explique comment résoudre les problèmes qui peuvent se produire lors de l’utilisation de l’extension Dapr pour Azure Functions.
Assurez-vous que Dapr est activé dans votre environnement
Si vous utilisez des liaisons et des déclencheurs Dapr dans Azure Functions et que Dapr n’est pas activé dans votre environnement, vous pouvez recevoir le message d’erreur : Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.
Pour activer Dapr dans votre environnement :
Si votre fonction Azure est déployée dans Azure Container Apps, reportez-vous aux instructions d’activation Dapr pour l’extension Dapr pour Azure Functions.
Si votre fonction Azure est déployée dans Kubernetes, vérifiez que votre configuration du déploiement YAML comporte les annotations suivantes :
annotations: ... dapr.io/enabled: "true" dapr.io/app-id: "functionapp" # You should only set app-port if you are using a Dapr trigger in your code. dapr.io/app-port: "<DAPR_APP_PORT>" ...
Si vous exécutez votre fonction Azure localement, exécutez la commande suivante pour vous assurer que vous exécutez l’application de fonction avec Dapr :
dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start
Vérifier la valeur du port d’application dans la configuration Dapr
L’extension Dapr pour Azure Functions démarre un serveur HTTP sur le port 3001
par défaut. Vous pouvez configurer ce port à l’aide de la variable DAPR_APP_PORT
d’environnement.
Si vous fournissez une valeur de port d’application incorrecte lors de l’exécution d’une application Azure Functions, vous pouvez recevoir le message d’erreur : The Dapr sidecar is configured to listen on port {portInt}, but the app server is running on port {appPort}. This may cause unexpected behavior. For more information, visit [this link](https://aka.ms/azfunc-dapr-app-config-error).
Pour résoudre ce message d’erreur :
Dans les paramètres Dapr de votre application conteneur :
Si vous utilisez un déclencheur Dapr dans votre code, vérifiez que le port d’application est défini
3001
sur ou sur la valeur de la variable d’environnementDAPR_APP_PORT
.Si vous n’utilisez pas de déclencheur Dapr dans votre code, vérifiez que le port de l’application n’est pas défini. Il est normalement vide.
Vérifiez que vous fournissez la valeur de port d’application correcte dans la configuration Dapr.
Si vous utilisez Azure Container Apps, spécifiez le port d’application dans Bicep :
DaprConfig: { ... appPort: <DAPR_APP_PORT> ... }
Si vous utilisez un environnement Kubernetes, définissez l’annotation
dapr.io/app-port
:annotations: ... dapr.io/app-port: "<DAPR_APP_PORT>" ...
Si vous développez localement, vérifiez que vous définissez
--app-port
lors de l’exécution de l’application de fonction avec Dapr :dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start