Ausgabebindung des Dapr-Zustands für Azure Functions
Mit der Dapr-Zustandsausgabebindung können Sie während einer Funktionsausführung einen Wert in einer Dapr-Zustandsausgabebindung speichern.
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. |
Im folgenden Beispiel wird die Verwendung der Dapr-Zustandsausgabebindung veranschaulicht, um einen neuen Zustand im Zustandsspeicher beizubehalten.
[FunctionName("StateOutputBinding")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "state/{key}")] HttpRequest req,
[DaprState("statestore", Key = "{key}")] IAsyncCollector<string> state,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
await state.AddAsync(requestBody);
return new OkResult();
}
Im folgenden Beispiel wird eine "CreateNewOrderHttpTrigger"
-Funktion mithilfe der DaprStateOutput
-Bindung und einem HttpTrigger
erstellt:
@FunctionName("CreateNewOrderHttpTrigger")
public String run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@DaprStateOutput(
stateStore = "%StateStoreName%",
key = "product")
OutputBinding<String> product,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger (CreateNewOrderHttpTrigger) processed a request.");
}
Im folgenden Beispiel wird die Ausgabebindung des Dapr-Zustands mit einem HTTP-Trigger gekoppelt, der vom app
-Objekt registriert wird:
const { app, trigger } = require('@azure/functions');
app.generic('StateOutputBinding', {
trigger: trigger.generic({
type: 'httpTrigger',
authLevel: 'anonymous',
methods: ['POST'],
route: "state/{key}",
name: "req"
}),
return: daprStateOutput,
handler: async (request, context) => {
context.log("Node HTTP trigger function processed a request.");
const payload = await request.text();
context.log(JSON.stringify(payload));
return { value : payload };
}
});
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
-Ausgabe:
{
"bindings":
{
"type": "daprState",
"stateStore": "%StateStoreName%",
"direction": "out",
"name": "order",
"key": "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
)
# C# function processed a CreateNewOrder request from the Dapr Runtime.
Write-Host "PowerShell function processed a CreateNewOrder request from the Dapr Runtime."
# Payload must be of the format { "data": { "value": "some value" } }
# Convert the object to a JSON-formatted string with ConvertTo-Json
$jsonString = $payload| ConvertTo-Json
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name order -Value $payload["data"]
Das folgende Beispiel zeigt eine Dapr-Zustandsausgabebindung, die das v2 Python-Programmiermodell verwendet. So verwenden Sie daprState
in Ihrem Python-Funktions-App-Code
import logging
import json
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="HttpTriggerFunc")
@app.route(route="req", auth_level=dapp.auth_level.ANONYMOUS)
@app.dapr_state_output(arg_name="state", state_store="statestore", key="newOrder")
def main(req: func.HttpRequest, state: func.Out[str] ) -> str:
# request body must be passed this way '{\"value\": { \"key\": \"some value\" } }'
body = req.get_body()
if body is not None:
state.set(body.decode('utf-8'))
logging.info(body.decode('utf-8'))
else:
logging.info('req body is none')
return 'ok'
Attribute
Verwenden Sie im In-Process-Modell die DaprState
, um eine Dapr-Zustandsausgabebindung zu definieren, die diese Parameter unterstützt:
Parameter | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
StateStore | Der Name des Zustandsspeichers zum Speichern des Zustands | ✔️ | ❌ |
Schlüssel | Der Name des Schlüssels zum Speichern des Zustands im Zustandsspeicher. | ✔️ | ✔️ |
Wert | Erforderlich. Der zu speichernde Wert. | ❌ | ✔️ |
Anmerkungen
Mit der Anmerkung DaprStateOutput
können Sie einer Funktion Zugriff auf einen Zustandsspeicher gewähren.
Element | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
stateStore | Der Name des Zustandsspeichers zum Speichern des Zustands | ✔️ | ❌ |
key | Der Name des Schlüssels zum Speichern des Zustands im Zustandsspeicher. | ✔️ | ✔️ |
value | Erforderlich. Der zu speichernde Wert. | ❌ | ✔️ |
Konfiguration
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie im Code festlegen.
Eigenschaft | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
stateStore | Der Name des Zustandsspeichers zum Speichern des Zustands | ✔️ | ❌ |
key | Der Name des Schlüssels zum Speichern des Zustands im Zustandsspeicher. | ✔️ | ✔️ |
value | Erforderlich. Der zu speichernde Wert. | ❌ | ✔️ |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.
function.json-Eigenschaft | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
stateStore | Der Name des Zustandsspeichers zum Speichern des Zustands | ✔️ | ❌ |
key | Der Name des Schlüssels zum Speichern des Zustands im Zustandsspeicher. | ✔️ | ✔️ |
value | Erforderlich. Der zu speichernde Wert. | ❌ | ✔️ |
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften für @dapp.dapr_state_output
, die Sie im Python-Code festlegen.
Eigenschaft | Beschreibung | Kann per Attribut gesendet werden | Kann im RequestBody gesendet werden |
---|---|---|---|
stateStore | Der Name des Zustandsspeichers zum Speichern des Zustands | ✔️ | ❌ |
key | Der Name des Schlüssels zum Speichern des Zustands im Zustandsspeicher. | ✔️ | ✔️ |
value | Erforderlich. Der zu speichernde Wert. | ❌ | ✔️ |
Wenn Eigenschaften sowohl in Attributen als auch in RequestBody
definiert sind, haben die in RequestBody
bereitgestellten Daten höhere Priorität.
Vollständige Beispiele finden Sie im Abschnitt Beispiele.
Verwendung
Um die Ausgabebindung 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.
Fügen Sie in Ihrer
requirements.text
-Datei die folgende Zeile hinzu:azure-functions==1.18.0b3
Installieren Sie im Terminal die Python-Bibliothek.
pip install -r .\requirements.txt
Ändern Sie Ihre Datei
local.setting.json
mit der folgenden Konfiguration:"PYTHON_ISOLATE_WORKER_DEPENDENCIES":1