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:
C# fejlesztői referenciák:
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.