Liaison d’entrée d’état 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.

La liaison d’entrée d’état Dapr vous permet de lire l’état Dapr pendant l’exécution d’une fonction.

Pour en savoir plus sur l’installation et la configuration de l’extension Dapr, reportez-vous à Présentation de l’extension Dapr.

Exemple

Une fonction C# peut être créée à l’aide de l’un des modes C# suivants :

Modèle d’exécution Description
Modèle de worker isolé Le code de votre fonction s’exécute dans un processus Worker .NET distinct. Utilisez avec les versions prises en charge de .NET et .NET Framework. Pour plus d’informations, consultez Développer les fonctions de processus Worker isolé .NET.
Modèle in-process Le code de votre fonction s’exécute dans le même processus que le processus hôte Functions. Prend uniquement en charge les versions LTS (Long Term Support) de .NET. Pour plus d’informations, consultez Développer des fonctions de bibliothèque de classes .NET.
[FunctionName("StateInputBinding")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "state/{key}")] HttpRequest req,
    [DaprState("statestore", Key = "{key}")] string state,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    return new OkObjectResult(state);
}

L’exemple suivant crée une fonction "RetreveOrder" à l’aide de la liaison DaprStateInput avec DaprServiceInvocationTrigger :

@FunctionName("RetrieveOrder")
public String run(
        @DaprServiceInvocationTrigger(
            methodName = "RetrieveOrder") 
        String payload,
        @DaprStateInput(
            stateStore = "%StateStoreName%",
            key = "order")
        String product,
        final ExecutionContext context)

Dans l’exemple suivant, la liaison d’entrée d’appel Dapr est ajoutée en tant que extraInput déclencheur HTTP et associée à un déclencheur HTTP, qui est inscrit par l’objet app :

const { app, trigger } = require('@azure/functions');

app.generic('StateInputBinding', {
    trigger: trigger.generic({
        type: 'httpTrigger',
        authLevel: 'anonymous',
        methods: ['GET'],
        route: "state/{key}",
        name: "req"
    }),
    extraInputs: [daprStateInput],
    handler: async (request, context) => {
        context.log("Node HTTP trigger function processed a request.");

        const daprStateInputValue = context.extraInputs.get(daprStateInput);
        // print the fetched state value
        context.log(daprStateInputValue);

        return daprStateInputValue;
    }
});

Les exemples suivants montrent les déclencheurs Dapr dans un fichier function.json et le code PowerShell qui utilise ces liaisons.

Voici le fichier function.json pour daprState :

{
  "bindings": 
    {
      "type": "daprState",
      "direction": "in",
      "key": "order",
      "stateStore": "%StateStoreName%",
      "name": "order"
    }
}

Pour plus d’informations sur les propriétés du fichier function.json, consultez la section Configuration.

Dans le code :

using namespace System
using namespace Microsoft.Azure.WebJobs
using namespace Microsoft.Extensions.Logging
using namespace Microsoft.Azure.WebJobs.Extensions.Dapr
using namespace Newtonsoft.Json.Linq

param (
    $payload, $order
)

# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a RetrieveOrder request from the Dapr Runtime."

# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $order | ConvertTo-Json

Write-Host "$jsonString"

L’exemple suivant montre une liaison d’entrée d’état Dapr, qui utilise le modèle de programmation Python v2. Pour utiliser la liaison daprState à côté de la liaison daprServiceInvocationTrigger dans le code d’application de votre fonction Python :

import logging
import json
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="RetrieveOrder")
@app.dapr_service_invocation_trigger(arg_name="payload", method_name="RetrieveOrder")
@app.dapr_state_input(arg_name="data", state_store="statestore", key="order")
def main(payload, data: str) :
    # Function should be invoked with this command: dapr invoke --app-id functionapp --method RetrieveOrder  --data '{}'
    logging.info('Python function processed a RetrieveOrder request from the Dapr Runtime.')
    logging.info(data)

Attributs

Dans le modèle in-process, utilisez le DaprState pour lire l’état Dapr dans votre fonction, qui prend en charge ces paramètres :

Paramètre Description
StateStore Le nom du magasin d’état pour récupérer l’état.
Clé Le nom de la clé à récupérer à partir du magasin d’état spécifié.

Annotations

L’annotation DaprStateInput vous permet de lire l’état Dapr dans votre fonction.

Élément Description
stateStore Le nom du magasin d’état Dapr.
key La valeur de clé du magasin d’état.

Configuration

Le tableau suivant décrit les propriétés de configuration de liaison que vous avez définies dans le code.

Propriété Description
stateStore Le nom du magasin d’état.
key Le nom de la clé à récupérer à partir du magasin d’état spécifié.

Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json.

Propriété function.json Description
key Le nom de la clé à récupérer à partir du magasin d’état spécifié.
stateStore Le nom du magasin d’état.

Le tableau suivant explique les propriétés de configuration de liaison pour @dapp.dapr_state_input que vous définissez dans votre code Python.

Propriété Description
state_store Le nom du magasin d’état.
key La valeur de clé secrète. Le nom de la clé à récupérer à partir du magasin d’état spécifié.

Pour obtenir des exemples complets, consultez la section Exemple.

Usage

Pour utiliser la liaison d’entrée d’état Dapr, commencez par configurer un composant de magasin d’état Dapr. Pour en savoir plus sur le composant à utiliser et sur sa configuration, reportez-vous à la documentation officielle de Dapr.

Pour utiliser le daprState dans Python v2, configurez votre projet avec les bonnes dépendances.

  1. Créer et activer un environnement virtuel

  2. Dans votre fichier requirements.text, ajoutez la ligne suivante :

    azure-functions==1.18.0b3
    
  3. Dans le terminal, installez la bibliothèque Python.

    pip install -r .\requirements.txt
    
  4. Modifiez votre fichier local.setting.json avec la configuration suivante :

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Étapes suivantes

En savoir plus sur la gestion de l’état Dapr.