Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel gebruikt u lokale opdrachtregelprogramma's om een functie te maken die reageert op HTTP-aanvragen. Nadat u uw code lokaal hebt gecontroleerd, implementeert u deze in een serverloos Flex Consumption-hostingabonnement in Azure Functions.
Het voltooien van deze snelle start brengt kosten met zich mee van een paar dollarcent of minder, die in rekening worden gebracht op uw Azure-account.
Zorg ervoor dat u bovenaan het artikel de gewenste ontwikkeltaal selecteert.
Prerequisites
- Een Azure-account met een actief abonnement. Gratis een account maken
-
Java 17 Developer Kit
- Als u een andere ondersteunde versie van Java gebruikt, moet u het pom.xml-bestand van het project bijwerken.
- De
JAVA_HOMEomgevingsvariabele moet worden ingesteld op de installatielocatie van de juiste versie van de Java Development Kit (JDK).
- Apache Maven 3.8.x
De
jqopdrachtregel JSON-processor, die wordt gebruikt om JSON-uitvoer te parseren, is ook beschikbaar in Azure Cloud Shell.
Azure Functions Core Tools installeren
De aanbevolen manier om Core Tools te installeren, is afhankelijk van het besturingssysteem van uw lokale ontwikkelcomputer.
In de volgende stappen wordt een Windows Installer (MSI) gebruikt om Core Tools v4.x te installeren. Voor meer informatie over andere installatieprogramma's op basis van pakketten, zie de Core Tools Readme.
Download en voer het Core Tools-installatieprogramma uit op basis van uw versie van Windows:
- v4.x - Windows 64-bits (aanbevolen. Visual Studio Code-foutopsporing vereist 64-bits.)
- v4.x - Windows 32-bits
Als u eerder Windows Installer (MSI) hebt gebruikt om Core Tools in Windows te installeren, moet u de oude versie verwijderen uit Programma's toevoegen voordat u de nieuwste versie installeert.
Een virtuele omgeving maken en activeren
Voer de volgende opdrachten uit in een geschikte map om een virtuele omgeving met de naam .venv te maken en te activeren. Zorg ervoor dat u een van de Python-versies gebruikt die worden ondersteund door Azure Functions.
python -m venv .venv
source .venv/bin/activate
Als Python het venv-pakket niet heeft geïnstalleerd in uw Linux-distributie, voert u de volgende opdracht uit:
sudo apt-get install python3-venv
U voert alle volgende opdrachten uit in deze geactiveerde virtuele omgeving.
Een lokaal codeproject en een functie maken
In Azure Functions is uw codeproject een app die een of meer afzonderlijke functies bevat die elk op een specifieke trigger reageert. Alle functies in een project delen dezelfde configuraties en worden geïmplementeerd als een eenheid in Azure. In deze sectie maakt u een codeproject dat één functie bevat.
Voer in een terminal of opdrachtprompt deze
func initopdracht uit om een functie-app-project te maken in de huidige map:func init --worker-runtime dotnet-isolated
Voer in een terminal of opdrachtprompt deze
func initopdracht uit om een functie-app-project te maken in de huidige map:func init --worker-runtime node --language javascript
Voer in een terminal of opdrachtprompt deze
func initopdracht uit om een functie-app-project te maken in de huidige map:func init --worker-runtime powershell
Voer in een terminal of opdrachtprompt deze
func initopdracht uit om een functie-app-project te maken in de huidige map:func init --worker-runtime python
Voer in een terminal of opdrachtprompt deze
func initopdracht uit om een functie-app-project te maken in de huidige map:func init --worker-runtime node --language typescript
Voer in een lege map deze
mvnopdracht uit om het codeproject te genereren op basis van een Maven-archetype van Azure Functions:mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=17Important
- Gebruik
-DjavaVersion=11als u uw functies wilt uitvoeren in Java 11. Zie Java-versies voor meer informatie. - De omgevingsvariabele
JAVA_HOMEmoet zijn ingesteld op de installatielocatie van de juiste versie van de JDK om dit artikel te kunnen voltooien.
- Gebruik
Maven vraagt u om de waarden die nodig zijn om het project tijdens de implementatie te voltooien.
Geef de volgende waarden op als daarom wordt gevraagd:Prompt Value Description groupId com.fabrikamEen waarde die uw project uniek identificeert binnen alle projecten, overeenkomstig de regels voor de naamgeving van pakketten voor Java. artifactId fabrikam-functionsEen waarde die bestaat uit de naam van het JAR-bestand, zonder een versienummer. version 1.0-SNAPSHOTKies de standaardwaarde. package com.fabrikamEen waarde die het Java-pakket aangeeft voor de gegenereerde functiecode. Gebruik de standaard. Typ
Yof druk op Enter om te bevestigen.Maven maakt de projectbestanden in een nieuwe map met de naam van artifactId; in dit voorbeeld is dat
fabrikam-functions.Navigeer naar de projectmap:
cd fabrikam-functionsU kunt de door de sjabloon gegenereerde code voor uw nieuwe HTTP-triggerfunctie bekijken in Function.java in de projectdirectory \src\main\java\com\fabrikam .
Gebruik deze
func newopdracht om een functie toe te voegen aan uw project:func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"Er wordt een nieuw codebestand toegevoegd aan uw project. In dit geval is het
--nameargument de unieke naam van uw functie (HttpExample) en het--templateargument geeft een HTTP-trigger op.
De hoofdmap van het project bevat verschillende bestanden voor het project, waaronder configuratiebestanden met de naamlocal.settings.json en host.json. Omdat local.settings.json geheimen kan bevatten die zijn gedownload vanuit Azure, wordt het bestand standaard uitgesloten van broncodebeheer in het bestand .gitignore.
De functie lokaal uitvoeren
Controleer de nieuwe functie door het project lokaal uit te voeren en het functie-eindpunt aan te roepen.
Gebruik deze opdracht om de lokale Azure Functions Runtime-host te starten in de hoofdmap van de projectmap:
func startfunc startnpm install npm startmvn clean package mvn azure-functions:runNaar het einde van de uitvoer moeten de volgende regels worden weergegeven:
... 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
Als het HttpExample-eindpunt niet wordt weergegeven zoals verwacht, hebt u waarschijnlijk de host gestart van buiten de hoofdmap van het project. In dat geval gebruikt u Ctrl+C om de host te stoppen, gaat u naar de hoofdmap van het project en voert u de vorige opdracht opnieuw uit.
Kopieer de URL van uw
HttpExamplefunctie van deze uitvoer naar een browser en navigeer naar de functie-URL. U zou een succesvol antwoord moeten ontvangen met een 'hallo wereld'-bericht.Wanneer u klaar bent, gebruikt u Ctrl+C en kiest u
yom de functiehost te stoppen.
Ondersteunende Azure-resources maken voor uw functie
Voordat u uw functiecode in Azure kunt implementeren, moet u deze resources maken:
- Een resourcegroep, een logische container voor gerelateerde resources.
- Een standaardopslagaccount dat wordt gebruikt door de Functions-host voor het onderhouden van status en andere informatie over uw functies.
- Een door de gebruiker toegewezen beheerde identiteit, die de Functions-host gebruikt om verbinding te maken met het standaardopslagaccount.
- Een functie-app, die de omgeving biedt voor het uitvoeren van uw functiecode. Een functie-app wordt gekoppeld aan uw lokale functieproject en maakt het mogelijk om functies te groeperen als een logische eenheid, zodat u resources eenvoudiger kunt beheren, implementeren en delen.
Gebruik de Azure CLI-opdrachten in deze stappen om de vereiste resources te maken.
Als u dit nog niet hebt gedaan, meldt u zich aan bij Azure:
az loginMet de
az loginopdracht meldt u zich aan bij uw Azure-account. Sla deze stap over wanneer u deze stap uitvoert in Azure Cloud Shell.Als u dit nog niet hebt gedaan, gebruikt u deze
az extension addopdracht om de Application Insights-extensie te installeren:az extension add --name application-insightsGebruik deze opdracht az group create om een resourcegroep te maken met de naam
AzureFunctionsQuickstart-rgin uw gekozen regio:az group create --name "AzureFunctionsQuickstart-rg" --location "<REGION>"Vervang in dit voorbeeld door
<REGION>een regio bij u in de buurt die ondersteuning biedt voor het Flex Consumption-abonnement. Gebruik de opdracht az functionapp list-flexconsumption-locations om de lijst met momenteel ondersteunde regio's weer te geven.Gebruik deze opdracht az storage account create om een algemeen opslagaccount in uw resourcegroep en regio te maken:
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 falseVervang in dit voorbeeld door
<STORAGE_NAME>een naam die geschikt is voor u en uniek in Azure Storage. Namen mogen drie tot 24 tekens bevatten en u mag alleen kleine letters gebruiken. MetStandard_LRSgeeft u een account voor algemeen gebruik op dat wordt ondersteund door Functions. Dit nieuwe account kan alleen worden geopend met behulp van door Microsoft Entra geverifieerde identiteiten waaraan machtigingen zijn verleend voor specifieke resources.Gebruik dit script om een door de gebruiker toegewezen beheerde identiteit te maken, de geretourneerde JSON-eigenschappen van het object te parseren met behulp
jqvan en machtigingen te verlenenStorage Blob Data Ownerin het standaardopslagaccount: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 $storageIdAls u het
jqhulpprogramma niet in uw lokale Bash-shell hebt, is deze beschikbaar in Azure Cloud Shell. Vervang in dit voorbeeld<STORAGE_NAME>respectievelijk de<REGION>naam en regio van uw standaardopslagaccount.Met de opdracht az identity create maakt u een identiteit met de naam
func-host-storage-user. Het geretourneerdeprincipalIdbestand wordt gebruikt om machtigingen toe te wijzen aan deze nieuwe identiteit in het standaardopslagaccount met behulp van deaz role assignment createopdracht. Deaz storage account showopdracht wordt gebruikt om de id van het opslagaccount op te halen.Gebruik deze opdracht az functionapp create om de functie-app te maken in 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"Vervang in dit voorbeeld deze tijdelijke aanduidingen door de juiste waarden:
-
<APP_NAME>: een wereldwijd unieke naam die geschikt is voor u. De<APP_NAME>is ook het standaard DNS-domein voor de functie-app. -
<STORAGE_NAME>: de naam van het account dat u in de vorige stap hebt gebruikt. -
<REGION>: uw huidige regio. -
<LANGUAGE_VERSION>: gebruik dezelfde ondersteunde taalstackversie die u lokaal hebt geverifieerd.
Met deze opdracht maakt u een functie-app die wordt uitgevoerd in uw opgegeven taalruntime op Linux in het Flex Consumption-abonnement. Dit is gratis voor de hoeveelheid gebruik die u hier maakt. Met de opdracht maakt u ook een gekoppeld Azure Application Insights-exemplaar in dezelfde resourcegroep, waarmee u de uitvoeringen van uw functie-app kunt bewaken en logboeken kunt bekijken. Zie Monitor Azure Functions voor meer informatie. Er worden geen kosten gerekend voor de instantie tot u deze activeert.
-
Gebruik dit script om uw door de gebruiker toegewezen beheerde identiteit toe te voegen aan de rol Monitoring Metrics Publisher in uw Application Insights-exemplaar:
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 $appInsightsVervang in dit voorbeeld
<APP_NAME>door de naam van de functie-app. Met de opdracht az role assignment create voegt u uw gebruiker toe aan de rol. De resource-id van uw Application Insights-exemplaar en de principal-id van uw gebruiker worden verkregen met behulp van respectievelijk de az monitor app-insights-component show enaz identity showopdrachten.
Toepassingsinstellingen bijwerken
Als u wilt dat de Functions-host verbinding maakt met het standaardopslagaccount met behulp van gedeelde geheimen, moet u de instelling van de AzureWebJobsStorage verbindingsreeks vervangen door verschillende instellingen die voorafgegaan zijn door AzureWebJobsStorage__. Deze instellingen definiëren een complexe instelling die uw app gebruikt om verbinding te maken met opslag en Application Insights met een door de gebruiker toegewezen beheerde identiteit.
Gebruik dit script om de client-id op te halen van de door de gebruiker toegewezen beheerde identiteit en gebruikt dit om beheerde identiteitverbindingen met zowel opslag als Application Insights te definiëren:
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"Vervang in dit script
<APP_NAME>respectievelijk<STORAGE_NAME>de namen van uw functie-app en opslagaccount.Voer de opdracht az functionapp config appsettings delete uit om de bestaande
AzureWebJobsStorageinstelling voor de verbindingsreeks te verwijderen, die een gedeelde geheime sleutel bevat:az functionapp config appsettings delete --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" --setting-names AzureWebJobsStorageVervang in dit voorbeeld
<APP_NAME>door de namen van uw functie-app.
Op dit moment kan de Functions-host veilig verbinding maken met het opslagaccount met behulp van beheerde identiteiten in plaats van gedeelde geheimen. U kunt nu uw projectcode implementeren in de Azure-resources.
Het functieproject implementeren in Azure
Nadat u uw functie-app in Azure hebt gemaakt, bent u nu klaar om uw lokale functions-project te implementeren met behulp van de func azure functionapp publish opdracht.
Voer deze func azure functionapp publish opdracht uit in de hoofdprojectmap:
func azure functionapp publish <APP_NAME>
Vervang in dit voorbeeld door <APP_NAME> de naam van uw app. Een geslaagde implementatie toont resultaten die vergelijkbaar zijn met de volgende uitvoer (afgekapt voor eenvoud):
...
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
Het pom.xml-bestand bijwerken
Nadat u de functie-app in Azure hebt gemaakt, moet u het pom.xml-bestand bijwerken zodat Maven kan implementeren in uw nieuwe app. Anders wordt er tijdens de implementatie een nieuwe set Azure-resources gemaakt.
Gebruik deze
az functionapp showopdracht in Azure Cloud Shell om de URL en id van de implementatiecontainer op te halen van de nieuwe door de gebruiker toegewezen beheerde identiteit:az functionapp show --name <APP_NAME> --resource-group AzureFunctionsQuickstart-rg \ --query "{userAssignedIdentityResourceId: properties.functionAppConfig.deployment.storage.authentication.userAssignedIdentityResourceId, \ containerUrl: properties.functionAppConfig.deployment.storage.value}"Vervang in dit voorbeeld
<APP_NAME>door de namen van uw functie-app.Open in de hoofdmap van het project het pom.xml-bestand in een teksteditor, zoek het
propertieselement en werk deze specifieke eigenschapswaarden bij:Naam van de eigenschap Value java.versionGebruik dezelfde ondersteunde taalstackversie die u lokaal hebt geverifieerd, zoals 17.azure.functions.maven.plugin.version1.37.1azure.functions.java.library.version3.1.0functionAppNameDe naam van uw functie-app in Azure. Zoek de
configurationsectie van deazure-functions-maven-pluginen vervang deze door dit XML-fragment:<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>Breng in het nieuwe
configuration-element deze specifieke vervangingen van de beletseltekens (...) waarden aan:Configuration Value regionDe regiocode van uw bestaande functie-app, zoals eastus.deploymentStorageAccountDe naam van uw opslagaccount. deploymentStorageContainerDe naam van de implementatieshare, die volgt op de \containerUrlwaarde die u hebt verkregen.userAssignedIdentityResourceIdDe volledig gekwalificeerde resource-ID van uw beheerde identiteit die u hebt verkregen. Sla de wijzigingen op in het pom.xml-bestand .
U kunt nu Maven gebruiken om uw codeproject te implementeren in uw bestaande app.
Het functieproject implementeren in Azure
Voer deze opdracht uit vanaf de opdrachtprompt:
mvn clean package azure-functions:deployNadat de implementatie is voltooid, gebruikt u deze
az functionapp function showom de URL van het eindpunt van de externeHttpExamplefunctie op te halen:az functionapp function show --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \ --function-name HttpExample --query invokeUrlTemplate -o tsvVervang in dit voorbeeld
<APP_NAME>door de namen van uw functie-app.Kopieer de geretourneerde eindpunt-URL, die u vervolgens gebruikt om het functie-eindpunt aan te roepen.
De functie aanroepen in Azure
Omdat uw functie gebruikmaakt van een HTTP-trigger en GET-aanvragen ondersteunt, roept u deze aan door een HTTP-aanvraag naar de URL te verzenden. Het is het eenvoudigst om een GET-aanvraag uit te voeren in een browser.
Kopieer de volledige aanroep-URL die wordt weergegeven in de uitvoer van de opdracht Publiceren in een adresbalk van de browser.
Plak de URL die u hebt gekopieerd in een adresbalk van de browser.
De eindpunt-URL moet er ongeveer als volgt uitzien:
https://contoso-app.azurewebsites.net/api/httpexample
Wanneer u naar deze URL navigeert, moet de browser vergelijkbare uitvoer weergeven als toen u de functie lokaal uitvoerde.
De hulpbronnen opschonen
Als u naar de volgende stap gaat en een uitvoerbinding voor een Azure Storage-wachtrij toevoegt, laat dan al uw resources op hun plaats staan, aangezien u verder zult bouwen op wat u al gedaan heeft.
Gebruik anders de volgende opdracht om de resourcegroep en alle bijbehorende resources te verwijderen om te voorkomen dat er verdere kosten in rekening worden gebracht.
az group delete --name AzureFunctionsQuickstart-rg