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


Időzítő eseményindító az Azure Functionshez

Ez a cikk bemutatja, hogyan használhatók időzítő-eseményindítók az Azure Functionsben. Az időzítő eseményindítója lehetővé teszi egy függvény ütemezés szerinti futtatását.

Ezek az Azure Functions-fejlesztők referenciaadatai. Ha még nem használja az Azure Functionst, kezdje a következő erőforrásokkal:

Az időzítő által aktivált függvények manuális futtatásával kapcsolatos információkért lásd : Nem HTTP-aktivált függvény manuális futtatása.

Ennek a kötésnek a támogatása minden fejlesztési környezetben automatikusan megtörténik. Nem kell manuálisan telepítenie a csomagot, és nem kell regisztrálnia a bővítményt.

Az időzítőbővítménycsomag forráskódja az azure-webjobs-sdk-extensions GitHub-adattárban található.

Fontos

Ez a cikk lapokat használ a Node.js programozási modell több verziójának támogatásához. A v4-modell általánosan elérhető, és úgy lett kialakítva, hogy rugalmasabb és intuitívabb felhasználói élményt nyújtson JavaScript- és TypeScript-fejlesztők számára. A v4-modell működésével kapcsolatos további információkért tekintse meg az Azure Functions Node.js fejlesztői útmutatóját. A v3 és a v4 közötti különbségekről a migrálási útmutatóban olvashat bővebben.

Az Azure Functions két Python-programozási modellt támogat. A kötések definiálásának módja a választott programozási modelltől függ.

A Python v2 programozási modell lehetővé teszi, hogy a kötéseket dekorátorokkal definiálja közvetlenül a Python-függvénykódban. További információt a Python fejlesztői útmutatójában talál.

Ez a cikk mindkét programozási modellt támogatja.

Példa

Ez a példa egy C# függvényt mutat be, amely minden alkalommal végrehajtja, amikor a percek értéke ötrel osztható. Ha például a függvény 18:55:00-kor indul, a következő végrehajtás 19:00:00-kor történik. A TimerInfo függvény egy objektumot ad át.

A C#-függvények a következő C#-módok egyikével hozhatók létre:

  • Izolált feldolgozómodell: Lefordított C# függvény, amely a futtatókörnyezettől elkülönített feldolgozói folyamatban fut. Izolált feldolgozói folyamat szükséges az LTS- és nem LTS-verziókon futó C#-függvények támogatásához .NET és .NET-keretrendszer. Az izolált feldolgozói folyamatfüggvények bővítményei névtereket használnak Microsoft.Azure.Functions.Worker.Extensions.* .
  • Folyamaton belüli modell: Lefordított C# függvény, amely ugyanabban a folyamatban fut, mint a Functions-futtatókörnyezet. A modell egy változatában a Functions C#-szkriptekkel futtatható, amely elsősorban a C#-portál szerkesztéséhez támogatott. A folyamaton belüli függvények bővítményei névtereket használnak Microsoft.Azure.WebJobs.Extensions.* .
//<docsnippet_fixed_delay_retry_example>
[Function(nameof(TimerFunction))]
[FixedDelayRetry(5, "00:00:10")]
public static void Run([TimerTrigger("0 */5 * * * *")] TimerInfo timerInfo,
    FunctionContext context)
{
    var logger = context.GetLogger(nameof(TimerFunction));

Az alábbi példafüggvény öt percenként aktiválja és hajtja végre. A @TimerTrigger függvény széljegyzete a CRON-kifejezésekkel megegyező sztringformátummal határozza meg az ütemezést.

@FunctionName("keepAlive")
public void keepAlive(
  @TimerTrigger(name = "keepAliveTrigger", schedule = "0 */5 * * * *") String timerInfo,
      ExecutionContext context
 ) {
     // timeInfo is a JSON string, you can deserialize it to an object using your favorite JSON library
     context.getLogger().info("Timer is triggered: " + timerInfo);
}

Az alábbi példa egy időzítő-eseményindító kötését és a kötést használó függvénykódot mutatja be, ahol az időzítőt képviselő példányt a rendszer átadja a függvénynek. A függvény naplót ír, amely jelzi, hogy ez a függvényhívás egy kihagyott ütemezési esemény miatt van-e. A példa attól függ, hogy a v1 vagy v2 Python programozási modellt használja-e.

import datetime
import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="mytimer")
@app.timer_trigger(schedule="0 */5 * * * *", 
              arg_name="mytimer",
              run_on_startup=True) 
def test_function(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.utcnow().replace(
        tzinfo=datetime.timezone.utc).isoformat()
    if mytimer.past_due:
        logging.info('The timer is past due!')
    logging.info('Python timer trigger function ran at %s', utc_timestamp)

Az alábbi példa egy időzítő trigger TypeScript függvényét mutatja be.

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

export async function timerTrigger1(myTimer: Timer, context: InvocationContext): Promise<void> {
    context.log('Timer function processed request.');
}

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    handler: timerTrigger1,
});

Az alábbi példa egy időzítőindító JavaScript-függvényét mutatja be.

const { app } = require('@azure/functions');

app.timer('timerTrigger1', {
    schedule: '0 */5 * * * *',
    handler: (myTimer, context) => {
        context.log('Timer function processed request.');
    },
});

A kötési adatok a function.json fájlban:

{
    "schedule": "0 */5 * * * *",
    "name": "myTimer",
    "type": "timerTrigger",
    "direction": "in"
}

A run.ps1 fájlban az időzítőfüggvény kódja a következő:

# Input bindings are passed in via param block.
param($myTimer)

# Get the current universal time in the default string format.
$currentUTCtime = (Get-Date).ToUniversalTime()

# The 'IsPastDue' property is 'true' when the current function invocation is later than scheduled.
if ($myTimer.IsPastDue) {
    Write-Host "PowerShell timer is running late!"
}

# Write an information log with the current time.
Write-Host "PowerShell timer trigger function ran! TIME: $currentUTCtime"

Attribútumok

A folyamatban lévő C#-kódtár a Microsoft.Azure.WebJobs.Extensions TimerTriggerAttribute függvényt használja, míg az izolált feldolgozói folyamat C# könyvtára a Microsoft.Azure.Functions.Worker.Extensions.Timer függvényt használja a függvény definiálásához. A C#-szkript ehelyett function.json konfigurációs fájlt használ.

Attribútumtulajdonság Leírás
Ütemezés CRON-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a jelekbe % burkolt alkalmazásbeállítás nevére, például %ScheduleAppSetting%.
RunOnStartup Ha true, a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A RunOnStartup-t ritkán kell beállítani true, különösen éles környezetben.
UseMonitor Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false

Dekorátorok

Csak a Python v2 programozási modellre vonatkozik.

A dekoratőrrel definiált Python v2-függvények esetében a következő tulajdonságok a schedulekövetkezők:

Tulajdonság Leírás
arg_name Annak a változónak a neve, amely az időzítő objektumot jelöli a függvénykódban.
schedule NCRONTAB-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a táblákba burkolt alkalmazásbeállítási névre, ahogyan ebben a példában % is látható: "%ScheduleAppSetting%".
run_on_startup Ha true, a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A runOnStartup-t ritkán kell beállítani true, különösen éles környezetben.
use_monitor Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false

A function.json használatával definiált Python-függvények esetében lásd a Konfiguráció szakaszt.

Jegyzetek

A @TimerTrigger függvény széljegyzete ugyanazt a schedule sztringformátumot határozza meg, mint a CRON-kifejezések. A széljegyzet a következő beállításokat támogatja:

Konfiguráció

Csak a Python v1 programozási modellre vonatkozik.

Az alábbi táblázat a metódusnak app.timer() átadott objektumon options beállítható tulajdonságokat ismerteti.

Tulajdonság Leírás
schedule NCRONTAB-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a táblákba burkolt alkalmazásbeállítási névre, ahogyan ebben a példában % is látható: "%ScheduleAppSetting%".
runOnStartup Ha true, a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A runOnStartup-t ritkán kell beállítani true, különösen éles környezetben.
useMonitor Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false

Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Leírás
type "timerTrigger" értékre kell állítani. Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót az Azure Portalon.
direction "in" értékre kell állítani. Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót az Azure Portalon.
név Annak a változónak a neve, amely az időzítő objektumot jelöli a függvénykódban.
schedule NCRONTAB-kifejezés vagy TimeSpan-érték. Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható. Az ütemezési kifejezést elhelyezheti egy alkalmazásbeállításban, és beállíthatja ezt a tulajdonságot a táblákba burkolt alkalmazásbeállítási névre, ahogyan ebben a példában % is látható: "%ScheduleAppSetting%".
runOnStartup Ha true, a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet elindul például akkor, amikor a függvényalkalmazás felébred, miután inaktivitás miatt tétlen állapotba került, amikor a függvényalkalmazás a függvény változásai miatt újraindul, és amikor a függvényalkalmazás felskálázható. Óvatosan használja. A runOnStartup-t ritkán kell beállítani true, különösen éles környezetben.
useMonitor Állítsa true vagy false értékre annak megadásához, hogy az ütemezés monitorozva legyen-e. Az ütemezés monitorozása megőrzi az ütemezési eseményeket, így biztosítva az ütemezés megfelelő karbantartását még akkor is, ha a függvényalkalmazás-példányok újraindulnak. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true , amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. Azoknál az ütemezéseknél, amelyek percenként többször aktiválnak, az alapértelmezett érték a .false

Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues.

Figyelemfelhívás

Ne állítsa a runOnStartup parancsot élesre true . Ezzel a beállítással a kód végrehajtása rendkívül kiszámíthatatlan időpontokban történik. Bizonyos éles beállítások esetén ezek a további végrehajtások jelentősen magasabb költségeket eredményezhetnek a használatalapú csomagban üzemeltetett alkalmazások esetében. Ha például a runOnStartup engedélyezve van, a rendszer meghívja az eseményindítót a függvényalkalmazás méretezésekor. A runOnStartup éles környezetben való engedélyezése előtt győződjön meg arról, hogy teljes mértékben tisztában van a függvények éles viselkedésével.

A teljes példákért tekintse meg a Példa szakaszt .

Használat

Időzítő eseményindító függvény meghívásakor a függvény egy időzítőobjektumot ad át. Az alábbi JSON egy példa az időzítő objektumra.

{
    "Schedule":{
        "AdjustForDST": true
    },
    "ScheduleStatus": {
        "Last":"2016-10-04T10:15:00+00:00",
        "LastUpdated":"2016-10-04T10:16:00+00:00",
        "Next":"2016-10-04T10:20:00+00:00"
    },
    "IsPastDue":false
}
{
    "schedule":{
        "adjustForDST": true
    },
    "scheduleStatus": {
        "last":"2016-10-04T10:15:00+00:00",
        "lastUpdated":"2016-10-04T10:16:00+00:00",
        "next":"2016-10-04T10:20:00+00:00"
    },
    "isPastDue":false
}

A isPastDue tulajdonság az, true amikor az aktuális függvényhívás későbbi, mint ütemezett. Egy függvényalkalmazás újraindítása például a meghívás kihagyását okozhatja.

NCRONTAB-kifejezések

Az Azure Functions az NCronTab kódtár használatával értelmezi az NCRONTAB-kifejezéseket. Az NCRONTAB kifejezés hasonló a CRON-kifejezéshez, azzal a kivételével, hogy az elején egy további hatodik mezőt tartalmaz, amelyet másodpercek alatt használnak az idő pontosságához:

{second} {minute} {hour} {day} {month} {day-of-week}

Minden mező a következő típusú értékek egyikével rendelkezhet:

Típus Példa Aktivált állapotban
Egy adott érték 0 5 * * * * A nap minden órájában egyszer, óránként 5. percben
Minden érték (*) 0 * 5 * * * Az óra minden percében, az 5. órában
Tartomány (- operátor) 5-7 * * * * * Percenként háromszor – 5–7 másodpercben minden nap minden órájának minden percében
Értékek halmaza (, operátor) 5,8,10 * * * * * Percenként háromszor – 5, 8 és 10 másodpercben minden nap minden órájának minden percében
Intervallumérték (/ operátor) 0 */5 * * * * Óránként 12-szer - minden nap minden órájának 5. percének második 0-ján

Hónapok vagy napok megadásához numerikus értékeket, neveket vagy nevek rövidítéseit használhatja:

  • Napokra a numerikus értékek 0 és 6 között vannak, ahol a 0 vasárnap kezdődik.
  • A nevek angolul vannak. Például: Monday, January.
  • A nevek nem érzékenyek a kis- és nagybetűkre.
  • A nevek rövidítve is lehetnek. A rövidítésekhez három betű használatát javasoljuk. Például: Mon, Jan.

NCRONTAB-példák

Íme néhány példa az Azure Functions időzítő eseményindítójára használható NCRONTAB-kifejezésekre.

Példa Aktivált állapotban
0 */5 * * * * öt percenként egyszer
0 0 * * * * minden óra tetején egyszer
0 0 */2 * * * két óránként egyszer
0 0 9-17 * * * óránként 9:00 és 17:00 között
0 30 9 * * * minden nap 9:30-kor
0 30 9 * * 1-5 minden hétköznap 9:30-kor
0 30 9 * Jan Mon januárban minden hétfőn 9:30-kor

Feljegyzés

Az NCRONTAB kifejezés öt és hat mezőformátumot is támogat. A hatodik mezőpozíció egy másodperces érték, amely a kifejezés elején van elhelyezve. Ha a CRON-kifejezés érvénytelen, az Azure Portal függvénytesztje 404-es hibát jelenít meg, ha az Application Insights csatlakoztatva van, a rendszer további részleteket naplóz.

NCRONTAB időzónák

Az NCRONTAB-kifejezésben szereplő számok időre és dátumra vonatkoznak, nem időtartományra. A mező 5-öse hour például 5:00-ra hivatkozik, nem pedig 5 óránként.

A CRON-kifejezések esetén használt alapértelmezett időzóna az egyezményes világidő (UTC). Ha a CRON-kifejezést egy másik időzóna alapján szeretné beállítani, hozzon létre egy alkalmazásbeállítást a függvényalkalmazáshoz.WEBSITE_TIME_ZONE

A beállítás értéke az operációs rendszertől és a függvényalkalmazás alapjául szolgáló csomagtól függ.

Operációs rendszer Csomag Érték
A Windows Mind Állítsa be az értéket a kívánt időzóna nevére a Windows parancs által megadott párok második sora alapján tzutil.exe /L
Linux Prémium
Dedikált
Állítsa be az értéket a kívánt időzóna nevére a tz-adatbázisban látható módon.

Feljegyzés

WEBSITE_TIME_ZONE és TZ jelenleg nem támogatottak, ha a Linuxon futó használatalapú csomagban futnak. Ebben az esetben ssl-sel kapcsolatos problémákat állíthat be WEBSITE_TIME_ZONE vagy TZ hozhat létre, és a metrikák leállhatnak az alkalmazás működésében.

Például az USA keleti ideje (amelyet Eastern Standard Time a (Windows) vagy America/New_York a (Linux) képviselnek) jelenleg UTC-05:00-t használ a téli idő szerint, és UTC-04:00-t a nyári időszámítás során. Ha minden nap 10:00-kor szeretné aktiválni az időzítőt, hozzon létre egy alkalmazásbeállítást a függvényalkalmazáshozWEBSITE_TIME_ZONE, állítsa az értéket (Windows) vagy America/New_York (Linux) értékre Eastern Standard Time , majd használja a következő NCRONTAB kifejezést:

"0 0 10 * * *"

Ha használja WEBSITE_TIME_ZONE az időt, a megadott időzónában az idő megváltozik, beleértve a nyári időszámítást és a téli idő változásait.

időtartam

Az A TimeSpan csak App Service-csomagon futó függvényalkalmazásokhoz használható.

Az NCRONTAB-kifejezéssel ellentétben egy TimeSpan érték határozza meg az egyes függvényhívások közötti időintervallumot. Ha egy függvény a megadott időköznél hosszabb futás után befejeződik, az időzítő azonnal újra meghívja a függvényt.

Sztringként kifejezve a TimeSpan formátum hh:mm:ss hh 24-nél kisebb. Ha az első két számjegy 24 vagy annál nagyobb, a formátum a következő dd:hh:mm. Íme néhány példa:

Példa Aktivált állapotban
"01:00:00" óránként
"00:01:00" percenként
"25:00:00:00" 25 naponta
"1.00:00:00" minden nap

Kiterjesztés

Ha egy függvényalkalmazás több példányra skálázódik, az időzítő által aktivált függvények egyetlen példánya fut az összes példányon. Nem aktiválódik újra, ha még mindig fut egy folyamatban lévő hívás.

A Storage-t megosztó függvényalkalmazások

Ha olyan függvényalkalmazások között oszt meg tárfiókokat, amelyek nincsenek üzembe helyezve az App Service-ben, előfordulhat, hogy explicit módon kell hozzárendelnie a gazdagépazonosítót az egyes alkalmazásokhoz.

Functions-verzió Beállítás
2.x (és újabb) AzureFunctionsWebHost__hostid környezeti változó
1.x idhost.json

Kihagyhatja az azonosító értéket, vagy manuálisan beállíthatja az egyes függvényalkalmazások azonosítási konfigurációját egy másik értékre.

Az időzítő-eseményindító tárterület-zárolással biztosítja, hogy csak egy időzítőpéldány legyen, ha egy függvényalkalmazás több példányra skálázódik. Ha két függvényalkalmazás azonos azonosító konfigurációval rendelkezik, és mindegyik időzítő eseményindítót használ, csak egy időzítő fut.

Újrapróbálkozás viselkedése

Az üzenetsor-eseményindítóval ellentétben az időzítő eseményindítója nem próbálkozik újra egy függvény meghibásodása után. Ha egy függvény meghibásodik, a program csak a következő időpontban hívja meg újra az ütemezést.

Időzítő eseményindító manuális meghívása

Az Azure Functions időzítő eseményindítója egy HTTP-webhookot biztosít, amely meghívható a függvény manuális aktiválásához. Ez rendkívül hasznos lehet a következő helyzetekben.

  • Integrációs tesztelés
  • Pontcserék füstteszt vagy bemelegítési tevékenység részeként
  • Egy függvény kezdeti üzembe helyezése, amely azonnal feltölt egy gyorsítótárat vagy egy keresési táblát egy adatbázisban

Az időzítő által aktivált függvény manuális meghívásának részleteiért tekintse meg a nem HTTP által aktivált függvények manuális futtatását.

Hibaelhárítás

Ha tudni szeretné, hogy mi a teendő, ha az időzítő eseményindítója nem a várt módon működik, tekintse meg az időzítő által aktivált függvényekkel kapcsolatos problémák kivizsgálását és jelentését, amelyek nem aktiválódnak.

Következő lépések