Időzítő eseményindító Azure Functions

Ez a cikk az időzítő eseményindítók Azure Functions való működését ismerteti. Az időzítő eseményindítóval ütemezés szerint futtathat függvényeket.

Ezek a referenciainformációk Azure Functions fejlesztők számára. Ha most ismerkedik a Azure Functions, kezdje az alábbi forrásanyagokkal:

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

A kötés támogatása minden fejlesztési környezetben automatikusan elérhető. 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ény-csomag forráskódja az azure-webjobs-sdk-extensions GitHub adattárban található.

Példa

Ez a példa egy C#-függvényt mutat be, amely minden alkalommal végrehajtja, amikor a percek értéke ötel osztható. Ha például a függvény 18:55:00-kor kezdődik, 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 az alábbi C#-módok egyikével hozhatók létre:

  • Folyamaton belüli osztálytár: lefordított C#-függvény, amely ugyanabban a folyamatban fut, mint a Functions-futtatókörnyezet.
  • Izolált folyamatosztály-kódtár: lefordított C#-függvény, amely a futtatókörnyezettől elkülönített folyamatban fut. A .NET 5.0-n futó C#-függvények támogatásához elkülönített folyamat szükséges.
  • C#-szkript: elsősorban C#-függvények Azure Portal való létrehozásakor használatos.
[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
{
    if (myTimer.IsPastDue)
    {
        log.LogInformation("Timer is running late!");
    }
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}

Az alábbi példafüggvény öt percenként aktiválódik és fut. A @TimerTrigger függvény széljegyzete az ütemezést a CRON-kifejezésekkel megegyező sztringformátumban határozza meg.

@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 mutatja be egy function.json fájlban és a kötést használó függvénykódban, ahol az időzítőt jelölő példányt továbbítja a függvénynek. A függvény egy naplót ír, amely jelzi, hogy a függvényhívást egy kihagyott ütemezési esemény okozza-e.

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

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

A JavaScript-kód a következő:

module.exports = async function (context, myTimer) {
    var timeStamp = new Date().toISOString();

    if (myTimer.isPastDue)
    {
        context.log('Node is running late!');
    }
    context.log('Node timer trigger function ran!', timeStamp);   
};

A run.ps1 fájlban a következő időzítőfüggvény-kód található:

# 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"

Itt látható a Python kód, amelyben a függvénynek átadott objektum azure.functions.TimerRequest objektum típusú.

import datetime
import logging

import azure.functions as func


def main(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.now(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)

Attribútumok

A folyamaton belüli és az izolált C #-kódtárak a TimerTriggerAttribute attribútummal határozzák meg a függvényt.

A C#-szkript ehelyett egy 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 táblákba % burkolt alkalmazásbeállítás nevére.%ScheduleAppSetting%
RunOnStartup Ha true, a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet például akkor indul el, amikor a függvényalkalmazás inaktív állapotba kerülése után inaktivitás miatt felébred. amikor a függvényalkalmazás újraindul a függvény változásai miatt, és amikor a függvényalkalmazás felskálázható. Óvatosan használja.A RunOnStartup ritkán fordul elő, ha valaha is be van állítva true, különösen éles környezetben.
UseMonitor Beállíthatja vagy truefalse jelezheti, hogy az ütemezést figyelni kell-e. Az ütemezés monitorozása továbbra is megőrzi az ütemezési előfordulásokat, így a függvényalkalmazás-példányok újraindításakor is biztosíthatja az ütemezés megfelelő karbantartását. Ha nincs explicit módon beállítva, az alapértelmezett érték az olyan ütemezések esetében van true megadva, amelyek ismétlődési időköze 1 percnél hosszabb vagy egyenlő. A percenként többször aktivált ütemezések esetében az alapértelmezett érték a false.

Széljegyzetek

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

Konfiguráció

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
Típus "timerTrigger" értékre kell állítani. Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót a Azure Portal.
Irányba "in" értékre kell állítani. Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót a Azure Portal.
név Annak a változónak a neve, amely az időzítőobjektumot jelöli a függvénykódban.
Ütemezése 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 az alkalmazásbeállítás neveként, a következő példában % látható módon: "%ScheduleAppSetting%".
runOnStartup Ha true, akkor a függvény a futtatókörnyezet indításakor lesz meghívva. A futtatókörnyezet például akkor indul el, amikor a függvényalkalmazás inaktív állapotba kerülése után inaktivitás miatt felébred. 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 ritkán fordul elő, ha valaha is be van állítva true, különösen éles környezetben.
useMonitor Beállíthatja vagy truefalse jelezheti, hogy az ütemezést figyelni kell-e. Az ütemezés monitorozása megőrzi az ütemezési előfordulásokat, így biztosíthatja, hogy az ütemezés megfelelően legyen karbantartva 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ő. A percenként többször aktivált ütemezések esetében az alapértelmezett érték a következő 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 be a runOnStartuptrue beállítást éles környezetben. Ezzel a beállítással a kód rendkívül kiszámíthatatlan időpontokban fut. Bizonyos éles környezetben ezek az extra 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
}

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

NCRONTAB-kifejezések

Azure Functions az NCronTab kódtárat használja az NCRONTAB-kifejezések értelmezéséhez. Az NCRONTAB kifejezés hasonló a CRON-kifejezésekhez, azzal a kivételrel, hogy az elején egy további hatodik mezőt tartalmaz, amelyet másodpercek alatt idő pontosságra használhat:

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

Minden mező a következő típusú értékekkel rendelkezhet:

Típus Példa Aktivált állapotban
Egy adott érték 0 5 * * * * A nap minden órájában, minden óra 5. percében
Minden érték (*) 0 * 5 * * * Az óra minden percében, 5-kor kezdődően
Tartomány (- operátor) 5-7 * * * * * Percenként háromszor – 5–7 másodpercben minden nap minden órájának minden percében
Értékkészlet (, 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 * * * * 12-szer óránként - minden nap 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:

  • Napok esetén a numerikus értékek 0 és 6 között vannak, ahol a 0 vasárnaptal kezdődik.
  • A nevek angol nyelvűek. Például: Monday, January.
  • A nevek nem megkülönböztetik a kis- és nagybetűket.
  • A nevek rövidítve is használhatók. Három betű az ajánlott rövidítési hossz. 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

Megjegyzés

Az NCRONTAB kifejezés öt éshat mezőformátumot is támogat. A hatodik mezőpozíció egy másodperces érték, amely a kifejezés elején van elhelyezve.

NCRONTAB időzónák

A CRON-kifejezésekben szereplő számok időre és dátumra hivatkoznak, nem időtartományra. A mezőben szereplő hour 5 például 5:00-ra hivatkozik, nem pedig 5 óránként.

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

Ennek a beállításnak az értéke az operációs rendszertől és a függvényalkalmazás futtatásának megtervezésétől függ.

Operációs rendszer Felkészülés Érték
Windows Mind Állítsa az értéket a kívánt időzóna nevére a Windows parancs által megadott párok második sorának megfelelőentzutil.exe /L
Linux Prémium
Dedikált
Állítsa az értéket a kívánt időzóna nevére a tz-adatbázisban látható módon.

Megjegyzés

WEBSITE_TIME_ZONE A jelenleg nem támogatott a Linux-használat csomagban.

Például az USA keleti ideje (amelyet Eastern Standard Time (Windows) vagy America/New_York (Linux) jelöl) 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 szerint. Ha minden nap 10:00-kor szeretne aktiválni egy időzítő eseményindí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 is.

időtartam

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

A CRON-kifejezésekkel ellentétben az 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:sshh 24-nél kisebb. Ha az első két számjegy 24 vagy nagyobb, a formátum .dd:hh:mm Íme néhány példa:

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

Bővítés

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

Függvényalkalmazások megosztása Storage

Ha olyan függvényalkalmazások között oszt meg tárfiókokat, amelyek nincsenek telepítve az App Service-ben, előfordulhat, hogy külön gazdagép-azonosítót kell hozzárendelnie az egyes alkalmazásokhoz.

Függvények verziója Beállítás
2.x (és újabb) AzureFunctionsWebHost__hostid környezeti változó
1.x id a host.json fájlban

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árolási zárolással biztosítja, hogy csak egy időzítőpéldány legyen, amikor egy függvényalkalmazás több példányra skálázódik fel. 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ótól eltérően az időzítő eseményindító nem próbálkozik újra egy függvény meghibásodása után. Ha egy függvény meghibásodik, a függvény csak az ütemezés következő alkalommal lesz meghívva.

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

A 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ő forgatókönyvekben.

  • Integrációtesztelés
  • Pontcserék füstteszt vagy bemelegítési tevékenység részeként
  • Egy függvény kezdeti üzembe helyezése a gyorsítótár vagy keresési tábla adatbázisba való azonnali feltöltéséhez

Az időzítő által aktivált függvények 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 a nem aktivált időzítőfunkciókkal kapcsolatos problémák kivizsgálását és jelentését.

Következő lépések