Share via


Dapr-extensie voor Azure Functions

De Dapr-extensie voor Azure Functions is een set hulpprogramma's en services waarmee ontwikkelaars Azure Functions eenvoudig kunnen integreren met het Dapr-platform (Distributed Application Runtime).

Azure Functions is een gebeurtenisgestuurde rekenservice die een set triggers en bindingen biedt om eenvoudig verbinding te maken met andere Azure-services. Dapr biedt een set bouwstenen en aanbevolen procedures voor het bouwen van gedistribueerde toepassingen, waaronder microservices, statusbeheer, pub/subberichten en meer.

Met de integratie tussen Dapr en Functions kunt u functies bouwen die reageren op gebeurtenissen van Dapr of externe systemen.

Actie Richting Type
Trigger op een Dapr-invoerbinding N.v.t. daprBindingTrigger
Activeren bij een aanroep van een Dapr-service N.v.t. daprServiceInvocationTrigger
Activeren voor een Dapr-onderwerpabonnement N.v.t. daprTopicTrigger
Dapr-status ophalen voor een uitvoering In daprState
Dapr-geheimen ophalen voor een uitvoering In daprSecret
Een waarde opslaan in een Dapr-status Out daprState
Een andere Dapr-app aanroepen Out daprInvoke
Een bericht publiceren naar een Dapr-onderwerp Out daprPublish
Een waarde verzenden naar een Dapr-uitvoerbinding Out daprBinding

De extensie installeren

Het NuGet-extensiepakket dat u installeert, is afhankelijk van de C#-modus in-proces of geïsoleerd werkproces dat u gebruikt in uw functie-app:

Deze extensie is beschikbaar door het NuGet-pakket versie 1.0.0 te installeren.

De .NET CLI gebruiken:

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

Bundel installeren

U kunt de extensie toevoegen door de volgende code in uw host.json bestand toe te voegen of te vervangen:

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

Dapr-inschakeling

U kunt Dapr configureren met behulp van verschillende [argumenten en aantekeningen][dapr-args] op basis van de runtimecontext. U kunt Dapr voor Azure Functions configureren via twee kanalen:

  • IaC-sjablonen (Infrastructure as Code), zoals in Bicep- of Arm-sjablonen (Azure Resource Manager)
  • Azure Portal

Wanneer u een IaC-sjabloon gebruikt, geeft u de volgende argumenten op in de properties sectie van de container-app-resourcedefinitie.

DaprConfig: {
  enabled: true
  appId: '${envResourceNamePrefix}-funcapp'
  appPort: 3001
  httpReadBufferSize: ''
  httpMaxRequestSize: ''
  logLevel: ''
  enableApiLogging: true
}

De bovenstaande Dapr-configuratiewaarden worden beschouwd als wijzigingen in het toepassingsbereik. Wanneer u een container-app uitvoert in de modus voor meerdere revisies, worden wijzigingen in deze instellingen geen nieuwe revisie gemaakt. In plaats daarvan worden alle bestaande revisies opnieuw gestart om ervoor te zorgen dat ze zijn geconfigureerd met de meest recente waarden.

Wanneer u Dapr configureert met behulp van Azure Portal, gaat u naar uw functie-app en selecteert u Dapr in het menu aan de linkerkant:

Schermopname waarin wordt gedemonstreerd waar dapr kan worden ingeschakeld voor een functie-app in Azure Portal.

Dapr-poorten en -listeners

Wanneer u een functie activeert vanuit Dapr, maakt de extensie automatisch een poort 3001 beschikbaar om te luisteren naar binnenkomende aanvragen van de Dapr-sidecar.

Belangrijk

Poort 3001 wordt alleen weergegeven en geluisterd als er een Dapr-trigger is gedefinieerd in de functie-app. Wanneer u Dapr gebruikt, wacht de sidecar om een antwoord van de gedefinieerde poort te ontvangen voordat de instantie wordt voltooid. Definieer de dapr.io/port aantekening niet of --app-port tenzij u een trigger hebt. Als u dit doet, kan uw toepassing worden vergrendeld vanuit de Sidecar van Dapr.

Als u alleen invoer- en uitvoerbindingen gebruikt, hoeft de poort 3001 niet beschikbaar te worden gemaakt of gedefinieerd.

Wanneer Azure Functions standaard probeert te communiceren met Dapr, wordt Dapr aanroepen via de poort die is omgezet vanuit de omgevingsvariabele DAPR_HTTP_PORT. Als deze variabele null is, wordt deze standaard ingesteld op poort 3500.

U kunt het Dapr-adres dat wordt gebruikt door invoer- en uitvoerbindingen overschrijven door de DaprAddress eigenschap in de function.json voor de binding (of het kenmerk) in te stellen. Standaard wordt er gebruikgemaakt van http://localhost:{DAPR_HTTP_PORT}.

De functie-app maakt nog steeds een andere poort en eindpunt beschikbaar voor zaken zoals HTTP-triggers, die lokaal worden standaard ingesteld 7071, maar in een container standaard 80ingesteld op .

Bindingstypen

De bindingstypen die worden ondersteund voor .NET zijn afhankelijk van zowel de extensieversie als de C#-uitvoeringsmodus. Dit kan een van de volgende zijn:

Een in-process-klassebibliotheek is een gecompileerde C#-functie die wordt uitgevoerd in hetzelfde proces als de Functions-runtime.

De Dapr-extensie ondersteunt parametertypen volgens de onderstaande tabel.

Binding Parametertypen
Dapr-trigger daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Dapr-invoer daprState
daprSecret
Dapr-uitvoer daprState
daprInvoke
daprPublish
daprBinding

Zie de GitHub-opslagplaats voor de extensie voor voorbeelden die deze typen gebruiken.

De Dapr-extensie voor Azure Functions uitproberen

Meer informatie over het gebruik van de Dapr-extensie voor Azure Functions via de opgegeven voorbeelden.

Voorbeelden Beschrijving
Snelstartgids Ga aan de slag met de Dapr Pub/subbinding en HttpTrigger.
Dapr Kafka Meer informatie over het gebruik van de Dapr-extensie van Azure Functions met het Dapr-onderdeel kafka-bindingen.
In-process .NET Meer informatie over het gebruik van het in-procesmodel van Azure Functions om te integreren met meerdere Dapr-onderdelen in .NET, zoals Service-aanroep, Pub/sub, Bindingen en Statusbeheer.
.NET Isolated Integreer met Dapr-onderdelen in .NET met behulp van het OOP-uitvoeringsmodel (Out-of-Proc) van Azure Functions.

De Dapr-extensie voor Azure Functions uitproberen

Meer informatie over het gebruik van de Dapr-extensie voor Azure Functions via de opgegeven voorbeelden.

Voorbeelden Beschrijving
Java Functions Meer informatie over het gebruik van de Dapr-extensie van Azure Functions met behulp van Java.

De Dapr-extensie voor Azure Functions uitproberen

Meer informatie over het gebruik van de Dapr-extensie voor Azure Functions via de opgegeven voorbeelden.

Voorbeelden Beschrijving
Snelstartgids Ga aan de slag met de Dapr Pub/subbinding en HttpTrigger.
Dapr Kafka Meer informatie over het gebruik van de Dapr-extensie van Azure Functions met het Dapr-onderdeel kafka-bindingen.
JavaScript Voer een JavaScript Dapr-functietoepassing uit en integreer met Dapr Service Invocation, Pub/sub, Bindingen en State Management met behulp van Azure Functions.

De Dapr-extensie voor Azure Functions uitproberen

Meer informatie over het gebruik van de Dapr-extensie voor Azure Functions via de opgegeven voorbeelden.

Voorbeelden Beschrijving
PowerShell Functions Meer informatie over het gebruik van de Azure Functions Dapr-extensie met PowerShell.

De Dapr-extensie voor Azure Functions uitproberen

Meer informatie over het gebruik van de Dapr-extensie voor Azure Functions via de opgegeven voorbeelden.

Voorbeelden Beschrijving
Dapr Kafka Meer informatie over het gebruik van de Dapr-extensie van Azure Functions met het Dapr-onderdeel kafka-bindingen.
Python v1 Voer een Met Dapr gediseerde Python-toepassing uit en gebruik het Azure Functions Python v1-programmeermodel om te integreren met Dapr-onderdelen.
Python v2 Start een Dapr-toepassing met behulp van het Azure Functions Python v2-programmeermodel om te integreren met Dapr-onderdelen.

Probleemoplossing

In deze sectie wordt beschreven hoe u problemen oplost die kunnen optreden bij het gebruik van de Dapr-extensie voor Azure Functions.

Controleren of Dapr is ingeschakeld in uw omgeving

Als u Dapr-bindingen en triggers gebruikt in Azure Functions en Dapr niet is ingeschakeld in uw omgeving, wordt mogelijk het volgende foutbericht weergegeven: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information. Dapr inschakelen in uw omgeving:

  • Als uw Azure-functie is geïmplementeerd in Azure Container Apps, raadpleegt u de dapr-activeringsinstructies voor de Dapr-extensie voor Azure Functions.

  • Als uw Azure-functie is geïmplementeerd in Kubernetes, controleert u of de YAML-configuratie van uw implementatie de volgende aantekeningen bevat:

    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>"
      ...
    
  • Als u uw Azure-functie lokaal uitvoert, voert u de volgende opdracht uit om ervoor te zorgen dat u de functie-app uitvoert met Dapr:

    dapr run --app-id functionapp --app-port <DAPR_APP_PORT>  --components-path <COMPONENTS_PATH> -- func host start 
    

Waarde voor app-poort controleren in dapr-configuratie

De Dapr-extensie voor Azure Functions start standaard een HTTP-server op de poort 3001 . U kunt deze poort configureren met behulp van de DAPR_APP_PORT omgevingsvariabele.

Als u een onjuiste poortwaarde voor de app opgeeft bij het uitvoeren van een Azure Functions-app, wordt mogelijk het volgende foutbericht weergegeven: 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). U kunt dit foutbericht oplossen:

  1. In de Dapr-instellingen van uw container-app:

    • Als u een Dapr-trigger in uw code gebruikt, controleert u of de app-poort is ingesteld 3001 op of op de waarde van de DAPR_APP_PORT omgevingsvariabele.

    • Als u geen Dapr-trigger in uw code gebruikt, controleert u of de app-poort niet is ingesteld. Deze is leeg.

  2. Controleer of u de juiste poortwaarde voor de app opgeeft in de Dapr-configuratie.

    • Als u Azure Container Apps gebruikt, geeft u de app-poort op in Bicep:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Als u een Kubernetes-omgeving gebruikt, stelt u de dapr.io/app-port aantekening in:

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • Als u lokaal ontwikkelt, controleert u of u instelt --app-port bij het uitvoeren van de functie-app met Dapr:

      dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start 
      

Volgende stappen

Meer informatie over Dapr.