Share via


Eingabebindung des Dapr-Zustands für Azure Functions

Wichtig

Die Dapr-Erweiterung für Azure Functions befindet sich derzeit in der Vorschau und wird nur in Azure Container Apps-Umgebungen unterstützt.

Mit der Dapr-Zustandseingabebindung können Sie den Dapr-Zustand während einer Funktionsausführung lesen.

Informationen zu Setup- und Konfigurationsdetails der Dapr-Erweiterung finden Sie in der Dapr-Erweiterungsübersicht.

Beispiel

Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:

Ausführungsmodell Beschreibung
Isoliertes Workermodell Ihr Funktionscode wird in einem separaten .NET-Workerprozess ausgeführt. Verwenden Sie dazu unterstützte Versionen von .NET und .NET Framework. Weitere Informationen finden Sie unter Entwickeln von isolierten .NET-Workerprozessfunktionen.
In-Process-Modell Ihr Funktionscode wird im gleichen Prozess wie der Functions-Hostprozess ausgeführt. Unterstützt nur LTS-Versionen (Long Term Support) von .NET. Weitere Informationen finden Sie unter Entwickeln von .NET-Klassenbibliotheksfunktionen.
[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);
}

Im folgenden Beispiel wird eine "RetreveOrder"-Funktion mithilfe der DaprStateInput-Bindung mit DaprServiceInvocationTrigger erstellt:

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

Im folgenden Beispiel wird die Dapr-Eingabebindung als extraInput HTTP-Trigger hinzugefügt und mit einem HTTP-Trigger gekoppelt, der app vom Objekt registriert wird:

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;
    }
});

Die folgenden Beispiele zeigen Dapr-Trigger in der Datei function.json und PowerShell-Code, der diese Bindungen verwendet.

Hier sehen Sie die Datei function.json für daprState:

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

Weitere Informationen zu den Dateieigenschaften von function.json finden Sie im Abschnitt Konfiguration.

In 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"

Das folgende Beispiel zeigt eine Dapr-Zustandseingabebindung, die das v2 Python-Programmiermodell verwendet. So verwenden Sie die daprState-Bindung zusammen mit daprServiceInvocationTrigger in Ihrem Python-Funktions-App-Code:

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)

Attribute

Verwenden Sie DaprState im In-Process-Modell, um den Dapr-Zustand in Ihrer Funktion zu lesen. Die folgenden Parameter werden unterstützt:

Parameter Beschreibung
StateStore Der Name des Zustandsspeichers zum Abrufen des Zustands
Schlüssel Der Name des Schlüssels, der aus dem angegebenen Zustandsspeicher abgerufen werden soll

Anmerkungen

Mit der Anmerkung DaprStateInput können Sie den Dapr-Zustand in Ihrer Funktion lesen.

Element Beschreibung
stateStore Der Name des Dapr-Zustandsspeichers
key Der Wert des Zustandsspeicherschlüssels

Konfiguration

In der folgenden Tabelle werden die Bindungskonfigurationseigenschaften erläutert, die Sie im Code festlegen.

Eigenschaft Beschreibung
stateStore Der Name des Zustandsspeichers
key Der Name des Schlüssels, der aus dem angegebenen Zustandsspeicher abgerufen werden soll

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.

function.json-Eigenschaft Beschreibung
key Der Name des Schlüssels, der aus dem angegebenen Zustandsspeicher abgerufen werden soll
stateStore Der Name des Zustandsspeichers

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften für @dapp.dapr_state_input, die Sie im Python-Code festlegen.

Eigenschaft Beschreibung
state_store Der Name des Zustandsspeichers
key Der Wert des geheimen Schlüssels Der Name des Schlüssels, der aus dem angegebenen Zustandsspeicher abgerufen werden soll

Vollständige Beispiele finden Sie im Abschnitt Beispiele.

Verwendung

Um die Eingabebindung für den Dapr-Zustand zu verwenden, richten Sie zunächst eine Komponente für den Dapr-Zustandsspeicher ein. In der offiziellen Dapr-Dokumentation erfahren Sie mehr darüber, welche Komponente Sie verwenden sollten und wie Sie diese einrichten können.

Um daprState in Python v2 zu verwenden, richten Sie Ihr Projekt mit den richtigen Abhängigkeiten ein.

  1. Erstellen und Aktivieren einer virtuellen Umgebung

  2. Fügen Sie in Ihrer requirements.text-Datei die folgende Zeile hinzu:

    azure-functions==1.18.0b3
    
  3. Installieren Sie im Terminal die Python-Bibliothek.

    pip install -r .\requirements.txt
    
  4. Ändern Sie Ihre Datei local.setting.json mit der folgenden Konfiguration:

    "PYTHON_ISOLATE_WORKER_DEPENDENCIES":1
    

Nächste Schritte

Erfahren Sie mehr über die Dapr-Zustandsverwaltung.