Dapr-Erweiterung für Azure Functions
Die Dapr-Erweiterung für Azure Functions umfasst mehrere Tools und Dienste, mit denen Entwickler*innen Azure Functions problemlos mit der Dapr-Plattform (Distributed Application Runtime) integrieren können.
Azure Functions ist ein ereignisgesteuerter Computedienst, der mehrere Trigger und Bindungen bereitstellt, um das Herstellen von Verbindungen mit anderen Azure-Diensten zu vereinfachen. Dapr bietet eine Reihe von Bausteinen und bewährten Methoden zum Erstellen verteilter Anwendungen, einschließlich Microservices, Zustandsverwaltung, Pub/Sub-Messaging und mehr.
Mit der Integration von Dapr und Functions können Sie Funktionen erstellen, die auf Ereignisse von Dapr oder externen Systemen reagieren.
Aktion | Direction | Typ |
---|---|---|
Trigger für eine Dapr-Eingabebindung | Nicht zutreffend | daprBindingTrigger |
Trigger bei einem Dapr-Dienstaufruf | Nicht zutreffend | daprServiceInvocationTrigger |
Trigger bei einem Dapr-Themenabonnement | Nicht zutreffend | daprTopicTrigger |
Ruft den Dapr-Zustand für eine Ausführung ab | In | daprState |
Ruft Dapr-Geheimnisse für eine Ausführung ab | In | daprSecret |
Speichert einen Wert in einem Dapr-Zustand | aus | daprState |
Ruft eine andere Dapr-App auf | aus | daprInvoke |
Veröffentlicht eine Nachricht in einem Dapr-Thema | aus | daprPublish |
Sendet einen Wert an eine Dapr-Ausgabebindung | aus | daprBinding |
Installieren der Erweiterung
Das NuGet-Erweiterungspaket, das Sie installieren, hängt vom C#-Modus (In-Process oder isolierter Workerprozess) ab, den Sie in Ihrer Funktions-App verwenden:
Diese Erweiterungsversion wird verfügbar, wenn Sie das NuGet-Paket Version 1.0.0 installieren.
Verwenden der .NET-CLI:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr
Installieren des Pakets
Sie können die Erweiterung hinzufügen, indem Sie den folgenden Code in Ihrer host.json
-Datei hinzufügen oder ersetzen:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Dapr-Aktivierung
Sie können Dapr mithilfe verschiedener [Argumente und Anmerkungen][dapr-args] auf Grundlage des Laufzeitkontexts konfigurieren. Sie können Dapr für Azure Functions über zwei Kanäle konfigurieren:
- „Infrastructure-as-Code“Vorlagen (Infrastruktur als Code, IaC) wie in Bicep- oder Azure Resource Manager (ARM)-Vorlagen
- Das Azure-Portal
Geben Sie beim Verwenden einer IaC-Vorlage die folgenden Argumente im properties
-Abschnitt der Container-App-Ressourcendefinition an.
DaprConfig: {
enabled: true
appId: '${envResourceNamePrefix}-funcapp'
appPort: 3001
httpReadBufferSize: ''
httpMaxRequestSize: ''
logLevel: ''
enableApiLogging: true
}
Die oben genannten Dapr-Konfigurationswerte gelten als Änderungen des Anwendungsbereichs (application-scope). Wenn Sie eine Container-App im Multirevisionsmodus ausführen, führen Änderungen an diesen Einstellungen nicht zum Erstellen einer neuen Revision. Stattdessen werden alle vorhandenen Revisionen neu gestartet, um sicherzustellen, dass sie mit den aktuellsten Werten konfiguriert sind.
Navigieren Sie beim Konfigurieren von Dapr über das Azure-Portal zu Ihrer Funktions-App, und wählen Sie im Menü auf der linken Seite Dapr aus:
Dapr-Ports und -Listener
Wenn Sie eine Funktion aus Dapr auslösen, macht die Erweiterung den Port 3001
automatisch verfügbar, um auf eingehende Anforderungen vom Dapr-Sidecar zu lauschen.
Wichtig
Port 3001
wird nur verfügbar gemacht und überwacht, wenn in der Funktions-App ein Dapr-Trigger definiert ist. Bei Verwendung von Dapr wartet das Sidecar auf den Empfang einer Antwort vom definierten Port, bevor die Instanziierung abgeschlossen wird. Definieren Sie die Anmerkung dapr.io/port
oder --app-port
nur, wenn Sie einen Trigger haben. Andernfalls kann Ihre Anwendung vom Dapr-Sidecar gesperrt werden.
Wenn Sie nur Ein- und Ausgabebindungen verwenden, muss der Port 3001
nicht verfügbar gemacht oder definiert werden.
Wenn Azure Functions standardmäßig versucht, mit Dapr zu kommunizieren, ruft es Dapr über den aus der Umgebungsvariable DAPR_HTTP_PORT
aufgelösten Port auf. Wenn diese Variable NULL ist, wird standardmäßig Port 3500
verwendet.
Sie können die von Ein- und Ausgabebindungen verwendete Dapr-Adresse überschreiben, indem Sie die DaprAddress
-Eigenschaft in function.json
für die Bindung (oder das Attribut) festlegen. Standardmäßig wird http://localhost:{DAPR_HTTP_PORT}
verwendet.
Die Funktions-App macht weiterhin einen anderen Port und Endpunkt für Komponenten wie HTTP-Trigger verfügbar, die lokal standardmäßig auf 7071
, in einem Container aber standardmäßig auf 80
festgelegt werden.
Bindungstypen
Die für .NET unterstützten Bindungstypen hängen sowohl von der Erweiterungsversion als auch von dem C#-Ausführungsmodus ab, der einer der folgenden sein kann:
Eine In-Process-Klassenbibliothek ist eine kompilierte C#-Funktion, die im gleichen Prozess wie die Functions-Runtime ausgeführt wird.
Die Dapr-Erweiterung unterstützt Parametertypen gemäß der folgenden Tabelle.
Bindung | Parametertypen |
---|---|
Dapr-Trigger | daprBindingTrigger daprServiceInvocationTrigger daprTopicTrigger |
Dapr-Eingabe | daprState daprSecret |
Dapr-Ausgabe | daprState daprInvoke daprPublish daprBinding |
Beispiele für die Verwendung dieser Typen finden Sie im GitHub-Repository für die jeweilige Erweiterung.
Testen der Dapr-Erweiterung für Azure Functions
Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions über die bereitgestellten Beispiele verwenden.
Beispiele | Beschreibung |
---|---|
Schnellstart | Erste Schritte mit der Dapr-Pub/Sub-Bindung und HttpTrigger . |
Dapr Kafka | Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions mit der Dapr-Komponente für Kafka-Bindungen verwenden. |
.NET: In-Process | Erfahren Sie, wie Sie das In-Process-Modell von Azure Functions verwenden, um mehrere Dapr-Komponenten mit .NET zu integrieren, z. B. Dienstaufrufe, Pub/Sub, Bindungen und Zustandsverwaltung. |
.NET: isoliert | Verwenden Sie für die Integration von Dapr-Komponenten mit .NET das OOP-Ausführungsmodell (Out-Of-Proc) von Azure Functions. |
Testen der Dapr-Erweiterung für Azure Functions
Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions über die bereitgestellten Beispiele verwenden.
Beispiele | Beschreibung |
---|---|
Java-Funktionen | Erfahren Sie, wie Sie die Dapr-Erweiterung von Azure Functions mit Java verwenden. |
Testen der Dapr-Erweiterung für Azure Functions
Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions über die bereitgestellten Beispiele verwenden.
Beispiele | Beschreibung |
---|---|
Schnellstart | Erste Schritte mit der Dapr-Pub/Sub-Bindung und HttpTrigger . |
Dapr Kafka | Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions mit der Dapr-Komponente für Kafka-Bindungen verwenden. |
JavaScript | Führen Sie eine JavaScript-Dapr-Funktionsanwendung aus, und integrieren Sie sie über Azure Functions mit Dapr-Dienstaufrufen, Pub/Sub, Bindungen und Zustandsverwaltung. |
Testen der Dapr-Erweiterung für Azure Functions
Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions über die bereitgestellten Beispiele verwenden.
Beispiele | Beschreibung |
---|---|
PowerShell-Funktionen | Erfahren Sie, wie Sie die Dapr-Erweiterung von Azure Functions mit PowerShell verwenden. |
Testen der Dapr-Erweiterung für Azure Functions
Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions über die bereitgestellten Beispiele verwenden.
Beispiele | Beschreibung |
---|---|
Dapr Kafka | Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure Functions mit der Dapr-Komponente für Kafka-Bindungen verwenden. |
Python v1 | Führen Sie eine Python-Anwendung mit Dapr aus, und verwenden Sie das Programmiermodell Azure Functions Python v1 für die Integration mit Dapr-Komponenten. |
Python v2 | Starten Sie eine Dapr-Anwendung mit dem Azure Functions Python v2-Programmiermodell für die Integration mit Dapr-Komponenten. |
Problembehandlung
Dieser Abschnitt beschreibt, wie eine Behandlung vorgenommen werden kann, wenn Probleme bei der Verwendung der Dapr-Erweiterung für Azure Functions auftreten.
Stellen Sie sicher, dass Dapr in Ihrer Umgebung aktiviert ist
Wenn Sie Dapr-Bindungen und -Auslöser in Azure Functions verwenden und Dapr in Ihrer Umgebung nicht aktiviert ist, erhalten Sie unter Umständen die Fehlermeldung: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.
Um Dapr in Ihrer Umgebung zu aktivieren:
Falls Ihre Azure-Function in Azure Container Apps bereitgestellt wurde, erfahren Sie mehr unter Dapr-Aktivierungsinstruktionen für die Dapr-Erweiterung für Azure Functions.
Stellen Sie sicher, dass Ihre Bereitstellung der YAML-Konfiguration über die folgenden Anmerkungen verfügt, falls Ihre Azure Function in Kubernetes bereitgestellt wurde:
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>" ...
Sollten Sie Ihre Azure Function lokal ausführen, führen Sie den folgenden Befehl aus, um sicherzugehen, dass Sie die Function App mit Dapr ausführen:
dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start
Verifizieren Sie den App-Portwert in der Dapr-Konfiguration
Die Dapr-Erweiterung für Azure Functions startet standardmäßig einen HTTP-Server auf Port 3001
. Sie können diesen Port mithilfe der DAPR_APP_PORT
Umgebungsvariable konfigurieren.
Wenn Sie den falschen App-Portwert angeben während Sie eine Azure Functions-App ausführen, erhalten Sie möglicherweise die Fehlermeldung: 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).
Um diese Fehlermeldung zu lösen:
In den Dapr-Einstellungen Ihrer Container-App:
Wenn Sie einen Dapr-Trigger in Ihrem Code verwenden, stellen Sie sicher, dass der App-Port auf
3001
oder auf den Wert derDAPR_APP_PORT
-Umgebungsvariable festgelegt ist.Sollten Sie keinen Dapr-Trigger in Ihrem Code verwenden, stellen Sie sicher, dass der App-Port nicht festgelegt ist. Er sollte leer sein.
Stellen Sie sicher, dass Sie den richtigen App-Portwert in der Dapr-Konfiguration verwenden.
Geben Sie den App-Port in Bicep an, wenn Sie Azure Container Apps verwenden:
DaprConfig: { ... appPort: <DAPR_APP_PORT> ... }
Legen Sie die
dapr.io/app-port
-Anmerkung fest, wenn Sie eine Kubernetes-Umgebung verwenden:annotations: ... dapr.io/app-port: "<DAPR_APP_PORT>" ...
Stellen Sie sicher, dass Sie
--app-port
festlegen, wenn Sie lokal entwickeln und die Funktions-App mit Dapr ausführen:dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start
Nächste Schritte
Erfahren Sie mehr über Dapr.