Sdílet prostřednictvím


Rychlý start: Spouštění naplánovaných úloh pomocí Azure Functions

V tomto článku pomocí Azure Developer CLI (azd) vytvoříte funkci triggeru časovače pro spuštění naplánované úlohy ve službě Azure Functions. Po místním ověření kódu ho nasadíte do nové aplikace funkcí bez serveru, kterou vytvoříte v plánu Flex Consumption ve službě Azure Functions.

Zdroj projektu používá azd k vytvoření aplikace funkcí a souvisejících prostředků a k nasazení kódu do Azure. Toto nasazení se řídí aktuálními osvědčenými postupy pro zabezpečená a škálovatelná nasazení Azure Functions.

Ve výchozím nastavení se plán Flex Consumption řídí fakturačním modelem plaťte za to, co používáte, což znamená, že tento článek můžete dokončit a v účtu Azure se vám budou účtovat jen malé náklady na několik centů USD nebo méně.

Důležité

Zatímco spouštění naplánovaných úloh je podporováno pro všechny jazyky, tento scénář rychlého startu aktuálně obsahuje pouze příklady pro C#, Python a TypeScript. K dokončení tohoto rychlého startu vyberte jeden z těchto podporovaných jazyků v horní části článku.

Požadavky

Inicializace projektu

azd init Pomocí příkazu vytvořte místní projekt kódu Azure Functions ze šablony.

  1. V místním terminálu nebo příkazovém řádku spusťte tento azd init příkaz v prázdné složce:

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

    Tento příkaz načte soubory projektu z úložiště šablony a inicializuje projekt v aktuální složce. Příznak -e nastaví název aktuálního prostředí. V azdprostředí udržuje jedinečný kontext nasazení pro vaši aplikaci a můžete definovat více než jeden. Název prostředí se používá také v názvu skupiny prostředků, kterou vytvoříte v Azure.

  2. Spuštěním tohoto příkazu přejděte do složky aplikace:

    cd src
    
  3. Ve složce, která obsahuje tato data JSON, vytvořte soubor s názvem local.settings.jsonsrc :

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

    Tento soubor se vyžaduje při místním spuštění.

  1. V místním terminálu nebo příkazovém řádku spusťte tento azd init příkaz v prázdné složce:

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

    Tento příkaz načte soubory projektu z úložiště šablony a inicializuje projekt v aktuální složce. Příznak -e nastaví název aktuálního prostředí. V azdprostředí udržuje jedinečný kontext nasazení pro vaši aplikaci a můžete definovat více než jeden. Název prostředí se používá také v názvu skupiny prostředků, kterou vytvoříte v Azure.

  2. Ve složce, která obsahuje tato data JSON, vytvořte soubor s názvem local.settings.jsonsrc :

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

    Tento soubor se vyžaduje při místním spuštění.

  1. V místním terminálu nebo příkazovém řádku spusťte tento azd init příkaz v prázdné složce:

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

    Tento příkaz načte soubory projektu z úložiště šablony a inicializuje projekt v aktuální složce. Příznak -e nastaví název aktuálního prostředí. V azdprostředí udržuje jedinečný kontext nasazení pro vaši aplikaci a můžete definovat více než jeden. Název prostředí se používá také v názvu skupiny prostředků, kterou vytvoříte v Azure.

  2. Ve složce, která obsahuje tato data JSON, vytvořte soubor s názvem local.settings.jsonsrc :

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

    Tento soubor se vyžaduje při místním spuštění.

Vytvoření a aktivace virtuálního prostředí

Spuštěním těchto příkazů v kořenové složce vytvořte a aktivujte virtuální prostředí s názvem .venv:

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

Pokud Python neinstaluje balíček venv do distribuce Linuxu, spusťte následující příkaz:

sudo apt-get install python3-venv

Spuštění v místním prostředí

  1. Spusťte tento příkaz ze složky aplikace v terminálu nebo na příkazovém řádku:

    func start
    
  1. Spusťte tento příkaz ze složky aplikace v terminálu nebo na příkazovém řádku:

    npm install
    npm start  
    
  1. Když se hostitel Functions spustí ve složce místního projektu, zapíše do výstupu terminálu informace o funkci aktivované časovačem. Měli byste vidět, jak se vaše funkce spuštěná časovačem provádí podle plánu definovaného ve vašem kódu.

    Výchozí plán je */30 * * * * *, který se spouští každých 30 sekund.

  2. Až budete hotovi, ukončete proces hostitele stisknutím ctrl+C v okně func.exe terminálu.

  1. Spuštěním deactivate ukončete virtuální prostředí.

Kontrola kódu (volitelné)

Můžete si projít kód, který definuje funkci triggeru časovače:

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!");
            }
        }
    }
}

Tady si můžete projít kompletní projekt šablony.

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
});

Tady si můžete projít kompletní projekt šablony.

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!')

Tady si můžete projít kompletní projekt šablony.

Jakmile funkci ověříte místně, je čas ji publikovat do Azure.

Nasazení do Azure

Tento projekt je nakonfigurován tak, aby pomocí příkazu azd up nasadil váš kód do nové funkční aplikace v plánu Flex Consumption v Azure.

Návod

Tento projekt zahrnuje sadu souborů Bicep, které používají k vytvoření zabezpečeného nasazení do plánu Flex Consumption, který azd dodržuje osvědčené postupy.

  1. Spuštěním tohoto příkazu vytvořte azd požadované prostředky Azure v Azure a nasaďte projekt kódu do nové aplikace funkcí:

    azd up
    

    Kořenová složka obsahuje azure.yaml definiční soubor vyžadovaný azd.

    Pokud ještě nejste přihlášení, zobrazí se výzva k ověření pomocí účtu Azure.

  2. Po zobrazení výzvy zadejte tyto požadované parametry nasazení:

    Parameter Description
    Předplatné Azure Předplatné, ve kterém se vaše prostředky vytvářejí.
    Umístění Azure Oblast Azure, ve které se má vytvořit skupina prostředků, která obsahuje nové prostředky Azure. Zobrazí se pouze oblasti, které aktuálně podporují plán Flex Consumption.

    Příkaz azd up použije k dokončení těchto úloh nasazení odpověď na tyto výzvy s konfiguračními soubory Bicep:

    • Vytvořte a nakonfigurujte tyto požadované prostředky Azure (ekvivalentní azd provision):

      • Plán Flex Consumption a aplikace funkcí
      • Azure Storage (povinné) a Application Insights (doporučeno)
      • Zásady přístupu a role pro váš účet
      • Připojení mezi službami pomocí spravovaných identit (místo uložených připojovací řetězec)
      • Virtuální síť pro bezpečné spuštění aplikace funkcí i dalších prostředků Azure
    • Zabalte a nasaďte kód do kontejneru nasazení (ekvivalentní).azd deploy Aplikace se pak spustí a spustí v nasazeném balíčku.

    Po úspěšném dokončení příkazu se zobrazí odkazy na prostředky, které jste vytvořili.

Ověření nasazení

Po dokončení nasazení se funkce časovačového spouštění automaticky spustí v Azure podle svého plánu.

  1. Na webu Azure Portal přejděte do nové aplikace funkcí.

  2. V levém menu vyberte Protokol streamu a sledujte spouštění funkcí v reálném čase.

  3. Měly by se zobrazit položky protokolu, které zobrazují, jak je funkce časovače spouštěna podle stanoveného harmonogramu.

Opětovné nasazení kódu

azd up Spusťte příkaz tolikrát, kolikrát potřebujete zřizovat prostředky Azure a nasazovat aktualizace kódu do aplikace funkcí.

Poznámka:

Nasazené soubory kódu se vždy přepíšou nejnovějším balíčkem pro nasazení.

Vaše počáteční odpovědi na azd výzvy a všechny proměnné prostředí vygenerované azd pomocí se ukládají místně ve vašem pojmenovaném prostředí. azd env get-values Pomocí příkazu zkontrolujte všechny proměnné ve vašem prostředí, které se použily při vytváření prostředků Azure.

Vyčistěte zdroje

Po dokončení práce s aplikací funkcí a souvisejícími prostředky pomocí tohoto příkazu odstraňte aplikaci funkcí a související prostředky z Azure a vyhněte se dalším nákladům:

azd down --no-prompt

Poznámka:

Tato --no-prompt možnost dává azd pokyn k odstranění skupiny prostředků bez potvrzení od vás.

Tento příkaz nemá vliv na místní projekt kódu.