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ó.

Important

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.

Example

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.* .
[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));
    logger.LogInformation($"Function Ran. Next timer schedule = {timerInfo.ScheduleStatus?.Next}");
}

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=False) 
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 afunction.jsonfá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"

Attributes

Folyamatban A C#-kódtár a Microsoft.Azure.WebJobs.ExtensionsTimerTriggerAttribute parancsot 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 Description
Schedule 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

Decorators

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:

Property Description
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.jsonhasználatával definiált Python-függvények esetében lásd a Konfiguráció szakaszt.

Annotations

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:

Configuration

Csak a Python v1 programozási modellre vonatkozik.

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

Property Description
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 Description
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.
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%".
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.

Caution

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 .

Usage

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 Example 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.

Example 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

Note

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. 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 Plan Value
Windows All Á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 az értéket a kívánt időzóna nevére a tz-adatbázisban látható módon

Note

WEBSITE_TIME_ZONE és TZ jelenleg nem támogatottak, amikor Linuxon futnak a Flex Consumption vagy a Consumption csomagban. Ebben az esetben a WEBSITE_TIME_ZONE vagy TZ beállítás SSL-lel kapcsolatos problémákat okozhat, és a metrikák leállhatnak az alkalmazás számára.

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 Eastern Standard Time (Linux) értékre America/New_York , majd használja a következő NCRONTAB kifejezést:

"0 0 10 * * *"

Amikor a WEBSITE_TIME_ZONE funkciót használja, az idő az adott időzónában bekövetkező időváltozásokhoz igazodik, beleértve a nyári időszámítást és a standard idő változásait.

TimeSpan

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

Az NCRONTAB-kifejezéstől eltérően 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:sshh 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:

Example 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

Scale-out

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.

Funkciók verziója Setting
2.x (és újabb) AzureFunctionsWebHost__hostid környezeti változó
1.x id host.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.

Troubleshooting

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.

Connections

Az időzítő eseményindítók implicit függőséget képeznek a blobtárolóktól, kivéve, ha helyileg futnak az Azure Functions Core Toolson keresztül. A rendszer blobtárolóval koordinálja a több példányt , amikor az alkalmazás felskálázható. A blobtárolót a gazdagéptároló (AzureWebJobsStorage) kapcsolat használatával éri el. Ha a gazdagéptárolót identitásalapú kapcsolat használatára konfigurálja, az identitásnak rendelkeznie kell a Storage Blob Data Owner szerepkörével, amely a gazdagéptároló alapértelmezett követelménye.

Következő lépések