Megosztás a következőn keresztül:


Rövid útmutató: Ütemezett feladatok futtatása az Azure Functions használatával

Ebben a cikkben az Azure Developer CLI (azd) használatával hoz létre időzítő triggerfüggvényt egy ütemezett feladat Azure Functionsben való futtatásához. A kód helyi ellenőrzése után üzembe helyezi azt egy új kiszolgáló nélküli függvényalkalmazásra, amely egy Rugalmas Felhasználási tervben fut az Azure Functionsben.

A projektforrás a függvényalkalmazás és a kapcsolódó erőforrások létrehozására és a kód Azure-ban való üzembe helyezésére szolgál azd . Ez az üzembe helyezés a biztonságos és méretezhető Azure Functions-környezetek jelenlegi ajánlott eljárásait követi.

Alapértelmezés szerint a Flex Consumption csomag egy használatalapú fizetéses számlázási modellt követ, ami azt jelenti, hogy ezt a cikket elvégezheti, és csak néhány USD cent vagy annál kisebb költséggel jár az Azure-fiókjában.

Fontos

Bár az ütemezett feladatok futtatása minden nyelv esetében támogatott, ebben a rövid útmutatóban jelenleg csak a C#, a Python és a TypeScript esetében vannak példák. A rövid útmutató végrehajtásához válasszon egyet a cikk tetején található támogatott nyelvek közül.

Előfeltételek

A projekt inicializálása

azd init A parancs használatával helyi Azure Functions-kódprojektet hozhat létre egy sablonból.

  1. A helyi terminálban vagy parancssorban futtassa ezt a azd init parancsot egy üres mappában:

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

    Ez a parancs lekéri a projektfájlokat a sablontárházból , és inicializálja a projektet az aktuális mappában. A -e jelölő megadja az aktuális környezet nevét. Ebben azdaz esetben a környezet egy egyedi üzembehelyezési környezetet tart fenn az alkalmazás számára, és egynél több definiálható. A környezet nevét az Azure-ban létrehozott erőforráscsoport nevében is használja a rendszer.

  2. Futtassa ezt a parancsot az alkalmazásmappához való navigáláshoz:

    cd src
    
  3. Hozzon létre egy local.settings.json nevű fájlt a src JSON-adatokat tartalmazó mappában:

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

    Ez a fájl helyi futtatáskor szükséges.

  1. A helyi terminálban vagy parancssorban futtassa ezt a azd init parancsot egy üres mappában:

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

    Ez a parancs lekéri a projektfájlokat a sablontárházból , és inicializálja a projektet az aktuális mappában. A -e jelölő megadja az aktuális környezet nevét. Ebben azdaz esetben a környezet egy egyedi üzembehelyezési környezetet tart fenn az alkalmazás számára, és egynél több definiálható. A környezet nevét az Azure-ban létrehozott erőforráscsoport nevében is használja a rendszer.

  2. Hozzon létre egy local.settings.json nevű fájlt a src JSON-adatokat tartalmazó mappában:

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

    Ez a fájl helyi futtatáskor szükséges.

  1. A helyi terminálban vagy parancssorban futtassa ezt a azd init parancsot egy üres mappában:

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

    Ez a parancs lekéri a projektfájlokat a sablontárházból , és inicializálja a projektet az aktuális mappában. A -e jelölő megadja az aktuális környezet nevét. Ebben azdaz esetben a környezet egy egyedi üzembehelyezési környezetet tart fenn az alkalmazás számára, és egynél több definiálható. A környezet nevét az Azure-ban létrehozott erőforráscsoport nevében is használja a rendszer.

  2. Hozzon létre egy local.settings.json nevű fájlt a src JSON-adatokat tartalmazó mappában:

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

    Ez a fájl helyi futtatáskor szükséges.

Virtuális környezet létrehozása és aktiválása

A gyökérmappában futtassa ezeket a parancsokat a következő nevű .venvvirtuális környezet létrehozásához és aktiválásához:

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

Ha a Python nem telepíti a venv-csomagot a Linux-disztribúcióra, futtassa a következő parancsot:

sudo apt-get install python3-venv

Futtatás a helyi környezetben

  1. Futtassa ezt a parancsot az alkalmazásmappából egy terminálban vagy parancssorban:

    func start
    
  1. Futtassa ezt a parancsot az alkalmazásmappából egy terminálban vagy parancssorban:

    npm install
    npm start  
    
  1. Amikor a Functions-gazdagép elindul a helyi projektmappában, adatokat ír az időzítő által aktivált függvényről a terminál kimenetére. Az időzítő által aktivált függvénynek a kódban meghatározott ütemezés alapján kell futnia.

    Az alapértelmezett ütemezés az */30 * * * * *, amely 30 másodpercenként fut.

  2. Ha elkészült, a gazdafolyamat leállításához nyomja le a Ctrl+C billentyűkombinációt a func.exe terminálablakban.

  1. Futtassa deactivate a virtuális környezet leállítását.

A kód áttekintése (nem kötelező)

Áttekintheti az Időzítő eseményindító függvényt meghatározó kódot:

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

A teljes sablonprojektet itt tekintheti át.

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

A teljes sablonprojektet itt tekintheti át.

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

A teljes sablonprojektet itt tekintheti át.

Miután helyben ellenőrizte a függvényt, ideje közzétenni az Azure-ban.

Telepítés az Azure-ra

Ez a projekt úgy van beállítva, hogy a azd up parancs használatával helyezze üzembe a kódot egy új Function App-re egy Azure Rugalmas Felhasználási tervben.

Jótanács

Ez a projekt olyan Bicep-fájlokat tartalmaz, amelyek azd az ajánlott eljárásokat követve biztonságos üzembe helyezést hoznak létre egy Rugalmas használatú csomagban.

  1. Futtassa ezt a parancsot, hogy azd létrehozza a szükséges Azure-erőforrásokat az Azure-ban, és üzembe helyezze a kódprojektet az új függvényalkalmazásban:

    azd up
    

    A gyökérmappa tartalmazza a azure.yaml szükséges definíciófájlt azd.

    Ha még nem jelentkezett be, a rendszer arra kéri, hogy hitelesítse az Azure-fiókjával.

  2. Amikor a rendszer kéri, adja meg a szükséges üzembehelyezési paramétereket:

    Paraméter Description
    Azure-előfizetés Előfizetés, amelyben az erőforrások létrejönnek.
    Azure-lokáció Azure-régió, amelyben létre kell hozni az új Azure-erőforrásokat tartalmazó erőforráscsoportot. Csak azok a régiók jelennek meg, amelyek jelenleg támogatják a Rugalmas felhasználás csomagot.

    A azd up parancs a Bicep konfigurációs fájljaival a következő kérdésekre adott választ használja az üzembehelyezési feladatok elvégzéséhez:

    • Hozza létre és konfigurálja ezeket a szükséges Azure-erőforrásokat (a következőnek felel meg azd provision):

      • Rugalmas kihasználtságú csomag és függvényalkalmazás
      • Azure Storage (kötelező) és Application Insights (ajánlott)
      • Hozzáférési szabályzatok és szerepkörök a fiókhoz
      • Szolgáltatásközi kapcsolatok felügyelt identitásokkal (tárolt kapcsolati sztring helyett)
      • Virtuális hálózat a függvényalkalmazás és a többi Azure-erőforrás biztonságos futtatásához
    • Csomagolja és telepítse a kódot az üzembehelyezési tárolóba (ez egyenértékű a következőval azd deploy). Az alkalmazás ezután elindul, és az üzembe helyezett csomagban fut.

    A parancs sikeres végrehajtása után megjelennek a létrehozott erőforrásokra mutató hivatkozások.

Az üzembe helyezés ellenőrzése

Az üzembe helyezés befejezése után az Időzítő eseményindító függvénye az ütemezése alapján automatikusan elindul az Azure-ban.

  1. Az Azure Portalon nyissa meg az új függvényalkalmazást.

  2. Válassza a Naplófolyam lehetőséget a függvényvégrehajtások valós idejű monitorozásához a bal oldali menüben.

  3. Olyan naplóbejegyzéseket kell látnia, amelyek azt mutatják, hogy az időzítő triggerfüggvénye az ütemezés szerint fut.

A kód ismételt üzembe helyezése

Futtassa a azd up parancsot annyiszor, amennyi szükséges az Azure-erőforrások kiépítéséhez és a kódfrissítések üzembe helyezéséhez a függvényalkalmazásban.

Megjegyzés:

Az üzembe helyezett kódfájlokat mindig felülírja a legújabb üzembehelyezési csomag.

A kérésekre adott kezdeti válaszokat azd és az általuk azd létrehozott környezeti változókat a rendszer helyileg tárolja a nevesített környezetben. azd env get-values A paranccsal áttekintheti a környezet összes olyan változóját, amelyet az Azure-erőforrások létrehozásakor használtak.

Erőforrások tisztítása

Ha végzett a függvényalkalmazással és a kapcsolódó erőforrásokkal, ezzel a paranccsal törölheti a függvényalkalmazást és annak kapcsolódó erőforrásait az Azure-ból, és elkerülheti a további költségek felmerülését:

azd down --no-prompt

Megjegyzés:

A --no-prompt beállítás arra utasítja azd , hogy az erőforráscsoportot anélkül törölje, hogy ön megerősítést kap.

Ez a parancs nincs hatással a helyi kódprojektre.