Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln använder du lokala kommandoradsverktyg för att skapa en funktion som svarar på HTTP-begäranden. När du har verifierat koden lokalt distribuerar du den till en serverlös Flex Consumption-värdplan i Azure Functions.
Slutförande av den här snabbstarten medför en liten kostnad på några USD-cent eller mindre på ditt Azure-konto.
Se till att välja önskat utvecklingsspråk överst i artikeln.
Prerequisites
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto kostnadsfritt.
- 
              Java 17 Developer Kit
- Om du använder en annan version av Java som stöds måste du uppdatera projektets pom.xml fil.
- Miljövariabeln JAVA_HOMEmåste anges till installationsplatsen för rätt version av Java Development Kit (JDK).
 
- Apache Maven 3.8.x
- JSON-processorn - jqför kommandoraden, som används för att parsa JSON-utdata, och är även tillgänglig i Azure Cloud Shell.
Installera Azure Functions Core Tools
Det rekommenderade sättet att installera Core Tools beror på operativsystemet på din lokala utvecklingsdator.
Följande steg använder ett Windows-installationsprogram (MSI) för att installera Core Tools v4.x. Mer information om andra paketbaserade installationsprogram finns i Core Tools readme.
Ladda ned och kör installationsprogrammet för Core Tools baserat på din version av Windows:
- v4.x – Windows 64-bit (rekommenderas. Visual Studio Code-felsökning kräver 64-bit.)
- v4.x – Windows 32-bit
Om du tidigare använde Windows-installationsprogrammet (MSI) för att installera Core Tools i Windows bör du avinstallera den gamla versionen från Lägg till Ta bort program innan du installerar den senaste versionen.
Skapa och aktivera en virtuell miljö
I en lämplig mapp kör du följande kommandon för att skapa och aktivera en virtuell miljö med namnet .venv. Se till att använda någon av De Python-versioner som stöds av Azure Functions.
python -m venv .venv
source .venv/bin/activate
Om Python inte installerade venv-paketet på Linux-distributionen kör du följande kommando:
sudo apt-get install python3-venv
Du kör alla efterföljande kommandon i den här aktiverade virtuella miljön.
Skapa ett lokalt kodprojekt och en funktion
I Azure Functions är ditt kodprojekt en app som innehåller en eller flera enskilda funktioner som var och en svarar på en specifik utlösare. Alla funktioner i ett projekt delar samma konfigurationer och distribueras som en enhet till Azure. I det här avsnittet skapar du ett kodprojekt som innehåller en enda funktion.
- I en terminal eller kommandotolk kör du det här - func initkommandot för att skapa ett funktionsappsprojekt i den aktuella mappen:- func init --worker-runtime dotnet-isolated
- I en terminal eller kommandotolk kör du det här - func initkommandot för att skapa ett funktionsappsprojekt i den aktuella mappen:- func init --worker-runtime node --language javascript
- I en terminal eller kommandotolk kör du det här - func initkommandot för att skapa ett funktionsappsprojekt i den aktuella mappen:- func init --worker-runtime powershell
- I en terminal eller kommandotolk kör du det här - func initkommandot för att skapa ett funktionsappsprojekt i den aktuella mappen:- func init --worker-runtime python
- I en terminal eller kommandotolk kör du det här - func initkommandot för att skapa ett funktionsappsprojekt i den aktuella mappen:- func init --worker-runtime node --language typescript
- I en tom mapp kör du det här - mvnkommandot för att generera kodprojektet från en Azure Functions Maven-arketyp:- mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17- Important - Använd -DjavaVersion=11om du vill att funktionerna ska köras på Java 11. För mer information, se Java-versioner.
- Miljövariabeln JAVA_HOMEmåste anges till installationsplatsen för rätt version av JDK för att slutföra den här artikeln.
 
- Använd 
- Maven ber dig om de värden som behövs för att slutföra genereringen av projektet vid distributionen. 
 Ange följande värden när du uppmanas att göra det:- Prompt - Value - Description - groupId - com.fabrikam- Ett värde som unikt identifierar projektet i alla projekt, enligt namngivningsreglerna för paket för Java. - artifactId - fabrikam-functions- Ett värde som är namnet på jar-filen, utan ett versionsnummer. - version - 1.0-SNAPSHOT- Välj standardvärdet. - package - com.fabrikam- Ett värde som är Java-paketet för den genererade funktionskoden. Använd standardvärdet. 
- Skriv - Yeller tryck på Retur för att bekräfta.- Maven skapar projektfilerna i en ny mapp med namnet artifactId, som i det här exemplet är - fabrikam-functions.
- Navigera till projektmappen: - cd fabrikam-functions- Du kan granska den mallgenererade koden för den nya HTTP-utlösarfunktionen i Function.java i projektkatalogen \src\main\java\com\fabrikam . 
- Använd det här - func newkommandot för att lägga till en funktion i projektet:- func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"- En ny kodfil läggs till i projektet. I det här fallet - --nameär argumentet det unika namnet på din funktion (- HttpExample) och- --templateargumentet anger en HTTP-utlösare.
Projektrotmappen innehåller olika filer för projektet, inklusive konfigurationsfiler med namnet local.settings.json och host.json. Eftersom local.settings.json kan innehålla hemligheter som hämtats från Azure undantas filen som standard från källkontrollen i .gitignore-filen .
Kör funktionen lokalt
Verifiera den nya funktionen genom att köra projektet lokalt och anropa funktionsslutpunkten.
- Använd det här kommandot för att starta den lokala Azure Functions-körningsvärden i roten i projektmappen: - func start- func start- npm install npm start- mvn clean package mvn azure-functions:run- Mot slutet av utdata bör följande rader visas: - ... Now listening on: http://0.0.0.0:7071 Application started. Press Ctrl+C to shut down. Http Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample ...- Note - Om HttpExample-slutpunkten inte visas som förväntat har du förmodligen startat värdprocessen utanför projektets rotkatalog. I så fall kan du använda Ctrl+C för att stoppa värden, navigera till projektets rotmapp och köra föregående kommando igen. 
- Kopiera URL:en för funktionen - HttpExamplefrån den här utdatan till en webbläsare och bläddra till funktions-URL:en så bör du få ett lyckat svar med ett "hello world"-meddelande.
- När du är klar ska du använda Ctrl+C och välja - yför att stoppa värden för funktionerna.
Skapa stödjande Azure-resurser för din funktion
Innan du kan distribuera funktionskoden till Azure måste du skapa följande resurser:
- En resursgrupp, som är en logisk container för relaterade resurser.
- Ett standardlagringskonto som används av Functions-värden för att underhålla tillstånd och annan information om dina funktioner.
- En användartilldelad hanterad identitet som Functions-värden använder för att ansluta till standardlagringskontot.
- En funktionsapp som tillhandahåller miljön för att köra funktionskoden. En funktionsapp mappar till ditt lokala funktionsprojekt och låter dig gruppera funktioner som en logisk enhet för enklare hantering, distribution och delning av resurser.
Använd Azure CLI-kommandona i de här stegen för att skapa de resurser som krävs.
- Om du inte redan har gjort det loggar du in på Azure: - az login- Kommandot - az loginloggar in dig på ditt Azure-konto. Hoppa över det här steget när du kör i Azure Cloud Shell.
- Om du inte redan har gjort det använder du det här - az extension addkommandot för att installera Application Insights-tillägget:- az extension add --name application-insights
- Använd det här kommandot az group create för att skapa en resursgrupp med namnet - AzureFunctionsQuickstart-rgi din valda region:- az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"- I det här exemplet ersätter - <REGION>du med en region nära dig som stöder Flex Consumption-planen. Använd kommandot az functionapp list-flexconsumption-locations för att visa listan över regioner som stöds för närvarande.
- Använd kommandot az storage account create för att skapa ett allmänt lagringskonto i din resursgrupp och region: - az storage account create --name <STORAGE_NAME> --location "<REGION>" --resource-group "AzureFunctionsQuickstart-rg" \ --sku "Standard_LRS" --allow-blob-public-access false --allow-shared-key-access false- I det här exemplet ersätter du - <STORAGE_NAME>med ett namn som är lämpligt för dig och unikt i Azure Storage. Namn får endast innehålla gemener och siffror och måste vara mellan tre och 24 tecken långa.- Standard_LRSanger ett konto för generell användning som stöds av Functions. Det nya kontot kan bara nås med hjälp av Microsoft Entra-autentiserade identiteter som har beviljats behörighet till specifika resurser.
- Använd det här skriptet för att skapa en användartilldelad hanterad identitet, parsa de returnerade JSON-egenskaperna för objektet med hjälp - jqav och bevilja- Storage Blob Data Ownerbehörigheter i standardlagringskontot:- output=$(az identity create --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" --location <REGION> \ --query "{userId:id, principalId: principalId, clientId: clientId}" -o json) userId=$(echo $output | jq -r '.userId') principalId=$(echo $output | jq -r '.principalId') clientId=$(echo $output | jq -r '.clientId') storageId=$(az storage account show --resource-group "AzureFunctionsQuickstart-rg" --name <STORAGE_NAME> --query 'id' -o tsv) az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal \ --role "Storage Blob Data Owner" --scope $storageId- Om du inte har - jqverktyget i ditt lokala Bash-gränssnitt är det tillgängligt i Azure Cloud Shell. I det här exemplet ersätter du- <STORAGE_NAME>och- <REGION>med namnet på ditt standardlagringskonto respektive din region.- Kommandot az identity create skapar en identitet med namnet - func-host-storage-user. Den returnerade- principalIdanvänds för att tilldela behörigheter till den nya identiteten i standardlagringskontot med hjälp av- az role assignment createkommandot. Kommandot- az storage account showanvänds för att hämta lagringskontots ID.
- Använd det här kommandot az functionapp create för att skapa funktionsappen i Azure: - az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime dotnet-isolated --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"- az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime java --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"- az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime node --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"- az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"- az functionapp create --resource-group "AzureFunctionsQuickstart-rg" --name <APP_NAME> --flexconsumption-location <REGION> \ --runtime python --runtime-version <LANGUAGE_VERSION> --storage-account <STORAGE_NAME> \ --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value "func-host-storage-user"- I det här exemplet ersätter du dessa platshållare med lämpliga värden: - 
              <APP_NAME>: ett globalt unikt namn som passar dig.<APP_NAME>är även DNS-standarddomänen för funktionsappen.
- 
              <STORAGE_NAME>: namnet på det konto som du använde i föregående steg.
- 
              <REGION>: aktuell region för dig.
- 
              <LANGUAGE_VERSION>: Använd samma språkstackversion som stöds som du verifierade lokalt.
 - Det här kommandot skapar en funktionsapp som körs i din angivna språkkörning i Linux i Flex Consumption Plan, vilket är kostnadsfritt för den mängd användning som du får här. Kommandot skapar också en associerad Azure Application Insights-instans i samma resursgrupp, som du kan använda för att övervaka funktionsappens körningar och visa loggar. Mer information finns i Övervaka Azure Functions. Instansen genererar inga kostnader förrän du aktiverar den. 
- 
              
- Använd det här skriptet för att lägga till din användartilldelade hanterade identitet i rollen Monitoring Metrics Publisher i Application Insights-instansen: - appInsights=$(az monitor app-insights component show --resource-group "AzureFunctionsQuickstart-rg" \ --app <APP_NAME> --query "id" --output tsv) principalId=$(az identity show --name "func-host-storage-user" --resource-group "AzureFunctionsQuickstart-rg" \ --query principalId -o tsv) az role assignment create --role "Monitoring Metrics Publisher" --assignee $principalId --scope $appInsights- I det här exemplet ersätter du - <APP_NAME>med namnet på funktionsappen. Kommandot az role assignment create lägger till användaren i rollen. Resurs-ID:n för din Application Insights-instans och huvud-ID:t för din användare hämtas med hjälp av kommandot az monitor app-insights component show och- az identity show, respektive.
Uppdatera programinställningar
Om du vill att Functions-värdena ska kunna ansluta till standardlagringskontot med delade hemligheter måste du ersätta inställningen för anslutningssträngen AzureWebJobsStorage med flera inställningar som har prefixet AzureWebJobsStorage__. De här inställningarna definierar en komplex inställning som appen använder för att ansluta till lagring och Application Insights med en användartilldelad hanterad identitet.
- Använd det här skriptet för att hämta klient-ID för den användartilldelade hanterade identiteten och använder det för att definiera hanterade identitetsanslutningar till både lagring och Application Insights: - clientId=$(az identity show --name func-host-storage-user \ --resource-group AzureFunctionsQuickstart-rg --query 'clientId' -o tsv) az functionapp config appsettings set --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --settings AzureWebJobsStorage__accountName=<STORAGE_NAME> \ AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId \ APPLICATIONINSIGHTS_AUTHENTICATION_STRING="ClientId=$clientId;Authorization=AAD"- I det här skriptet ersätter du - <APP_NAME>och- <STORAGE_NAME>med namnen på din funktionsapp respektive ditt lagringskonto.
- Kör kommandot az functionapp config appsettings delete för att ta bort den befintliga - AzureWebJobsStorageinställningen för anslutningssträngen, som innehåller en delad hemlighetsnyckel:- az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorage- I det här exemplet ersätter du - <APP_NAME>med namnen på funktionsappen.
Nu kan Functions-värden ansluta till lagringskontot på ett säkert sätt med hanterade identiteter i stället för delade hemligheter. Nu kan du distribuera projektkoden till Azure-resurserna.
Distribuera funktionsprojektet till Azure
När du har skapat funktionsappen func azure functionapp publish i Azure är du nu redo att distribuera ditt lokala funktionsprojekt med hjälp av kommandot .
Kör det här func azure functionapp publish kommandot i rotprojektmappen:
func azure functionapp publish <APP_NAME>
I det här exemplet ersätter du <APP_NAME> med namnet på din app. En lyckad distribution visar resultat som liknar följande utdata (trunkerade för enkelhetens skull):
...
Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.
...
Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample
Uppdatera filen pom.xml
När du har skapat funktionsappen i Azure måste du uppdatera pom.xml-filen så att Maven kan distribuera till din nya app. Annars skapas en ny uppsättning Azure-resurser under distributionen.
- I Azure Cloud Shell använder du det här - az functionapp showkommandot för att hämta distributionscontainerns URL och ID för den nya användartilldelade hanterade identiteten:- az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg \ --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \ containerUrl: properties.functionAppConfig.deployment.storage.value}"- I det här exemplet ersätter du - <APP_NAME>med namnen på funktionsappen.
- I projektrotkatalogen öppnar du filen pom.xml i en textredigerare, letar upp elementet - propertiesoch uppdaterar dessa specifika egenskapsvärden:- Egenskapsnamn - Value - java.version- Använd samma språkstackversion som stöds som du verifierade lokalt, till exempel - 17.- azure.functions.maven.plugin.version- 1.37.1- azure.functions.java.library.version- 3.1.0- functionAppName- Namnet på funktionsappen i Azure. 
- Leta upp - configurationavsnittet i- azure-functions-maven-pluginoch ersätt det med det här XML-fragmentet:- <configuration> <appName>${functionAppName}</appName> <resourceGroup>AzureFunctionsQuickstart-rg</resourceGroup> <pricingTier>Flex Consumption</pricingTier> <region>....</region> <runtime> <os>linux</os> <javaVersion>${java.version}</javaVersion> </runtime> <deploymentStorageAccount>...</deploymentStorageAccount> <deploymentStorageResourceGroup>AzureFunctionsQuickstart-rg</deploymentStorageResourceGroup> <deploymentStorageContainer>...</deploymentStorageContainer> <storageAuthenticationMethod>UserAssignedIdentity</storageAuthenticationMethod> <userAssignedIdentityResourceId>...</userAssignedIdentityResourceId> <appSettings> <property> <name>FUNCTIONS_EXTENSION_VERSION</name> <value>~4</value> </property> </appSettings> </configuration>
- I det nya - configurationelementet gör du följande specifika ersättningar av ellipsvärdena (- ...):- Configuration - Value - region- Regionkoden för din befintliga funktionsapp, till exempel - eastus.- deploymentStorageAccount- Namnet på ditt lagringskonto. - deploymentStorageContainer- Namnet på distributionsresursen, som kommer efter - \i- containerUrl-värdet som du har fått.- userAssignedIdentityResourceId- Det fullständigt kvalificerade resurs-ID:t för din hanterade identitet, som du fick. 
- Spara ändringarna i filenpom.xml . 
Nu kan du använda Maven för att distribuera kodprojektet till din befintliga app.
Distribuera funktionsprojektet till Azure
- Kör följande kommando från kommandotolken: - mvn clean package azure-functions:deploy
- När distributionen har slutförts använder du detta - az functionapp function showför att hämta URL:en för fjärrfunktionsslutpunkten- HttpExample:- az functionapp function show --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --function-name HttpExample --query invokeUrlTemplate -o tsv- I det här exemplet ersätter du - <APP_NAME>med namnen på funktionsappen.
- Kopiera den returnerade slutpunkts-URL:en som du använder för att anropa funktionsslutpunkten. 
Anropa funktionen på Azure
Eftersom funktionen använder en HTTP-utlösare och stöder GET-begäranden anropar du den genom att göra en HTTP-begäran till dess URL. Det är enklast att köra en GET-begäran i en webbläsare.
Kopiera den fullständiga anropande URL:en som visas i utdata från publiceringskommandot till ett webbläsaradressfält.
Klistra in url:en som du kopierade till ett webbläsaradressfält.
Slutpunkts-URL:en bör se ut ungefär så här:
https://contoso-app.azurewebsites.net/api/httpexample
När du navigerar till den här URL:en bör webbläsaren visa liknande utdata som när du körde funktionen lokalt.
Rensa resurser
Om du fortsätter till nästa steg och lägger till en Azure Storage-köutdatabindning behåller du alla resurser på plats när du bygger vidare på det du redan har gjort.
Annars använder du följande kommando för att ta bort resursgruppen och alla dess inneslutna resurser för att undvika ytterligare kostnader.
az group delete --name AzureFunctionsQuickstart-rg