Quickstart: Een C#-functie maken in Azure vanaf de opdrachtregel

In dit artikel gebruikt u opdrachtregelprogramma's om een C#-functie te maken die reageert op HTTP-aanvragen. Nadat u de code lokaal hebt getest, implementeert u deze in de serverloze omgeving van Azure Functions.

Dit artikel ondersteunt het maken van beide typen gecompileerde C#-functies:

Uitvoeringsmodel Description
In-process Uw functiecode wordt uitgevoerd in hetzelfde proces als het Functions-hostproces. Ondersteunt zowel .NET Core 3.1 als .NET 6.0. Zie Functies voor C#-klassenbibliotheek ontwikkelen metbehulp van Azure Functions voor meer Azure Functions.
Geïsoleerd proces Uw functiecode wordt uitgevoerd in een afzonderlijk .NET-werkproces. Ondersteunt zowel .NET 5.0 als .NET 6.0. Zie Geïsoleerde procesfuncties ontwikkelen in C# voor meer informatie.

In dit artikel wordt een door HTTP geactiveerde functie gemaakt die wordt uitgevoerd op .NET 6.0. Er is ook een Versie op basis van Visual Studio Code van dit artikel.

Voor het voltooien van deze quickstart worden kosten van een paar dollarcent of minder in rekening gebracht bij uw Azure-account.

Uw lokale omgeving configureren

Voordat u begint, moet u het volgende hebben:

U hebt ook een Azure-account met een actief abonnement nodig. Gratis een account maken

Controle van vereisten

Controleer uw vereisten. Deze zijn afhankelijk van de vraag of u Azure CLI of Azure PowerShell gebruikt voor het maken van Azure-resources:

  • Voer in een terminal- of opdrachtvenster uit om te controleren of de Azure Functions Core Tools func --version versie 4.x zijn.

  • Voer dotnet --list-sdks uit om te controleren of de vereiste versies zijn geïnstalleerd.

  • Voer az --version uit om te controleren of u versie 2.4 of hoger hebt van de Azure CLI.

  • Voer az login uit om u aan te melden bij Azure en te controleren of u een actief abonnement hebt.

Een lokaal functieproject maken

In Azure Functions is een functieproject een container voor een of meer afzonderlijke functies die elk op een bepaalde trigger reageren. Alle functies in een project delen dezelfde lokale configuratie en hostingconfiguratie. In deze sectie maakt u een functieproject dat één functie bevat.

  1. Voer de opdracht func init als volgt uit om een functieproject te maken in een map met de naam LocalFunctionProj met de opgegeven runtime:

    func init LocalFunctionProj --dotnet
    
  2. Navigeer naar de projectmap:

    cd LocalFunctionProj
    

    Deze map bevat verschillende bestanden voor het project,waaronder configuratiebestanden met de naam local.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.

  3. Voeg een functie toe aan uw project met behulp van de volgende opdracht, waarbij het argument --name de unieke naam van de functie is (HttpExample) en het argument --template de trigger van de functie (HTTP).

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    func new maakt een HttpExample.cs-code bestand.

(Optioneel) De inhoud van het bestand bekijken

Desgewenst kunt u doorgaan naar De functie lokaal uitvoeren en de inhoud van het bestand later bekijken.

HttpExample.cs

De functiecode die wordt gegenereerd op basis van de sjabloon, is afhankelijk van het type gecompileerd C#-project.

HttpExample.cs bevat een Run-methode waarmee aanvraaggegevens worden ontvangen in de req-variabele. Dit is een HttpRequest die is gedecoreerd met HttpTriggerAttribute, waarmee het gedrag van de trigger wordt gedefinieerd.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace LocalFunctionProj
{
    public static class HttpExample
    {
        [FunctionName("HttpExample")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
    }
}

Het retourobject is een ActionResult die een antwoordbericht retourneert als een OkObjectResult (200) of een BadRequestObjectResult (400).

Zie Azure Functions HTTP-triggers en -bindingen voor meer informatie.

De functie lokaal uitvoeren

  1. Voer uw functie uit door de lokale Azure Functions runtime host te starten vanuit de map LocalFunctionProj:

    func start
    

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

    Notitie

    Als HttpExample niet verschijnt zoals hierboven weergegeven, 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 uit deze uitvoer naar een browser:

    Aan de functie-URL moet u de querytekenreeks ?name=<YOUR_NAME> toevoegen, waardoor de volledige URL, zoals , wordt http://localhost:7071/api/HttpExample?name=Functions weergegeven. In de browser moet een antwoordbericht worden weergegeven dat de waarde van de queryreeks herhaalt. De terminal waarin u uw project hebt gestart, toont ook de logboek uitvoer wanneer u aanvragen doet.

  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 kunt implementeren in Azure, moet u drie resources maken:

  • Een resourcegroep,een logische container voor gerelateerde resources.
  • Een Storage-account,dat wordt gebruikt voor het onderhouden van de status en andere informatie over uw functies.
  • 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 volgende opdrachten om deze items te maken. Zowel Azure CLI als PowerShell worden ondersteund.

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

    az login
    

    Met de opdracht az login meldt u zich aan bij uw Azure-account.

  2. Maak een resourcegroep met de AzureFunctionsQuickstart-rg naam in de door u gekozen regio:

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    Met de opdracht az group create maakt u een resourcegroep. Vervang in de bovenstaande opdracht door een regio bij u in de buurt, met behulp van een beschikbare regiocode die wordt geretourneerd door de <REGION> opdracht az account list-locations.

  3. Maak een algemeen opslagaccount in de resourcegroep en regio:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    Met de opdracht az storage account create maakt u het opslagaccount.

    Vervang <STORAGE_NAME> in het vorige voorbeeld door een naam die voor u passend is en die uniek is 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.

  1. De functie-app maken in Azure:

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location <REGION> --runtime dotnet --functions-version 3 --name <APP_NAME> --storage-account <STORAGE_NAME>
    

    Maak de functie-app in Azure met behulp van de opdracht az functionapp create.

    Notitie

    Met deze opdracht maakt u een functie-app met behulp van de 3.x-versie van de Azure Functions runtime. Met func azure functionapp publish de opdracht die u later gaat uitvoeren, wordt de app bijgewerkt naar versie 4.x.

    Vervang in het vorige voorbeeld <STORAGE_NAME> door de naam van het account dat u in de vorige stap hebt gebruikt en vervang <APP_NAME> door een unieke naam die voor u van betekenis is. De <APP_NAME> is ook het standaard DNS-domein voor de functie-app.

    Met deze opdracht maakt u een functie-app die wordt uitgevoerd in de runtime van uw opgegeven taal binnen het Azure Functions-verbruiksplan. Dit is gratis voor het gebruik dat u hier maakt. Met deze opdracht wordt in dezelfde resourcegroep ook een gekoppelde instantie van Azure Application Insights ingericht, waarmee u uw functie-app kunt bewaken en logboeken kunt weergeven. Zie Monitor Azure Functions (Azure Functions bewaken) voor meer informatie. Er worden pas kosten in rekening gebracht voor de instantie als u deze activeert.

Het functieproject implementeren in Azure

Nadat u uw functie-app in Azure hebt gemaakt, kunt u nu uw lokale functieproject implementeren met behulp van de opdracht func azure functionapp publish.

Vervang <APP_NAME> in het volgende voorbeeld door de naam van uw app.

func azure functionapp publish <APP_NAME>

Met de publicatieopdracht worden de resultaten weergegeven die vergelijkbaar zijn met de volgende uitvoer (afgekapt voor de leesbaarheid):

...

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

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 sturen. Het is het gemakkelijkst om dit in een browser te doen.

Kopieer de volledige Aanroep-URL die wordt weergegeven in de uitvoer van de publicatieopdracht naar de adresbalk van een browser en voeg de queryparameter ?name=Functions toe. Wanneer u naar deze URL navigeert, moet de browser vergelijkbare uitvoer weergeven als toen u de functie lokaal uitvoerde.

Voer de volgende opdracht uit om bijna in realtime stroomlogboeken weer te geven:

func azure functionapp logstream <APP_NAME> 

Roep in een afzonderlijk terminalvenster of in de browser opnieuw de externe functie aan. In de terminal wordt een uitgebreid logboek weergegeven van de uitvoering van de functie in Azure.

Resources opschonen

Als u verdergaat met de volgende stap en een uitvoerbinding voor een Azure Storage-wachtrij toevoegt, kunt u alle resources het beste op dezelfde plaats laten staan. U gaat ze namelijk gebruiken in deze stap.

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