Teilen über


Dapr-Erweiterung für Azure-Funktionen

Die Dapr-Erweiterung für Azure-Funktionen ist eine Reihe von Tools und Diensten, mit denen Entwickler Azure-Funktionen problemlos in die Dapr-Plattform (Distributed Application Runtime) integrieren können.

Azure Functions ist ein ereignisgesteuerter Computedienst, der eine Reihe von Triggern und Bindungen bereitstellt, um problemlos eine Verbindung mit anderen Azure-Diensten herzustellen. Dapr bietet eine Reihe von Bausteinen und bewährten Methoden zum Erstellen verteilter Anwendungen, einschließlich Microservices, Statusverwaltung, Pub/Sub Messaging und mehr.

Mit der Integration zwischen Dapr und Funktionen können Sie Funktionen erstellen, die auf Ereignisse von Dapr oder externen Systemen reagieren.

Maßnahme Richtung Typ
Trigger für eine Dapr-Eingabebindung N/A daprBindingTrigger
Auslösen eines Aufrufs eines Dapr-Diensts N/A daprServiceInvocationTrigger
Auslösen eines Dapr-Themenabonnements N/A daprTopicTrigger
Abrufen des Dapr-Zustands für eine Ausführung In daprState
Abrufen von geheimen Dapr-Schlüsseln für eine Ausführung In daprSecret
Speichern eines Werts in einem Dapr-Zustand Out daprState
Aufrufen einer anderen Dapr-App Out daprInvoke
Veröffentlichen einer Nachricht in einem Dapr-Thema Out daprPublish
Senden eines Werts an eine Dapr-Ausgabebindung Out daprBinding

Installieren der Erweiterung

Das zu installierende NuGet-Erweiterungspaket hängt vom C# -Modus im Prozess- oder isolierten Arbeitsprozess ab, den Sie in Ihrer Funktions-App verwenden:

Diese Erweiterung ist verfügbar, indem Sie das NuGet-Paket, Version 1.0.0, installieren.

Verwenden der .NET CLI:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr

Installieren des Bundles

Um diese Bindungserweiterung in Ihrer App verwenden zu können, stellen Sie sicher, dass die host.json Datei im Stammverzeichnis Ihres Projekts diesen extensionBundle Verweis enthält:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
}

In diesem Beispiel weist der version Wert des [4.0.0, 5.0.0) Funktionenhosts an, eine Bundleversion zu verwenden, die mindestens 4.0.0 aber kleiner ist als 5.0.0, die alle potenziellen Versionen von 4.x enthält. Diese Notation verwaltet Ihre App effektiv auf der neuesten verfügbaren Nebenversion des v4.x-Erweiterungspakets.

Wenn möglich, sollten Sie die neueste Hauptversion des Erweiterungspakets verwenden und der Laufzeit erlauben, die neueste Nebenversion automatisch zu verwalten. Sie können den Inhalt des neuesten Bundles auf der Releaseseite der Erweiterungspakete anzeigen. Weitere Informationen finden Sie unter Azure Functions-Erweiterungspakete.

Dapr-Aktivierung

Sie können Dapr mithilfe verschiedener [Argumente und Anmerkungen][dapr-args] basierend auf dem Laufzeitkontext konfigurieren. Sie können Dapr für Azure-Funktionen über zwei Kanäle konfigurieren:

  • Infrastructure as Code (IaC)-Vorlagen, wie in Bicep- oder Azure Resource Manager(ARM)-Vorlagen
  • Azure-Portal

Wenn Sie eine IaC-Vorlage verwenden, geben Sie 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 Anwendungsbereichsänderungen. Wenn Sie eine Container-App im Modus mit mehreren Überarbeitungen ausführen, werden änderungen an diesen Einstellungen keine neue Revision erstellen. Stattdessen werden alle vorhandenen Überarbeitungen neu gestartet, um sicherzustellen, dass sie mit den meisten up-to-date-Werten konfiguriert sind.

Navigieren Sie beim Konfigurieren von Dapr über das Azure-Portal zu Ihrer Funktions-App, und wählen Sie "Dapr " im linken Menü aus:

Screenshot, der zeigt, wo sie die Dapr-Aktivierung für eine Funktions-App im Azure-Portal finden.

Dapr-Ports und Listener

Wenn Sie eine Funktion von Dapr auslösen, macht die Erweiterung den Port 3001 automatisch verfügbar, um eingehende Anforderungen vom Dapr-Sidecar abzuhören.

Von Bedeutung

Port 3001 wird nur verfügbar gemacht und überwacht, wenn ein Dapr-Trigger in der Funktions-App 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 dapr.io/port Anmerkung nicht, oder --app-port es sei denn, Sie haben einen Trigger. Auf diese Weise kann Ihre Anwendung vom Dapr-Sidecar gesperrt werden.

Wenn Sie nur Eingabe- 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 sie Dapr über den von der Umgebungsvariablen DAPR_HTTP_PORTaufgelösten Port auf. Wenn diese Variable null ist, wird standardmäßig portiert 3500.

Sie können die von Eingabe- und Ausgabebindungen verwendete Dapr-Adresse überschreiben, indem Sie die DaprAddress Eigenschaft für function.json die Bindung (oder das Attribut) festlegen. Standardmäßig wird es verwendet http://localhost:{DAPR_HTTP_PORT}.

Die Funktions-App macht weiterhin einen anderen Port und Endpunkt für Dinge wie HTTP-Trigger verfügbar, die lokal standardmäßig auf 7071, aber in einem Container standardmäßig verwendet werden 80.

Bindungstypen

Die für .NET unterstützten Bindungstypen hängen sowohl vom Erweiterungsversions- als auch vom C#-Ausführungsmodus ab. Dies kann eine der folgenden Sein:

Eine In-Process-Klassenbibliothek ist eine kompilierte C#-Funktion, die im gleichen Prozess wie die Funktionslaufzeit ausgeführt wird.

Die Dapr-Erweiterung unterstützt Parametertypen gemäß der folgenden Tabelle.

Binding Parametertypen
Dapr-Trigger daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Dapr-Eingabe daprState
daprSecret
Dapr-Ausgabe daprState
daprInvoke
daprPublish
daprBinding

Beispiele für diese Typen finden Sie im GitHub-Repository für die Erweiterung.

Testen der Dapr-Erweiterung für Azure-Funktionen

Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure-Funktionen über die bereitgestellten Beispiele verwenden.

Beispiele Description
Schnellstart Erste Schritte mit der Dapr Pub/Sub-Bindung und HttpTrigger.
Dapr Kafka Erfahren Sie, wie Sie die Azure Functions Dapr-Erweiterung mit der Kafka-Bindungskomponente Dapr verwenden.
.NET In-Process Erfahren Sie, wie Sie azure Functions in-Process-Modell verwenden, um sie in mehrere Dapr-Komponenten in .NET zu integrieren, z. B. Dienstaufrufe, Pub/Sub, Bindungen und Zustandsverwaltung.
.NET Isoliert Integration mit Dapr-Komponenten in .NET mithilfe des Out-of-Proc(OOP)-Ausführungsmodells von Azure Functions.

Testen der Dapr-Erweiterung für Azure-Funktionen

Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure-Funktionen über die bereitgestellten Beispiele verwenden.

Beispiele Description
Java-Funktionen Erfahren Sie, wie Sie die Azure Functions Dapr-Erweiterung mit Java verwenden.

Testen der Dapr-Erweiterung für Azure-Funktionen

Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure-Funktionen über die bereitgestellten Beispiele verwenden.

Beispiele Description
Schnellstart Erste Schritte mit der Dapr Pub/Sub-Bindung und HttpTrigger.
Dapr Kafka Erfahren Sie, wie Sie die Azure Functions Dapr-Erweiterung mit der Kafka-Bindungskomponente Dapr verwenden.
JavaScript Führen Sie eine JavaScript Dapr-Funktionsanwendung aus, und integrieren Sie sie mit Dapr Service Invocation, Pub/sub, Bindings und State Management mithilfe von Azure Functions.

Testen der Dapr-Erweiterung für Azure-Funktionen

Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure-Funktionen über die bereitgestellten Beispiele verwenden.

Beispiele Description
PowerShell-Funktionen Erfahren Sie, wie Sie die Azure Functions Dapr-Erweiterung mit PowerShell verwenden.

Testen der Dapr-Erweiterung für Azure-Funktionen

Erfahren Sie, wie Sie die Dapr-Erweiterung für Azure-Funktionen über die bereitgestellten Beispiele verwenden.

Beispiele Description
Dapr Kafka Erfahren Sie, wie Sie die Azure Functions Dapr-Erweiterung mit der Kafka-Bindungskomponente Dapr verwenden.
Python v1 Führen Sie eine dapr-isierte Python-Anwendung aus, und verwenden Sie das Programmiermodell Azure Functions Python v1, um in Dapr-Komponenten zu integrieren.
Python v2 Starten Sie eine Dapr-Anwendung mit dem Azure Functions Python v2-Programmiermodell, um in Dapr-Komponenten zu integrieren.

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.