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=17Important
- 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.fabrikamEtt värde som unikt identifierar projektet i alla projekt, enligt namngivningsreglerna för paket för Java. artifactId fabrikam-functionsEtt värde som är namnet på jar-filen, utan ett versionsnummer. version 1.0-SNAPSHOTVälj standardvärdet. package com.fabrikamEtt 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-functionsDu 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 startfunc startnpm install npm startmvn clean package mvn azure-functions:runMot 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 loginKommandot
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-insightsAnvä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 falseI 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 beviljaStorage 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 $storageIdOm 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 returneradeprincipalIdanvänds för att tilldela behörigheter till den nya identiteten i standardlagringskontot med hjälp avaz role assignment createkommandot. Kommandotaz 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 $appInsightsI 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 ochaz 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 AzureWebJobsStorageI 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.versionAnvänd samma språkstackversion som stöds som du verifierade lokalt, till exempel 17.azure.functions.maven.plugin.version1.37.1azure.functions.java.library.version3.1.0functionAppNameNamnet på funktionsappen i Azure. Leta upp
configurationavsnittet iazure-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 regionRegionkoden för din befintliga funktionsapp, till exempel eastus.deploymentStorageAccountNamnet på ditt lagringskonto. deploymentStorageContainerNamnet på distributionsresursen, som kommer efter \icontainerUrl-värdet som du har fått.userAssignedIdentityResourceIdDet 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:deployNär distributionen har slutförts använder du detta
az functionapp function showför att hämta URL:en för fjärrfunktionsslutpunktenHttpExample:az functionapp function show --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --function-name HttpExample --query invokeUrlTemplate -o tsvI 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