Delen via


Quickstart: Een functie maken in Azure vanaf de opdrachtregel

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

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:

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.

  1. Voer in een terminal of opdrachtprompt deze func init opdracht uit om een functie-app-project te maken in de huidige map:

    func init --worker-runtime dotnet-isolated 
    
  1. Voer in een terminal of opdrachtprompt deze func init opdracht uit om een functie-app-project te maken in de huidige map:

    func init --worker-runtime node --language javascript 
    
  1. Voer in een terminal of opdrachtprompt deze func init opdracht uit om een functie-app-project te maken in de huidige map:

    func init --worker-runtime powershell 
    
  1. Voer in een terminal of opdrachtprompt deze func init opdracht uit om een functie-app-project te maken in de huidige map:

    func init --worker-runtime python 
    
  1. Voer in een terminal of opdrachtprompt deze func init opdracht uit om een functie-app-project te maken in de huidige map:

    func init --worker-runtime node --language typescript 
    
  1. Voer in een lege map deze mvn opdracht 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=17
    

    Important

    • Gebruik -DjavaVersion=11 als u uw functies wilt uitvoeren in Java 11. Zie Java-versies voor meer informatie.
    • De omgevingsvariabele JAVA_HOME moet zijn ingesteld op de installatielocatie van de juiste versie van de JDK om dit artikel te kunnen voltooien.
  2. 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.fabrikam Een waarde die uw project uniek identificeert binnen alle projecten, overeenkomstig de regels voor de naamgeving van pakketten voor Java.
    artifactId fabrikam-functions Een waarde die bestaat uit de naam van het JAR-bestand, zonder een versienummer.
    version 1.0-SNAPSHOT Kies de standaardwaarde.
    package com.fabrikam Een waarde die het Java-pakket aangeeft voor de gegenereerde functiecode. Gebruik de standaard.
  3. Typ Y of 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.

  4. Navigeer naar de projectmap:

    cd fabrikam-functions
    

    U kunt de door de sjabloon gegenereerde code voor uw nieuwe HTTP-triggerfunctie bekijken in Function.java in de projectdirectory \src\main\java\com\fabrikam .

  1. Gebruik deze func new opdracht 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 --name argument de unieke naam van uw functie (HttpExample) en het --template argument 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.

  1. Gebruik deze opdracht om de lokale Azure Functions Runtime-host te starten in de hoofdmap van de projectmap:

    func start  
    
    func start  
    
    npm install
    npm start
    
    mvn clean package  
    mvn azure-functions:run
    

    Naar 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.

  2. Kopieer de URL van uw HttpExample functie van deze uitvoer naar een browser en navigeer naar de functie-URL. U zou een succesvol antwoord moeten ontvangen met een 'hallo wereld'-bericht.

  3. Wanneer u klaar bent, gebruikt u Ctrl+C en kiest u y om 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.

  1. Als u dit nog niet hebt gedaan, meldt u zich aan bij Azure:

    az login
    

    Met de az login opdracht meldt u zich aan bij uw Azure-account. Sla deze stap over wanneer u deze stap uitvoert in Azure Cloud Shell.

  2. Als u dit nog niet hebt gedaan, gebruikt u deze az extension add opdracht om de Application Insights-extensie te installeren:

    az extension add --name application-insights
    
  3. Gebruik deze opdracht az group create om een resourcegroep te maken met de naam AzureFunctionsQuickstart-rg in 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.

  4. 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 false
    

    Vervang 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. Met Standard_LRS geeft 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.

  5. 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 verlenen Storage Blob Data Owner in 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 $storageId
    

    Als u het jq hulpprogramma 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 geretourneerde principalId bestand wordt gebruikt om machtigingen toe te wijzen aan deze nieuwe identiteit in het standaardopslagaccount met behulp van de az role assignment create opdracht. De az storage account show opdracht wordt gebruikt om de id van het opslagaccount op te halen.

  6. 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.

  7. 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 $appInsights
    

    Vervang 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 en az identity show opdrachten.

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.

  1. 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.

  2. Voer de opdracht az functionapp config appsettings delete uit om de bestaande AzureWebJobsStorage instelling 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 AzureWebJobsStorage
    

    Vervang 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.

  1. Gebruik deze az functionapp show opdracht 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.

  2. Open in de hoofdmap van het project het pom.xml-bestand in een teksteditor, zoek het properties element en werk deze specifieke eigenschapswaarden bij:

    Naam van de eigenschap Value
    java.version Gebruik dezelfde ondersteunde taalstackversie die u lokaal hebt geverifieerd, zoals 17.
    azure.functions.maven.plugin.version 1.37.1
    azure.functions.java.library.version 3.1.0
    functionAppName De naam van uw functie-app in Azure.
  3. Zoek de configuration sectie van de azure-functions-maven-plugin en 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>
    
  4. Breng in het nieuwe configuration-element deze specifieke vervangingen van de beletseltekens (...) waarden aan:

    Configuration Value
    region De regiocode van uw bestaande functie-app, zoals eastus.
    deploymentStorageAccount De naam van uw opslagaccount.
    deploymentStorageContainer De naam van de implementatieshare, die volgt op de \containerUrl waarde die u hebt verkregen.
    userAssignedIdentityResourceId De volledig gekwalificeerde resource-ID van uw beheerde identiteit die u hebt verkregen.
  5. 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

  1. Voer deze opdracht uit vanaf de opdrachtprompt:

    mvn clean package azure-functions:deploy
    
  2. Nadat de implementatie is voltooid, gebruikt u deze az functionapp function show om de URL van het eindpunt van de externe HttpExample functie op te halen:

    az functionapp function show --name <APP_NAME> --resource-group "AzureFunctionsQuickstart-rg" \
        --function-name HttpExample --query invokeUrlTemplate -o tsv
    

    Vervang in dit voorbeeld <APP_NAME> door de namen van uw functie-app.

  3. 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

Volgende stappen