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:
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 80
ingesteld 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:
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 deDAPR_APP_PORT
omgevingsvariabele.Als u geen Dapr-trigger in uw code gebruikt, controleert u of de app-poort niet is ingesteld. Deze is leeg.
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