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 Direction Typ
Utlösare för en Dapr-indatabindning N/A daprBindingTrigger
Utlösare för ett anrop till En Dapr-tjänst N/A daprServiceInvocationTrigger
Utlösare för en Dapr-ämnesprenumeration N/A daprTopicTrigger
Hämta i Dapr-tillstånd för en körning In daprState
Hämta Dapr-hemligheter för en körning In daprSecret
Spara ett värde i ett Dapr-tillstånd Out daprState
Anropa en annan Dapr-app Out daprInvoke
Publicera ett meddelande till ett Dapr-ämne Out daprPublish
Skicka ett värde till en Dapr-utdatabindning Out daprBinding

Installera tillägg

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

För att kunna använda det här bindningstillägget i din app kontrollerar du att denhost.json filen i projektets rot innehåller den här extensionBundle referensen:

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

I det här exemplet version instruerar värdet [4.0.0, 5.0.0) för Functions-värden att använda en paketversion som är minst 4.0.0 men mindre än 5.0.0, som innehåller alla potentiella versioner av 4.x. Den här notationen underhåller appen på den senaste tillgängliga delversionen av v4.x-tilläggspaketet.

När det är möjligt bör du använda den senaste huvudversionen av tilläggspaketet och låta körningen automatiskt behålla den senaste delversionen. Du kan visa innehållet i det senaste paketet på versionssidan för tilläggspaket. Mer information finns i Azure Functions-tilläggspaket.

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 mest up-to-date-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.

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

Samples Description
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.

Samples Description
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.

Samples Description
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.

Samples Description
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.

Samples Description
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 borde 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.