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:

Ein Screenshot, der darstellt, wo die Dapr-Aktivierung für eine Funktions-App im Azure-Portal gefunden werden kann.

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:

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

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