Delen via


Quickstart: Geplande taken uitvoeren met Behulp van Azure Functions

In dit artikel gebruikt u de Azure Developer CLI (azd) om een timertriggerfunctie te maken om een geplande taak uit te voeren in Azure Functions. Nadat u de code lokaal hebt gecontroleerd, implementeert u deze in een nieuwe serverloze functie-app die u maakt in een Flex Consumption-abonnement in Azure Functions.

De projectbron gebruikt azd om de functie-app en gerelateerde resources te maken en uw code te implementeren in Azure. Deze implementatie volgt de huidige aanbevolen procedures voor veilige en schaalbare Azure Functions-implementaties.

Het Flex Consumption-abonnement volgt standaard een factureringsmodel waarbij u betaalt voor wat u gebruikt. Dit betekent dat u dit artikel kunt voltooien en slechts een paar centen of minder kosten maakt in uw Azure-account.

Belangrijk

Hoewel het uitvoeren van geplande taken wordt ondersteund voor alle talen, heeft dit quickstartscenario momenteel alleen voorbeelden voor C#, Python en TypeScript. Als u deze quickstart wilt voltooien, selecteert u een van deze ondersteunde talen bovenaan het artikel.

Vereiste voorwaarden

Het project initialiseren

Gebruik de azd init opdracht om een lokaal Azure Functions-codeproject te maken op basis van een sjabloon.

  1. Voer in uw lokale terminal of opdrachtprompt deze azd init opdracht uit in een lege map:

    azd init --template functions-quickstart-dotnet-azd-timer -e scheduled-dotnet
    

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project in de huidige map geïnitialiseerd. Met -e de vlag wordt een naam ingesteld voor de huidige omgeving. In azdde omgeving wordt een unieke implementatiecontext voor uw app onderhouden en kunt u meer dan één definiëren. De omgevingsnaam wordt ook gebruikt in de naam van de resourcegroep die u in Azure maakt.

  2. Voer deze opdracht uit om naar de app-map te navigeren:

    cd src
    
  3. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Dit bestand is vereist wanneer het lokaal wordt uitgevoerd.

  1. Voer in uw lokale terminal of opdrachtprompt deze azd init opdracht uit in een lege map:

    azd init --template functions-quickstart-typescript-azd-timer -e scheduled-ts
    

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project in de huidige map geïnitialiseerd. Met -e de vlag wordt een naam ingesteld voor de huidige omgeving. In azdde omgeving wordt een unieke implementatiecontext voor uw app onderhouden en kunt u meer dan één definiëren. De omgevingsnaam wordt ook gebruikt in de naam van de resourcegroep die u in Azure maakt.

  2. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Dit bestand is vereist wanneer het lokaal wordt uitgevoerd.

  1. Voer in uw lokale terminal of opdrachtprompt deze azd init opdracht uit in een lege map:

    azd init --template functions-quickstart-python-azd-timer -e scheduled-py
    

    Met deze opdracht worden de projectbestanden opgehaald uit de sjabloonopslagplaats en wordt het project in de huidige map geïnitialiseerd. Met -e de vlag wordt een naam ingesteld voor de huidige omgeving. In azdde omgeving wordt een unieke implementatiecontext voor uw app onderhouden en kunt u meer dan één definiëren. De omgevingsnaam wordt ook gebruikt in de naam van de resourcegroep die u in Azure maakt.

  2. Maak een bestand met de naam local.settings.json in de src map die deze JSON-gegevens bevat:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Dit bestand is vereist wanneer het lokaal wordt uitgevoerd.

Een virtuele omgeving maken en activeren

Voer in de hoofdmap deze opdrachten uit om een virtuele omgeving met de naam .venv:

python3 -m venv .venv
source .venv/bin/activate

Als Python het venv-pakket niet installeert in uw Linux-distributie, voert u de volgende opdracht uit:

sudo apt-get install python3-venv

Uitvoeren in uw lokale omgeving

  1. Voer deze opdracht uit vanuit uw app-map in een terminal of opdrachtprompt:

    func start
    
  1. Voer deze opdracht uit vanuit uw app-map in een terminal of opdrachtprompt:

    npm install
    npm start  
    
  1. Wanneer de Functions-host wordt gestart in uw lokale projectmap, schrijft deze informatie over de door de timer geactiveerde functie naar de terminaluitvoer. U ziet dat de geactiveerde timerfunctie wordt uitgevoerd op basis van het schema dat in uw code is gedefinieerd.

    De standaardplanning is */30 * * * * *, die elke 30 seconden wordt uitgevoerd.

  2. Wanneer u klaar bent, drukt u op Ctrl+C in het terminalvenster om het func.exe hostproces te stoppen.

  1. Voer deactivate uit om de virtuele omgeving af te sluiten.

De code bekijken (optioneel)

U kunt de code bekijken waarmee de timertriggerfunctie wordt gedefinieerd:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Timer;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class timerFunction
    {
        private readonly ILogger _logger;

        public timerFunction(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<timerFunction>();
        }

        [Function("timerFunction")]
        public void Run(
            [TimerTrigger("%TIMER_SCHEDULE%", RunOnStartup = true)] TimerInfo myTimer,
            FunctionContext context
        )
        {
            _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            if (myTimer.IsPastDue)
            {
                _logger.LogWarning("The timer is running late!");
            }
        }
    }
}

U kunt hier het volledige sjabloonproject bekijken.

import { app, InvocationContext, Timer } from '@azure/functions';

export async function timerFunction(myTimer: Timer, context: InvocationContext): Promise<void> {
    context.log(`TypeScript Timer trigger function executed at: ${new Date().toISOString()}`);

    if (myTimer.isPastDue) {
        context.warn("The timer is running late!");
    }
}

app.timer('timerFunction', {
    schedule: '%TIMER_SCHEDULE%',
    runOnStartup: true,
    handler: timerFunction
});

U kunt hier het volledige sjabloonproject bekijken.

import datetime
import logging

import azure.functions as func

# Create the function app instance
app = func.FunctionApp()

@app.timer_trigger(schedule="%TIMER_SCHEDULE%", 
                   arg_name="mytimer", 
                   run_on_startup=True,
                   use_monitor=False) 
def timer_function(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.now(datetime.timezone.utc).isoformat()
    
    logging.info(f'Python timer trigger function executed at: {utc_timestamp}')
    
    if mytimer.past_due:
        logging.warning('The timer is running late!')

U kunt hier het volledige sjabloonproject bekijken.

Nadat u uw functie lokaal hebt gecontroleerd, is het tijd om deze te publiceren naar Azure.

Implementeren in Azure

Dit project is geconfigureerd om de azd up opdracht te gebruiken om uw code te implementeren in een nieuwe functie-app in een Flex Consumption-abonnement in Azure.

Aanbeveling

Dit project bevat een set Bicep-bestanden die azd wordt gebruikt om een veilige implementatie te maken voor een Flex-verbruiksplan dat de aanbevolen procedures volgt.

  1. Voer deze opdracht uit om de vereiste Azure-resources in Azure te maken azd en uw codeproject te implementeren in de nieuwe functie-app:

    azd up
    

    De hoofdmap bevat het azure.yaml definitiebestand dat vereist is voor azd.

    Als u nog niet bent aangemeld, wordt u gevraagd om u te verifiëren met uw Azure-account.

  2. Geef de volgende vereiste implementatieparameters op wanneer u hierom wordt gevraagd:

    Kenmerk Description
    Azure-abonnement Abonnement waarin uw resources worden gemaakt.
    Azure-locatie Azure-regio waarin de resourcegroep wordt gemaakt die de nieuwe Azure-resources bevat. Alleen regio's die momenteel ondersteuning bieden voor het Flex Consumption-abonnement, worden weergegeven.

    De azd up opdracht gebruikt uw reactie op deze prompts met de Bicep-configuratiebestanden om deze implementatietaken te voltooien:

    • Maak en configureer deze vereiste Azure-resources (equivalent aan azd provision):

      • Flex Consumption-abonnement en functie-app
      • Azure Storage (vereist) en Application Insights (aanbevolen)
      • Toegangsbeleid en rollen voor uw account
      • Service-naar-service-verbindingen met behulp van beheerde identiteiten (in plaats van opgeslagen verbindingsreeks s)
      • Virtueel netwerk om zowel de functie-app als de andere Azure-resources veilig uit te voeren
    • Verpakt en implementeer uw code in de implementatiecontainer (equivalent aan azd deploy). De app wordt vervolgens gestart en uitgevoerd in het geïmplementeerde pakket.

    Nadat de opdracht is voltooid, ziet u koppelingen naar de resources die u hebt gemaakt.

Implementatie verifiëren

Nadat de implementatie is voltooid, wordt de timertriggerfunctie automatisch uitgevoerd in Azure op basis van de planning.

  1. Ga in Azure Portal naar uw nieuwe functie-app.

  2. Selecteer Logboekstream vanuit het linkermenu om uw functie-uitvoeringen in realtime te monitoren.

  3. U ziet dat er logboekvermeldingen verschijnen die laten zien hoe de timer-triggerfunctie volgens de planning wordt uitgevoerd.

Uw code opnieuw implementeren

Voer de azd up opdracht zo vaak uit als nodig is om uw Azure-resources in te richten en code-updates te implementeren voor uw functie-app.

Opmerking

Geïmplementeerde codebestanden worden altijd overschreven door het nieuwste implementatiepakket.

Uw eerste antwoorden op azd prompts en eventuele omgevingsvariabelen die worden azd gegenereerd, worden lokaal opgeslagen in uw benoemde omgeving. Gebruik de azd env get-values opdracht om alle variabelen in uw omgeving te controleren die zijn gebruikt bij het maken van Azure-resources.

De hulpbronnen opschonen

Wanneer u klaar bent met het werken met uw functie-app en gerelateerde resources, gebruikt u deze opdracht om de functie-app en de bijbehorende resources uit Azure te verwijderen en te voorkomen dat er verdere kosten in rekening worden gebracht:

azd down --no-prompt

Opmerking

Met de --no-prompt optie krijgt u de opdracht azd om uw resourcegroep te verwijderen zonder een bevestiging van u.

Deze opdracht heeft geen invloed op uw lokale codeproject.