Extension Dapr pour Azure Functions

Important

L’extension Dapr pour Azure Functions est actuellement en préversion et uniquement prise en charge dans les environnements Azure Container Apps.

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 0.17.0-preview01.

Utilisation de l’interface CLI .NET :

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr --prerelease

Installer le bundle

Vous pouvez ajouter l’extension en préversion en ajoutant ou en remplaçant le code suivant dans votre fichier host.json :

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
    "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 :

Screenshot demonstrating where to find Dapr enablement for a Function App in the Azure portal.

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.

Vérifier 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 la configuration YAML de votre déploiement 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 d’environnement.DAPR_APP_PORT

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 :

  1. 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 DAPR_APP_PORT variable d’environnement.

    • 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.

  2. 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 
      

Étapes suivantes

En savoir plus sur Dapr.