Werken met Azure Functions Core Tools

Met Azure Functions Core Tools kunt u uw functies op uw lokale computer ontwikkelen en testen vanaf de opdrachtprompt of terminal. Uw lokale functies kunnen verbinding maken met live Azure-services en u kunt fouten opsporen in uw functies op uw lokale computer met behulp van de volledige Functions-runtime. U kunt zelfs een functie-app implementeren in uw Azure-abonnement.

Belangrijk

Combineer geen lokale ontwikkeling met portal-ontwikkeling in dezelfde functie-app. Wanneer u functies maakt en publiceert vanuit een lokaal project, moet u niet proberen projectcode in de portal te onderhouden of te wijzigen.

Als u functies op uw lokale computer ontwikkelt en deze publiceert naar Azure met behulp van Core Tools, volgt u deze basisstappen:

Vereisten

Azure Functions Core Tools is momenteel afhankelijk van de Azure CLI of Azure PowerShell voor de authenticatie met uw Azure-account. Dit betekent dat u een van deze hulpprogramma's moet installeren om te kunnen publiceren naar Azure vanuit Azure Functions Core Tools.

Versies van Core Tools

Er zijn vier versies van Azure Functions Core Tools. De versie die u gebruikt, is afhankelijk van uw lokale ontwikkelomgeving, de taalkeuzeen het vereiste ondersteuningsniveau.

Kies hieronder een versietabblad voor meer informatie over elke specifieke versie en voor gedetailleerde installatie-instructies:

Ondersteunt versie 4.x van de Functions-runtime. Deze versie ondersteunt Windows, macOS en Linux en maakt gebruik van platformspecifieke pakketmanagers of npm voor installatie. Dit is de aanbevolen versie van de Functions-runtime en Core Tools.

U kunt slechts één versie van Core Tools installeren op een bepaalde computer. Tenzij anders vermeld, zijn de voorbeelden in dit artikel voor versie 3.x.

Azure Functions Core Tools installeren

Azure Functions Core Tools bevat een versie van dezelfde runtime die wordt Azure Functions runtime die u kunt uitvoeren op uw lokale ontwikkelcomputer. Het bevat ook opdrachten voor het maken van functies, het maken van verbinding met Azure en het implementeren van functieprojecten.

Vanaf versie 2.x wordt Core Tools uitgevoerd op Windows, macOSen Linux.

In de volgende stappen wordt een Windows -installatieprogramma (MSI) gebruikt om Core Tools v4.x te installeren. Zie voor meer informatie over andere installatieprogramma's op basis van pakketten de leesmij Core Tools.

Download het installatieprogramma voor Core Tools en voer het uit op basis van uw versie van Windows:

Versies van Core Tools wijzigen

Wanneer u overstapt op een andere versie van Core Tools, moet u hetzelfde pakketbeheer gebruiken als de oorspronkelijke installatie om over te gaan naar een andere pakketversie. Als u bijvoorbeeld Core Tools versie 2.x hebt geïnstalleerd met behulp van npm, moet u de volgende opdracht gebruiken om een upgrade uit te voeren naar versie 3.x:

npm install -g azure-functions-core-tools@3 --unsafe-perm true

Als u Windows Installer (MSI) hebt gebruikt om Core Tools op Windows te installeren, moet u de oude versie verwijderen uit Programma's toevoegen voordat u een andere versie installeert.

Een lokaal Functions-project maken

Een Functions-projectmap bevat de volgende bestanden en mappen, ongeacht de taal:

Bestandsnaam Description
host.json Zie de host.json-verwijzing voor meer informatie.
local.settings.json Instellingen core tools worden gebruikt bij het lokaal uitvoeren, inclusief app-instellingen. Zie Lokale instellingen voor meer informatie.
.gitignore Hiermee voorkomt u dat het bestand local.settings.json per ongeluk wordt gepubliceerd naar een Git-opslagplaats. Zie Lokale instellingen voor meer informatie
.vscode\extensions.json Instellingen bestand dat wordt gebruikt bij het openen van de projectmap in Visual Studio Code.

Zie voor meer informatie over de map van het Functions-project Azure Functions ontwikkelaarshandleiding.

Voer in het terminalvenster of vanaf een opdrachtprompt de volgende opdracht uit om het project en de lokale Git-opslagplaats te maken:

func init MyFunctionProj

In dit voorbeeld wordt een Functions-project gemaakt in een nieuwe MyFunctionProj map. U wordt gevraagd om een standaardtaal voor uw project te kiezen.

De volgende overwegingen zijn van toepassing op project initialisatie:

  • Als u de optie niet op geeft in de opdracht, wordt u gevraagd --worker-runtime uw taal te kiezen. Zie de naslaginformatie over func init voor meer informatie.

  • Wanneer u geen projectnaam op geeft, wordt de huidige map initialiseren.

  • Als u van plan bent om uw project te publiceren naar een aangepaste Linux-container, gebruikt u de optie om ervoor te zorgen dat er een --dockerfile Dockerfile wordt gegenereerd voor uw project. Zie Een functie in Linux maken met behulp van een aangepaste afbeelding voor meer informatie.

Bepaalde talen kunnen aanvullende overwegingen hebben:

  • Standaard maken versie 2.x en latere versies van de Core Tools functie-app-projecten voor de .NET-runtime als C#-klasseprojecten (.csproj). Versie 3.x biedt ook ondersteuning voor het maken van functies die worden uitgevoerd op .NET 5.0 in een geïsoleerd proces. Deze C#-projecten, die kunnen worden gebruikt met Visual Studio of Visual Studio Code, worden gecompileerd tijdens foutopsporing en bij het publiceren naar Azure.

  • Gebruik de --csx parameter als u lokaal wilt werken met C#-scriptbestanden (.csx). Dit zijn dezelfde bestanden die u krijgt wanneer u functies maakt in de Azure Portal en wanneer u versie 1.x van Core Tools gebruikt. Zie de naslag voor func init voor meer informatie.

Extensies registreren

Vanaf runtime versie 2.x worden Functions-triggers en -bindingen geïmplementeerd als .NET-extensiepakketten (NuGet). Voor gecompileerde C#-projecten verwijst u gewoon naar de NuGet-extensiepakketten voor de specifieke triggers en bindingen die u gebruikt. VOOR HTTP-bindingen en timertriggers zijn geen extensies vereist.

Om de ontwikkelervaring voor niet-C#-projecten te verbeteren, kunt u met Functions verwijzen naar een extensiebundel met versienummer in uw host.json-projectbestand. Extensiebundels maken alle extensies beschikbaar voor uw app en verwijderen de kans op problemen met pakketcompatibiliteit tussen extensies. Extensiebundels verwijderen ook de vereiste voor het installeren van de .NET Core 3.1 SDK en het probleem met het bestand extensions.csproj.

Uitbreidingsbundels is de aanbevolen benadering voor andere functions-projecten dan C#-projecten die aan de voorwaarden voldoen. Voor deze projecten wordt de instelling voor de extensiebundel gegenereerd in het bestand host.json tijdens de initialisatie. Als dit voor u werkt, kunt u deze hele sectie overslaan.

Extensiebundels gebruiken

De eenvoudigste manier om bindingextensies te installeren, is door extensiebundelsin te schakelen. Wanneer u bundels inschakelt, wordt er automatisch een vooraf gedefinieerde set extensiepakketten geïnstalleerd.

Als u extensiebundels wilt inschakelen, opent u het bestand host.json en werkt u de inhoud daarvan zodanig bij dat deze overeenkomt met de volgende code:

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

Indien ondersteund door uw taal, moeten extensiebundels al zijn ingeschakeld nadat u func init aanroept. U moet extensiebundels toevoegen aan host.json voordat u bindingen toevoegt aan het bestand function.json. Zie Register Azure Functions bindingsextensies voor meer informatie.

Extensies expliciet installeren

Er kunnen zich situaties in een non-.NET-project voor doen wanneer u geen extensiebundels kunt gebruiken, bijvoorbeeld wanneer u zich moet richten op een specifieke versie van een extensie die niet in de bundel staat. In deze zeldzame gevallen kunt u Core Tools gebruiken om lokaal de specifieke extensiepakketten te installeren die vereist zijn voor uw project. Zie Extensies expliciet installeren voor meer informatie.

Lokale instellingen

Bij het uitvoeren in een functie-app in Azure worden de instellingen die door uw functies zijn vereist, veilig opgeslagen in app-instellingen. Tijdens lokale ontwikkeling worden deze instellingen in plaats daarvan toegevoegd aan het Values object in local.settings.json-file. In local.settings.jsbestand worden ook instellingen opgeslagen die worden gebruikt door lokale ontwikkelhulpprogramma's.

Omdat de local.settings.jsop geheimen kan bevatten, zoals verbindingsreeksen, moet u deze nooit opslaan in een externe opslagplaats. Zie Bestand met lokale instellingen voor meer informatie over lokale instellingen.

Standaard worden deze instellingen niet automatisch gemigreerd wanneer het project naar Azure wordt gepubliceerd. Gebruik de --publish-local-settings optie bij het publiceren om ervoor te zorgen dat deze instellingen zijn toegevoegd aan de functie-app in Azure. Waarden in de ConnectionStrings sectie worden nooit gepubliceerd.

De instellingen van de functie-app kunnen in uw code ook worden gelezen als omgevingsvariabelen. Raadpleeg het gedeelte Omgevingsvariabelen van deze taalspecifieke referentie-onderwerpen voor meer informatie:

Wanneer er geen geldige connection string is ingesteld voor en de emulator niet wordt gebruikt, wordt het [AzureWebJobsStorage] volgende foutbericht weergegeven:

Ontbrekende waarde voor AzureWebJobsStorage in local.settings.json. Dit is vereist voor alle andere triggers dan HTTP. U kunt 'func azure functionapp fetch-app-settings' uitvoeren of een connection string <functionAppName> in local.settings.json.

Uw opslagverbindingsreeksen op halen

Zelfs wanneer u de Microsoft Azure Storage Emulator voor ontwikkeling gebruikt, kunt u het beste lokaal uitvoeren met een werkelijke opslagverbinding. Ervan uitgaande dat u al een opslagaccount hebt gemaakt,kunt u op een van de connection string een geldige opslagaccount krijgen:

  1. Zoek en [Azure Portal]in de Storage accounts.

    Selecteer Storage accounts in Azure Portal

  2. Selecteer uw opslagaccount, selecteer Toegangssleutels in Instellingen en kopieer vervolgens een van de waarden voor Verbindingsreeks.

    Kopieer connection string van Azure Portal

Een functie maken

Voer de volgende opdracht uit om een functie te maken in een bestaand project:

func new

Wanneer u in versie 3.x/2.x wordt uitgevoerd, wordt u gevraagd om een sjabloon te kiezen in de func new standaardtaal van uw functie-app. Vervolgens wordt u gevraagd een naam voor uw functie te kiezen. In versie 1.x moet u ook de taal kiezen.

U kunt ook de functienaam en sjabloon opgeven in de func new opdracht . In het volgende voorbeeld wordt de --template optie gebruikt om een HTTP-trigger met de naam te MyHttpTrigger maken:

func new --template "Http Trigger" --name MyHttpTrigger

In dit voorbeeld wordt een Queue Storage trigger gemaakt met de naam MyQueueTrigger :

func new --template "Queue Trigger" --name MyQueueTrigger

Zie de opdracht voor meer func new informatie.

Functies lokaal uitvoeren

Als u een Functions-project wilt uitvoeren, moet u de Functions-host uitvoeren vanuit de hoofdmap van uw project. De host schakelt triggers in voor alle functies in het project. De start opdracht is afhankelijk van de taal van uw project.

func start

Notitie

Versie 1.x van de Functions-runtime vereist in plaats daarvan func host start . Zie naslag voor Azure Functions Core Tools meer informatie.

Wanneer de Functions-host wordt gestart, wordt de URL van door HTTP geactiveerde functies uitgevoerd, zoals in het volgende voorbeeld:

Found the following functions:
Host.Functions.MyHttpTrigger

Job host started
Http Function MyHttpTrigger: http://localhost:7071/api/MyHttpTrigger

Belangrijk

Bij lokaal uitvoeren wordt autorisatie niet afgedwongen voor HTTP-eindpunten. Dit betekent dat alle lokale HTTP-aanvragen worden verwerkt als authLevel = "anonymous" . Zie het artikel HTTP-binding voor meer informatie.

Testgegevens doorgeven aan een functie

Als u uw functies lokaal wilt testen, start u de Functions-host en roept u eindpunten aan op de lokale server met behulp van HTTP-aanvragen. Het eindpunt dat u aanroept, is afhankelijk van het type functie.

Notitie

Voorbeelden in dit onderwerp gebruiken het hulpprogramma cURL om HTTP-aanvragen te verzenden vanuit de terminal of een opdrachtprompt. U kunt een hulpprogramma van uw keuze gebruiken om HTTP-aanvragen naar de lokale server te verzenden. Het cURL-hulpprogramma is standaard beschikbaar op Linux-systemen en Windows 10 build 17063 en hoger. Op oudere Windows moet u eerst het cURL-hulpprogramma downloaden en installeren.

Zie Strategies for testing your code in Azure Functions (Strategieën voor het testen van uw code in Azure Functions) voor meer algemene informatie over Azure Functions.

Door HTTP en webhook geactiveerde functies

U roept het volgende eindpunt aan om http- en webhook geactiveerde functies lokaal uit te voeren:

http://localhost:{port}/api/{function_name}

Zorg ervoor dat u dezelfde servernaam en poort gebruikt als waar de Functions-host naar luistert. U ziet dit in de uitvoer die wordt gegenereerd bij het starten van de functiehost. U kunt deze URL aanroepen met behulp van elke HTTP-methode die wordt ondersteund door de trigger.

De volgende cURL-opdracht activeert de quickstart-functie van een GET-aanvraag met de MyHttpTrigger naamparameter die is doorgegeven in de queryreeks.

curl --get http://localhost:7071/api/MyHttpTrigger?name=Azure%20Rocks

Het volgende voorbeeld is dezelfde functie met de naam van een POST-aanvraag die de naam door geeft in de aanvraag body:

curl --request POST http://localhost:7071/api/MyHttpTrigger --data '{"name":"Azure Rocks"}'

U kunt GET-aanvragen indienen vanuit een browser die gegevens door geven in de queryreeks. Voor alle andere HTTP-methoden moet u cURL, Fiddler, Postman of een vergelijkbaar HTTP-testprogramma gebruiken dat POST-aanvragen ondersteunt.

Niet door HTTP geactiveerde functies

Voor alle andere functies dan HTTP- en Event Grid-triggers kunt u uw functies lokaal testen met REST door een speciaal eindpunt aan te roepen dat een beheer-eindpunt wordt genoemd. Het aanroepen van dit eindpunt met een HTTP POST-aanvraag op de lokale server activeert de functie.

Zie Lokaal testen met viewer-web-appom Event Grid geactiveerde functies lokaal te testen.

U kunt eventueel testgegevens doorgeven aan de uitvoering in de body van de POST-aanvraag. Deze functionaliteit is vergelijkbaar met het tabblad Testen in de Azure Portal.

U roept het volgende beheerders-eindpunt aan om niet-HTTP-functies te activeren:

http://localhost:{port}/admin/functions/{function_name}

Als u testgegevens wilt doorgeven aan het beheerders-eindpunt van een functie, moet u de gegevens in de body van een POST-aanvraagbericht doorgeven. De bericht-body moet de volgende JSON-indeling hebben:

{
    "input": "<trigger_input>"
}

De <trigger_input> waarde bevat gegevens in een indeling die door de functie wordt verwacht. Het volgende cURL-voorbeeld is een POST naar een QueueTriggerJS functie. In dit geval is de invoer een tekenreeks die gelijk is aan het bericht dat naar verwachting in de wachtrij wordt gevonden.

curl --request POST -H "Content-Type:application/json" --data '{"input":"sample queue data"}' http://localhost:7071/admin/functions/QueueTrigger

Wanneer u een administrator-eindpunt aanroept in uw functie-app in Azure, moet u een toegangssleutel verstrekken. Zie Functietoegangssleutels voor meer informatie.

Publiceren naar Azure

De Azure Functions Core Tools ondersteunt drie typen implementatie:

Implementatietype Opdracht Beschrijving
Project bestanden func azure functionapp publish Implementeert functieprojectbestanden rechtstreeks in uw functie-app met behulp van zip-implementatie.
Aangepaste container func deploy Implementeert uw project in een Linux-functie-app als een aangepaste Docker-container.
Kubernetes-cluster func kubernetes deploy Implementeert uw Linux-functie-app als een aangepaste Docker-container in een Kubernetes-cluster.

Voordat u publiceert

Belangrijk

U moet de Azure CLI of de Azure PowerShell lokaal hebben geïnstalleerd om vanuit Core Tools naar Azure te kunnen publiceren.

Een projectmap kan taalspecifieke bestanden en mappen bevatten die niet mogen worden gepubliceerd. Uitgesloten items worden weergegeven in een .funcignore-bestand in de hoofdprojectmap.

U moet al een functie-app in uw Azure-abonnement hebben gemaaktwaarop u uw code gaat implementeren. Projecten waarvoor compilatie is vereist, moeten zo worden gebouwd dat de binaire bestanden kunnen worden geïmplementeerd.

Zie Een functie-app maken voor serverloze uitvoering voor meer informatie over het maken van een functie-appvanuit de opdrachtprompt of het terminalvenster met behulp van de Azure CLI of Azure PowerShell.

Belangrijk

Wanneer u een functie-app maakt in Azure Portal, wordt standaard versie 3.x van de Function-runtime gebruikt. Volg de instructies in Uitvoeren op versie 1.x om ervoor te zorgen dat de functie-app versie 1.xvan de runtime gebruikt. U kunt de runtimeversie niet wijzigen voor een functie-app die bestaande functies heeft.

Projectbestanden implementeren

Als u uw lokale code wilt publiceren in een functie-app in Azure, gebruikt u de opdracht publish:

func azure functionapp publish <FunctionAppName>

De volgende overwegingen zijn van toepassing op dit type implementatie:

  • Bij het publiceren worden bestaande bestanden in de functie-app overschreven.

  • Gebruik de --publish-local-settings optie om automatisch app-instellingen te maken in uw functie-app op basis van waarden in het bestand local.settings.json.

  • Een externe build wordt uitgevoerd op gecompileerde projecten. Dit kan worden beheerd met behulp van de --no-build optie.

  • Uw project wordt zo geïmplementeerd dat het wordt uitgevoerd vanuit het implementatiepakket. Gebruik de optie om deze aanbevolen implementatiemodus uit --nozip te schakelen.

  • Java maakt gebruik van Maven om uw lokale project naar Azure te publiceren. Gebruik in plaats daarvan de volgende opdracht om te publiceren naar Azure: mvn azure-functions:deploy . Azure-resources worden gemaakt tijdens de eerste implementatie.

  • U krijgt een foutmelding als u probeert te publiceren naar een <FunctionAppName> die niet bestaat in uw abonnement.

Kubernetes-cluster

Met Functions kunt u ook uw Functions-project definiëren dat in een Docker-container moet worden uitgevoerd. Gebruik de --docker optie om func init een Dockerfile te genereren voor uw specifieke taal. Dit bestand wordt vervolgens gebruikt bij het maken van een te implementeren container.

Core Tools kan worden gebruikt om uw project als een aangepaste containerafbeelding te implementeren in een Kubernetes-cluster. De opdracht die u gebruikt, is afhankelijk van het type scaler dat in het cluster wordt gebruikt.

De volgende opdracht maakt gebruik van het Dockerfile om een container te genereren en deze te implementeren in een Kubernetes-cluster.

func kubernetes deploy --name <DEPLOYMENT_NAME> --registry <REGISTRY_USERNAME> 

Zie Deploying a function app to Kubernetes (Een functie-app implementeren in Kubernetes) voor meer informatie.

Zie Een functie in Linux maken met behulp van een aangepaste containervoor meer informatie over het publiceren van een aangepaste container naar Azure zonder Kubernetes.

Functies bewaken

De aanbevolen manier om de uitvoering van uw functies te bewaken, is door te integreren met Azure-toepassing Insights. U kunt ook uitvoeringslogboeken streamen naar uw lokale computer. Zie Monitor Azure Functions voor meer Azure Functions.

Integratie van Insights toepassingen

Integratie Insights toepassingstoepassing moet zijn ingeschakeld wanneer u uw functie-app in Azure maakt. Als uw functie-app om de een of andere reden niet is verbonden met een Application Insights-exemplaar, is het eenvoudig om deze integratie uit te Azure Portal. Zie Enable Application Insights integration (Application Insights-integratie) voor meer informatie.

Streaminglogboeken inschakelen

U kunt een stroom logboekbestanden weergeven die door uw functies worden gegenereerd in een opdrachtregelsessie op uw lokale computer.

Ingebouwde logboekstreaming

Gebruik de func azure functionapp logstream opdracht om streaminglogboeken te ontvangen van een specifieke functie-app die wordt uitgevoerd in Azure, zoals in het volgende voorbeeld:

func azure functionapp logstream <FunctionAppName>

Notitie

De ingebouwde logboekstreaming is in Core Tools nog niet ingeschakeld voor functie-apps die worden uitgevoerd op Linux in een verbruiksabonnement. Voor deze hostingabonnementen moet u in plaats daarvan Live Metrics Stream gebruiken om de logboeken nagenoeg in realtime weer te geven.

Live Metrics Stream

U kunt de Live Metrics Stream voor uw functie-app in een nieuw browservenster weergeven door de optie --browser op te nemen, zoals in het volgende voorbeeld:

func azure functionapp logstream <FunctionAppName> --browser

Voor dit type streaminglogboeken is vereist dat application Insights-integratie is ingeschakeld voor uw functie-app.

Volgende stappen

Meer informatie over het ontwikkelen, testen en publiceren van Azure Functions met behulp van Azure Functions Core Tools Microsoft Learn-module Azure Functions Core Tools wordt open source en gehost op GitHub.
Als u een bug- of functieaanvraag wilt indienen, opent u een GitHub probleem.