Dapr-Erweiterung 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.
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 Erweiterung wird verfügbar, wenn Sie das NuGet-Paket (Version 0.17.0-preview01) installieren.
Verwenden der .NET-CLI:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr --prerelease
Installieren des Pakets
Sie können die Vorschauversion der 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.Preview",
"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
In diesem Abschnitt wird beschrieben, wie Sie Probleme beheben können, die bei Verwendung der Dapr-Erweiterung für Azure-Funktionen auftreten können.
Sicherstellen, dass Dapr in Ihrer Umgebung aktiviert ist
Wenn Sie Dapr-Bindungen und Trigger in Azure-Funktionen verwenden und Dapr in Ihrer Umgebung nicht aktiviert ist, erhalten Sie möglicherweise die Fehlermeldung: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information.
So aktivieren Sie Dapr in Ihrer Umgebung:
Wenn Ihre Azure-Funktion in Azure-Container-Apps bereitgestellt wird, lesen Sie die Dapr-Aktivierungsanweisungen für die Dapr-Erweiterung für Azure Functions.
Wenn Ihre Azure-Funktion in Kubernetes bereitgestellt wird, stellen Sie sicher, dass die YAML-Konfiguration Ihrer Bereitstellung die folgenden Anmerkungen enthält:
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>" ...
Wenn Sie Ihre Azure-Funktion lokal ausführen, führen Sie den folgenden Befehl aus, um sicherzustellen, dass Sie die Funktions-App mit Dapr ausführen:
dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start
Überprüfen des App-Portwerts in der Dapr-Konfiguration
Die Dapr-Erweiterung für Azure Functions startet standardmäßig einen HTTP-Server am Port 3001
. Sie können diesen Port mithilfe der DAPR_APP_PORT
Umgebungsvariable konfigurieren.
Wenn Sie beim Ausführen einer Azure Functions-App einen falschen App-Portwert angeben, wird möglicherweise die Fehlermeldung angezeigt: 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).
So beheben Sie diese Fehlermeldung:
In den Dapr-Einstellungen Ihrer Container-App:
Wenn Sie einen Dapr-Trigger in Ihrem Code verwenden, vergewissern Sie sich, dass der App-Port auf
3001
den Wert derDAPR_APP_PORT
Umgebungsvariable festgelegt oder auf diesen festgelegt ist.Wenn Sie keinen Dapr-Trigger in Ihrem Code verwenden, vergewissern Sie sich, dass der App-Port nicht festgelegt ist. Er sollte leer sein.
Stellen Sie sicher, dass Sie den richtigen App-Portwert in der Dapr-Konfiguration angeben.
Wenn Sie Azure Container-Apps verwenden, geben Sie den App-Port in Bicep an:
DaprConfig: { ... appPort: <DAPR_APP_PORT> ... }
Wenn Sie eine Kubernetes-Umgebung verwenden, legen Sie die
dapr.io/app-port
Anmerkung fest:annotations: ... dapr.io/app-port: "<DAPR_APP_PORT>" ...
Wenn Sie lokal entwickeln, stellen Sie sicher, dass Sie beim Ausführen der Funktions-App mit Dapr folgendes festlegen
--app-port
: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.