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:

Screenshot demonstrating where to find Dapr enablement for a Function App in the Azure portal.

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-portnur, 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:

  1. 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 der DAPR_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.

  2. 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.