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

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

Ez a Azure Functions fejlesztőkre vonatkozó referenciainformációk. Ha még nem Azure Functions, 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 a 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 a Azure Functions Node.js fejlesztői útmutatót. A v3 és a v4 közötti különbségekről a migrálási útmutatóban olvashat bővebben.

Azure Functions két programozási modellt támogat Python. 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ó: Python fejlesztői útmutató.

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 .NET és a .NET-keretrendszer támogatásához. Az izolált feldolgozói folyamatfüggvények bővítményei Microsoft.Azure.Functions.Worker.Extensions.* névtereket használnak.
  • 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 Microsoft.Azure.WebJobs.Extensions.* névtereket használnak.
[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 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"

Attributes

In-process C#-kódtár a TimerTriggerAttributeMicrosoft függvényt használja. Azure. WebJobs.Extensions míg a feldolgozói folyamat C# kódtár a TimerTriggerAttributeMicrosoft függvényt használja. Azure. Functions.Worker.Extensions.Timer 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

A csak a Python v2 programozási modellre vonatkozik

Dekoratőrrel definiált Python v2-függvények esetében a schedule a következő tulajdonságokat:

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.json használatával definiált Python függvényekért lásd a Configuration 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

A csak az 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
ütemterv 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 a Azure portálon.
direction "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 portálon.
név Annak a változónak a neve, amely az időzítő objektumot jelöli a függvénykódban.
ütemterv 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

Azure Functions az NCronTab kódtárat használja az NCRONTAB-kifejezések értelmezéséhez. 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 NCRONTAB-kifejezésekre, amelyeket az időzítő eseményindítójára használhat Azure Functions.

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, a Azure portál 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 az értéket a kívánt időzóna nevére a Windows parancs 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 (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 során. Ha minden nap 10:00-kor szeretné aktiválni az időzítő eseményindítóját, hozzon létre egy alkalmazásbeállítást WEBSITE_TIME_ZONE nevű függvényalkalmazáshoz, állítsa az értéket Eastern Standard Time (Windows) vagy America/New_York (Linux) értékre, 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

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ő 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, olvassa el a Az időzítő által aktivált függvények nem aktivált működésével kapcsolatos problémák bejelentése és jelentése.

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 a 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