Arbeta med Azure Functions Core Tools

Med Azure Functions Core Tools kan du utveckla och testa funktioner på din lokala dator från kommandotolken eller terminalen. Dina lokala funktioner kan ansluta till Azure-livetjänster och du kan felsöka dina funktioner på din lokala dator med hjälp av den fullständiga Functions-körningen. Du kan även distribuera en funktionsapp till din Azure-prenumeration.

Viktigt

Blanda inte lokal utveckling med Portal utveckling i samma Function-app. När du skapar och publicerar funktioner från ett lokalt projekt bör du inte försöka att underhålla eller ändra projekt koden i portalen.

Utveckla funktioner på din lokala dator och publicera dem till Azure med hjälp av Core Tools genom att följa dessa grundläggande steg:

Förutsättningar

Azure Functions Core Tools för närvarande antingen på Azure CLI eller Azure PowerShell för autentisering med ditt Azure-konto. Det innebär att du måste installera något av dessa verktyg för att kunna publicera till Azure från Azure Functions Core Tools.

Core Tools-versioner

Det finns fyra versioner av Azure Functions Core Tools. Vilken version du använder beror på din lokala utvecklingsmiljö, val av språkoch vilken supportnivå som krävs.

Välj en versionsflik nedan om du vill veta mer om varje specifik version och detaljerade installationsanvisningar:

Stöder version 3.x av Azure Functions runtime. Den här versionen Windows, macOS och Linux och använder plattformsspecifika pakethanterare eller npm för installation. Det här är den rekommenderade versionen av Functions-körningen och Core Tools.

Du kan bara installera en version av Core Tools på en viss dator. Om inget annat anges gäller exemplen i den här artikeln version 3.x.

Installera Azure Functions Core Tools

Azure Functions Core Tools innehåller en version av samma körning som Azure Functions som du kan köra på din lokala utvecklingsdator. Den innehåller också kommandon för att skapa funktioner, ansluta till Azure och distribuera funktionsprojekt.

Från och med version 2.x körs Core Tools på Windows, macOSoch Linux.

I följande steg används ett Windows installationsprogram (MSI) för att installera Core Tools v3.x. Mer information om andra paketbaserade installationsprogram finns i Viktigt för Core Tools.

Ladda ned och kör installationsprogrammet för Core Tools, baserat på din version av Windows:

Ändra Core Tools-versioner

När du byter till en annan version av Core Tools bör du använda samma pakethanterare som den ursprungliga installationen för att flytta till en annan paketversion. Om du till exempel har installerat Core Tools version 2.x med npm bör du använda följande kommando för att uppgradera till version 3.x:

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

Om du använde Windows installationsprogram (MSI) för att installera Core Tools på Windows bör du avinstallera den gamla versionen från Lägg till/ta bort program innan du installerar en annan version.

Skapa ett lokalt Functions-projekt

En Functions-projektkatalog innehåller följande filer och mappar, oavsett språk:

Filnamn Description
host.json Mer information finns i host.json-referensen.
local.settings.json Inställningar används av Core Tools när de körs lokalt, inklusive appinställningar. Mer information finns i lokala inställningar.
.gitignore Förhindrar att filen local.settings.json av misstag publiceras på en Git-lagringsplats. Mer information finns i lokala inställningar
.vscode\extensions.json Inställningar när du öppnar projektmappen i Visual Studio Code.

Mer information om Functions-projektmappen finns i guiden för Azure Functions utvecklare.

Kör följande kommando i terminalfönstret eller från en kommandotolk för att skapa projektet och den lokala Git-lagringsplatsen:

func init MyFunctionProj

I det här exemplet skapas ett Functions-projekt i en ny MyFunctionProj mapp. Du uppmanas att välja ett standardspråk för projektet.

Följande överväganden gäller för projekt initialisering:

  • Om du inte anger --worker-runtime alternativet i kommandot uppmanas du att välja språk. Mer information finns i func init-referensen.

  • När du inte anger ett projektnamn initieras den aktuella mappen.

  • Om du planerar att publicera projektet till en anpassad Linux-container använder du alternativet för att se till att en --dockerfile Dockerfile genereras för projektet. Mer information finns i Skapa en funktion i Linux med hjälp av en anpassad avbildning.

Vissa språk kan ha ytterligare överväganden:

  • Som standard skapar version 2.x och senare versioner av Core Tools funktionsappprojekt för .NET-körningen som C#-klassprojekt (.csproj). Version 3.x har också stöd för att skapa funktioner som körs på .NET 5.0 i en isolerad process. Dessa C#-projekt, som kan användas med Visual Studio eller Visual Studio Code, kompileras under felsökning och vid publicering till Azure.

  • Använd --csx parametern om du vill arbeta lokalt med C#-skriptfiler (.csx). Det här är samma filer som du får när du skapar funktioner i Azure Portal och när du använder version 1.x av Core Tools. Mer information finns i func init-referensen.

Registrera tillägg

Från och med körningsversion 2.x implementeras Functions-utlösare och bindningar som .NET-tilläggspaket (NuGet). För kompilerade C#-projekt refererar du helt enkelt till NuGet-tilläggspaketen för de specifika utlösare och bindningar som du använder. HTTP-bindningar och timerutlösare kräver inte tillägg.

För att förbättra utvecklingsupplevelsen för icke-C#-projekt kan du med Functions referera till ett versionstilläggspaket i din host.json-projektfil. Tilläggspaket gör alla tillägg tillgängliga för din app och tar bort risken för paketkompatibilitetsproblem mellan tillägg. Tilläggspaketet tar också bort kravet på att installera .NET Core 3.1 SDK och behöva hantera filen extensions.csproj.

Tilläggspaket är den rekommenderade metoden för andra funktionsprojekt än C#-projekt som uppfyller kraven. För dessa projekt genereras inställningen för tilläggspaketet i filen host.json under initieringen. Om detta fungerar för dig kan du hoppa över hela avsnittet.

Använda tilläggspaket

Det enklaste sättet att installera bindnings tillägg är att aktivera paket för tillägg. När du aktiverar paket installeras en fördefinierad uppsättning tilläggs paket automatiskt.

Om du vill aktivera tilläggs paket öppnar du host.jspå filen och uppdaterar innehållet så att det matchar följande kod:

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

När det stöds av ditt språk bör tilläggspaketet redan vara aktiverat när du har anropat func init . Du bör lägga till tilläggspaket i host.json innan du lägger till bindningar i function.json-filen. Mer information finns i Registrera Azure Functions bindningstillägg.

Installera tillägg uttryckligen

Det kan finnas fall i ett non-.NET-projekt när du inte kan använda tilläggspaket, till exempel när du behöver rikta en specifik version av ett tillägg som inte ingår i paketet. I dessa sällsynta fall kan du använda Core Tools för att installera de specifika tilläggspaket som krävs av projektet lokalt. Mer information finns i Installera tillägg uttryckligen.

Lokala inställningar

När du kör i en funktionsapp i Azure lagras de inställningar som krävs av dina funktioner på ett säkert sätt i appinställningarna. Under lokal utveckling läggs de här inställningarna i stället till Values i objektet i local.settings.jspå filen. I local.settings.jspå filen lagras även inställningar som används av lokala utvecklingsverktyg.

Eftersom local.settings.jspå kan innehålla hemligheter, till exempel anslutningssträngar, bör du aldrig lagra den på en fjärrlagringsplats. Mer information om lokala inställningar finns i Filen Med lokala inställningar.

Som standard migreras inte de här inställningarna automatiskt när projektet publiceras till Azure. Använd alternativet --publish-local-settings när du publicerar för att kontrollera att de här inställningarna läggs till i funktionsappen i Azure. Värden i ConnectionStrings avsnittet publiceras aldrig.

Funktionsappens inställningsvärden kan också läsas i koden som miljövariabler. Mer information finns i avsnittet Miljövariabler i följande språkspecifika referensämnen:

När ingen giltig lagringsanslutningssträng har angetts för och emulatorn inte används [AzureWebJobsStorage] visas följande felmeddelande:

Saknade värden för AzureWebJobsStorage i local.settings.json. Detta krävs för alla utlösare förutom HTTP. Du kan köra func azure functionapp fetch-app-settings eller ange <functionAppName> en anslutningssträng i local.settings.json.

Hämta anslutningssträngar för lagring

Även när du använder Microsoft Azure Storage Emulator för utveckling kanske du vill köra lokalt med en faktisk lagringsanslutning. Förutsatt att du redan har skapat ett lagringskontokan du hämta en giltig anslutningssträng för lagring på något av följande sätt:

  1. Från listan [Azure Portal]du efter och väljer Storage konton.

    Välj Storage konton från Azure Portal

  2. Välj ditt lagringskonto, välj Åtkomstnycklar i Inställningar och kopiera sedan ett av värdena för Anslutningssträng.

    Kopiera anslutningssträngen från Azure Portal

Skapa en funktion

Kör följande kommando för att skapa en funktion i ett befintligt projekt:

func new

När du kör version 3.x/2.x uppmanas du att välja en mall på func new funktionsappens standardspråk. Därefter uppmanas du att välja ett namn för funktionen. I version 1.x måste du också välja språk.

Du kan också ange funktionsnamnet och mallen i func new kommandot . I följande exempel används alternativet --template för att skapa en HTTP-utlösare med namnet MyHttpTrigger :

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

I det här exemplet skapas en Queue Storage-utlösare med namnet MyQueueTrigger :

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

Mer information finns i func new kommandot.

Köra funktioner lokalt

Om du vill köra ett Functions-projekt kör du Functions-värden från rotkatalogen för projektet. Värden aktiverar utlösare för alla funktioner i projektet. Kommandot start varierar beroende på ditt projektspråk.

func start

Anteckning

Version 1.x av Functions-körningen kräver i stället func host start . Mer information finns i Azure Functions Core Tools referens.

När Functions-värden startar matar den ut URL:en för HTTP-utlösta funktioner, som i följande exempel:

Found the following functions:
Host.Functions.MyHttpTrigger

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

Viktigt

När du kör lokalt tillämpas inte auktorisering för HTTP-slutpunkter. Det innebär att alla lokala HTTP-begäranden hanteras som authLevel = "anonymous" . Mer information finns i artikeln HTTP-bindning.

Skicka testdata till en funktion

Om du vill testa funktionerna lokalt startar du Functions-värden och anropar slutpunkter på den lokala servern med HJÄLP av HTTP-begäranden. Vilken slutpunkt du anropar beror på typen av funktion.

Anteckning

I exemplen i det här avsnittet används cURL-verktyget för att skicka HTTP-begäranden från terminalen eller en kommandotolk. Du kan använda ett verktyg som du väljer för att skicka HTTP-begäranden till den lokala servern. CURL-verktyget är tillgängligt som standard i Linux-baserade system Windows 10 version 17063 och senare. På äldre Windows måste du först hämta och installera cURL-verktyget.

Mer allmän information om hur du testar funktioner finns i Strategier för att testa koden i Azure Functions.

HTTP- och webhook-utlösta funktioner

Du anropar följande slutpunkt för att köra HTTP- och webhook-utlösta funktioner lokalt:

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

Se till att använda samma servernamn och port som Functions-värden lyssnar på. Du ser detta i de utdata som genereras när du startar funktionsvärden. Du kan anropa den här URL:en med valfri HTTP-metod som stöds av utlösaren.

Följande cURL-kommando utlöser MyHttpTrigger snabbstartsfunktionen från en GET-begäran med namnparametern som skickas i frågesträngen.

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

I följande exempel är samma funktion som anropas från ett POST-begärande som skriver namnet i begärandetexten:

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

Du kan göra GET-begäranden från en webbläsare och skicka data i frågesträngen. För alla andra HTTP-metoder måste du använda cURL, Fiddler, Postman eller ett liknande HTTP-testverktyg som stöder POST-begäranden.

Icke-HTTP-utlösta funktioner

För alla andra funktioner än HTTP- och Event Grid-utlösare kan du testa dina funktioner lokalt med hjälp av REST genom att anropa en särskild slutpunkt som kallas för en administrationsslutpunkt. Funktionen utlöses när den här slutpunkten anropas med en HTTP POST-begäran på den lokala servern.

Om du vill Event Grid utlösta funktioner lokalt kan du läsa Lokal testning med visningsprogrammets webbapp.

Du kan även skicka testdata till körningen i brödtexten i POST-begäran. Den här funktionen liknar fliken Test i Azure Portal.

Du anropar följande administratörsslutpunkt för att utlösa icke-HTTP-funktioner:

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

Om du vill skicka testdata till administratörsslutpunkten för en funktion måste du ange data i brödtexten i ett POST-begärandemeddelande. Meddelandetexten måste ha följande JSON-format:

{
    "input": "<trigger_input>"
}

Värdet <trigger_input> innehåller data i ett format som förväntas av funktionen. Följande cURL-exempel är en POST till en QueueTriggerJS funktion. I det här fallet är indata en sträng som motsvarar det meddelande som förväntas finnas i kön.

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

När du anropar en administratörsslutpunkt i funktionsappen i Azure måste du ange en åtkomstnyckel. Mer information finns i Funktionsåtkomstnycklar.

Publicera till Azure

Den Azure Functions Core Tools stöder tre typer av distribution:

Distributionstyp Kommando Beskrivning
Project filer func azure functionapp publish Distribuerar funktionsprojektfiler direkt till funktionsappen med zip-distribution .
Anpassad container func deploy Distribuerar projektet till en Linux-funktionsapp som en anpassad Docker-container.
Kubernetes-kluster func kubernetes deploy Distribuerar din Linux-funktionsapp som en Docker-kundcontainer till ett Kubernetes-kluster.

Innan du publicerar

Viktigt

Du måste ha Azure CLI eller Azure PowerShell installerat lokalt för att kunna publicera till Azure från Core Tools.

En projektmapp kan innehålla språkspecifika filer och kataloger som inte ska publiceras. Undantagna objekt visas i en .funcignore-fil i rotprojektmappen.

Du måste redan ha skapat en funktionsapp i din Azure-prenumerationsom du ska distribuera koden till. Projekt som kräver kompilering bör byggas så att binärfilerna kan distribueras.

Information om hur du skapar en funktionsapp från kommandotolken eller terminalfönstret med hjälp av Azure CLI eller Azure PowerShell finns i Skapa en funktionsapp för serverlös körning.

Viktigt

När du skapar en funktionsapp i Azure Portal den version 3.x av funktionskörningen som standard. Om du vill att funktionsappen ska använda version 1.x av körningen följer du anvisningarna i Kör på version 1.x. Du kan inte ändra körningsversionen för en funktionsapp som har befintliga funktioner.

Distribuera projektfiler

Om du vill publicera din lokala kod till en funktionsapp i Azure använder du publish kommandot :

func azure functionapp publish <FunctionAppName>

Följande överväganden gäller för den här typen av distribution:

  • När du publicerar skriver du över befintliga filer i funktionsappen.

  • Använd alternativet --publish-local-settings för att automatiskt skapa appinställningar i funktionsappen baserat på värden i filen local.settings.json.

  • En fjärrbygge utförs på kompilerade projekt. Detta kan styras med hjälp av --no-build alternativet.

  • Projektet distribueras så att det körs från distributionspaketet. Om du vill inaktivera det här rekommenderade distributionsläget använder du --nozip alternativet.

  • Java använder Maven för att publicera ditt lokala projekt till Azure. Använd i stället följande kommando för att publicera till Azure: mvn azure-functions:deploy . Azure-resurser skapas under den första distributionen.

  • Du får ett felmeddelande om du försöker publicera till en <FunctionAppName> som inte finns i din prenumeration.

Kubernetes-kluster

Med Functions kan du också definiera functions-projektet som ska köras i en Docker-container. Använd alternativet --docker för att func init generera en Dockerfile för ditt specifika språk. Den här filen används sedan när du skapar en container som ska distribueras.

Core Tools kan användas för att distribuera projektet som en anpassad containeravbildning till ett Kubernetes-kluster. Vilket kommando du använder beror på vilken typ av skalning som används i klustret.

Följande kommando använder Dockerfile för att generera en container och distribuera den till ett Kubernetes-kluster.

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

Mer information finns i Distribuera en funktionsapp till Kubernetes.

Information om hur du publicerar en anpassad container till Azure utan Kubernetes finns i Skapa en funktion i Linux med hjälp av en anpassad container.

Övervakningsfunktioner

Det rekommenderade sättet att övervaka körningen av dina funktioner är genom att integrera med Azure Application Insights. Du kan också strömma körningsloggar till din lokala dator. Mer information finns i Övervaka Azure Functions.

Integrering Insights program

Program Insights ska aktiveras när du skapar funktionsappen i Azure. Om din funktionsapp av någon anledning inte är ansluten till en Application Insights-instans är det enkelt att göra den här integreringen i Azure Portal. Mer information finns i Enable Application Insights integration (Aktivera Application Insights-integrering).

Aktivera strömningsloggar

Du kan visa en dataström med loggfiler som genereras av dina funktioner i en kommandoradssession på den lokala datorn.

Inbyggd loggströmning

Använd kommandot func azure functionapp logstream för att börja ta emot strömningsloggar för en specifik funktionsapp som körs i Azure, som i följande exempel:

func azure functionapp logstream <FunctionAppName>

Anteckning

Inbyggd loggströmning har ännu inte aktiverats i Core Tools för funktionsappar som körs på Linux i en förbrukningsplan. För dessa värdplaner måste du i stället använda Live Metrics Stream för att visa loggarna nästan i realtid.

Live-ström med mätvärden

Du kan visa Live Metrics Stream för funktionsappen i ett nytt webbläsarfönster genom att inkludera --browser alternativet , som i följande exempel:

func azure functionapp logstream <FunctionAppName> --browser

Den här typen av strömningsloggar kräver att Application Insights-integrering är aktiverat för din funktionsapp.

Nästa steg

Lär dig hur du utvecklar, testar och publicerar Azure Functions med hjälp av Azure Functions Core Tools Microsoft Learn-modulen Azure Functions Core Tools har öppen källkod och finns på GitHub.
Om du vill skicka in en bugg- eller funktionsbegäran öppnar du GitHub problem.