Dela via


Dapr-tillägg för Azure Functions

Dapr-tillägget för Azure Functions är en uppsättning verktyg och tjänster som gör det möjligt för utvecklare att enkelt integrera Azure Functions med dapr-plattformen (Distributed Application Runtime).

Azure Functions är en händelsedriven beräkningstjänst som tillhandahåller en uppsättning utlösare och bindningar för att enkelt ansluta till andra Azure-tjänster. Dapr tillhandahåller en uppsättning byggstenar och metodtips för att skapa distribuerade program, inklusive mikrotjänster, tillståndshantering, pub-/undermeddelanden med mera.

Med integreringen mellan Dapr och Functions kan du skapa funktioner som reagerar på händelser från Dapr eller externa system.

Åtgärd Riktning Typ
Utlösare för en Dapr-indatabindning Ej tillämpligt daprBindingTrigger
Utlösare för ett anrop till En Dapr-tjänst Ej tillämpligt daprServiceInvocationTrigger
Utlösare för en Dapr-ämnesprenumeration Ej tillämpligt daprTopicTrigger
Hämta i Dapr-tillstånd för en körning I daprState
Hämta Dapr-hemligheter för en körning I daprSecret
Spara ett värde i ett Dapr-tillstånd Ut daprState
Anropa en annan Dapr-app Ut daprInvoke
Publicera ett meddelande till ett Dapr-ämne Ut daprPublish
Skicka ett värde till en Dapr-utdatabindning Ut daprBinding

Installera tillägget

Vilket NuGet-tilläggspaket som du installerar beror på den processbaserade eller isolerade arbetsprocessen i C#-läget som du använder i funktionsappen:

Det här tillägget är tillgängligt genom att installera NuGet-paketet version 1.0.0.

Använda .NET CLI:

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

Installera paket

Du kan lägga till tillägget genom att lägga till eller ersätta följande kod i host.json filen:

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

Dapr-aktivering

Du kan konfigurera Dapr med hjälp av olika [argument och anteckningar][dapr-args] baserat på körningskontexten. Du kan konfigurera Dapr för Azure Functions via två kanaler:

  • IaC-mallar (Infrastruktur som kod) som i Bicep- eller Azure Resource Manager-mallar (ARM)
  • Azure-portalen

När du använder en IaC-mall anger du följande argument i properties avsnittet i resursdefinitionen för containerappen.

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

Ovanstående Dapr-konfigurationsvärden betraktas som ändringar i programomfattningen. När du kör en containerapp i läget för flera revisioner kommer ändringar i dessa inställningar inte att skapa någon ny revision. I stället startas alla befintliga revisioner om för att säkerställa att de är konfigurerade med de senaste värdena.

När du konfigurerar Dapr med Hjälp av Azure-portalen går du till funktionsappen och väljer Dapr på menyn till vänster:

Skärmbild som visar var du hittar Dapr-aktivering för en funktionsapp i Azure-portalen.

Dapr-portar och lyssnare

När du utlöser en funktion från Dapr exponerar tillägget porten 3001 automatiskt för att lyssna på inkommande begäranden från Dapr-sidovagnen.

Viktigt!

Porten 3001 exponeras och lyssnas bara på om en Dapr-utlösare definieras i funktionsappen. När du använder Dapr väntar sidovagnen på att få ett svar från den definierade porten innan instansieringen slutförs. Definiera inte anteckningen dapr.io/port eller --app-port såvida du inte har en utlösare. Om du gör det kan du låsa programmet från Dapr-sidovagnen.

Om du bara använder indata- och utdatabindningar behöver porten 3001 inte exponeras eller definieras.

När Azure Functions som standard försöker kommunicera med Dapr anropas Dapr via porten som matchas från miljövariabeln DAPR_HTTP_PORT. Om variabeln är null är den som standard port 3500.

Du kan åsidosätta Dapr-adressen som används av indata- och utdatabindningar genom att ange DaprAddress egenskapen i function.json för bindningen (eller attributet). Som standard använder http://localhost:{DAPR_HTTP_PORT}den .

Funktionsappen exponerar fortfarande en annan port och slutpunkt för saker som HTTP-utlösare, som lokalt standardvärdet 7071är , men i en container, är standardvärdet 80.

Bindningstyper

Vilka bindningstyper som stöds för .NET beror på både tilläggsversionen och C#-körningsläget, vilket kan vara något av följande:

Ett kursbibliotek i processen är en kompilerad C#-funktion som körs i samma process som Functions-körningen.

Dapr-tillägget stöder parametertyper enligt tabellen nedan.

Bindning Parametertyper
Dapr-utlösare daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
Dapr-indata daprState
daprSecret
Dapr-utdata daprState
daprInvoke
daprPublish
daprBinding

Exempel som använder dessa typer finns i GitHub-lagringsplatsen för tillägget.

Prova Dapr-tillägget för Azure Functions

Lär dig hur du använder Dapr-tillägget för Azure Functions via de angivna exemplen.

Exempel beskrivning
Snabbstart Kom igång med Dapr Pub/sub-bindningen och HttpTrigger.
Dapr Kafka Lär dig hur du använder Azure Functions Dapr-tillägget med Dapr-komponenten Kafka-bindningar.
.NET i processen Lär dig hur du använder en processmodell i Azure Functions för att integrera med flera Dapr-komponenter i .NET, till exempel Tjänstanrop, Pub/sub, Bindningar och Tillståndshantering.
.NET Isolerad Integrera med Dapr-komponenter i .NET med hjälp av OOP-körningsmodellen (Azure Functions out-of-proc).

Prova Dapr-tillägget för Azure Functions

Lär dig hur du använder Dapr-tillägget för Azure Functions via de angivna exemplen.

Exempel beskrivning
Java Functions Lär dig hur du använder Azure Functions Dapr-tillägget med Java.

Prova Dapr-tillägget för Azure Functions

Lär dig hur du använder Dapr-tillägget för Azure Functions via de angivna exemplen.

Exempel beskrivning
Snabbstart Kom igång med Dapr Pub/sub-bindningen och HttpTrigger.
Dapr Kafka Lär dig hur du använder Azure Functions Dapr-tillägget med Dapr-komponenten Kafka-bindningar.
JavaScript Kör ett JavaScript Dapr-funktionsprogram och integrera med Dapr Service Invocation, Pub/sub, Bindings och State Management med hjälp av Azure Functions.

Prova Dapr-tillägget för Azure Functions

Lär dig hur du använder Dapr-tillägget för Azure Functions via de angivna exemplen.

Exempel beskrivning
PowerShell-funktioner Lär dig hur du använder Azure Functions Dapr-tillägget med PowerShell.

Prova Dapr-tillägget för Azure Functions

Lär dig hur du använder Dapr-tillägget för Azure Functions via de angivna exemplen.

Exempel beskrivning
Dapr Kafka Lär dig hur du använder Azure Functions Dapr-tillägget med Dapr-komponenten Kafka-bindningar.
Python v1 Kör ett Dapr-ized Python-program och använd programmeringsmodellen Azure Functions Python v1 för att integrera med Dapr-komponenter.
Python v2 Starta ett Dapr-program med programmeringsmodellen Azure Functions Python v2 för att integrera med Dapr-komponenter.

Felsökning

I det här avsnittet beskrivs hur du felsöker problem som kan uppstå när du använder Dapr-tillägget för Azure Functions.

Kontrollera att Dapr är aktiverat i din miljö

Om du använder Dapr-bindningar och utlösare i Azure Functions och Dapr inte är aktiverat i din miljö kan du få felmeddelandet: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information. Aktivera Dapr i din miljö:

  • Om din Azure-funktion har distribuerats i Azure Container Apps kan du läsa Dapr-aktiveringsinstruktioner för Dapr-tillägget för Azure Functions.

  • Om din Azure-funktion har distribuerats i Kubernetes kontrollerar du att YAML-konfigurationen för din distribution har följande anteckningar:

    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>"
      ...
    
  • Om du kör azure-funktionen lokalt kör du följande kommando för att se till att du kör funktionsappen med Dapr:

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

Verifiera appportvärdet i Dapr-konfigurationen

Dapr-tillägget för Azure Functions startar som standard en HTTP-server på porten 3001 . Du kan konfigurera den här porten med hjälp av DAPR_APP_PORT miljövariabeln.

Om du anger ett felaktigt appportvärde när du kör en Azure Functions-app kan du få felmeddelandet: 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). Så här löser du det här felmeddelandet:

  1. I dapr-inställningarna för containerappen:

    • Om du använder en Dapr-utlösare i koden kontrollerar du att appporten är inställd på 3001 eller värdet för DAPR_APP_PORT miljövariabeln.

    • Om du inte använder en Dapr-utlösare i koden kontrollerar du att appporten inte har angetts. Den ska vara tom.

  2. Kontrollera att du anger rätt appportvärde i Dapr-konfigurationen.

    • Om du använder Azure Container Apps anger du appporten i Bicep:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • Om du använder en Kubernetes-miljö anger du kommentaren dapr.io/app-port :

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • Om du utvecklar lokalt kontrollerar du att du anger --app-port när du kör funktionsappen med Dapr:

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

Nästa steg

Läs mer om Dapr.