Pemicu timer untuk Azure Functions
Artikel ini menjelaskan cara bekerja dengan pemicu timer di Azure Functions. Pemicu timer memungkinkan Anda menjalankan fungsi sesuai jadwal.
Ini adalah informasi referensi untuk pengembang Azure Functions. Jika Anda baru menggunakan Azure Functions, mulailah dengan sumber daya berikut ini:
Untuk informasi tentang cara menjalankan fungsi yang dipicu timer secara manual, lihat Menjalankan fungsi yang dipicu oleh HTTP secara manual.
Dukungan untuk pengikatan data ini secara otomatis disediakan di semua lingkungan pengembangan. Anda tidak perlu memasang paket secara manual atau mendaftarkan ekstensi.
Kode sumber untuk paket ekstensi timer tersebut berada di repositori GitHub azure-webjobs-sdk-extensions.
Penting
Artikel ini menggunakan tab untuk mendukung beberapa versi model pemrograman Node.js. Model v4 umumnya tersedia dan dirancang untuk memiliki pengalaman yang lebih fleksibel dan intuitif untuk pengembang JavaScript dan TypeScript. Untuk detail selengkapnya tentang cara kerja model v4, lihat panduan pengembang Node.js Azure Functions. Untuk mempelajari selengkapnya tentang perbedaan antara v3 dan v4, lihat panduan migrasi.
Azure Functions mendukung dua model pemrograman untuk Python. Cara Anda menentukan pengikatan tergantung pada model pemrograman yang Anda pilih.
Model pemrograman Python v2 memungkinkan Anda menentukan pengikatan menggunakan dekorator langsung dalam kode fungsi Python Anda. Untuk informasi selengkapnya, lihat panduan pengembang Python.
Artikel ini mendukung kedua model pemrograman.
Contoh
Contoh ini menunjukkan fungsi C# yang dijalankan pada menit yang memiliki nilai kelipatan lima. Misalnya, ketika fungsi dimulai pada pukul 18:55:00, eksekusi berikutnya adalah pada pukul 19:00:00. Objek TimerInfo
diteruskan ke fungsi.
Fungsi C# dapat dibuat dengan menggunakan salah satu mode C# berikut:
- Model pekerja terisolasi: Fungsi C# terkompilasi yang berjalan dalam proses pekerja yang terisolasi dari runtime. Proses pekerja terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada versi LTS dan non-LTS .NET dan .NET Framework. Ekstensi untuk fungsi proses pekerja yang terisolasi menggunakan
Microsoft.Azure.Functions.Worker.Extensions.*
namespace layanan. - Model dalam proses: Fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime Functions. Dalam variasi model ini, Functions dapat dijalankan menggunakan scripting C#, yang didukung terutama untuk pengeditan portal C#. Ekstensi untuk fungsi dalam proses menggunakan
Microsoft.Azure.WebJobs.Extensions.*
namespace layanan.
Penting
Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi untuk dukungan penuh.
//<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));
Contoh fungsi berikut memicu dan mengeksekusi setiap lima menit. @TimerTrigger
Anotasi pada fungsi menentukan jadwal menggunakan format string yang sama dengan ekspresi CRON.
@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);
}
Contoh berikut menunjukkan pengikatan pemicu timer dan kode fungsi yang menggunakan pengikatan, di mana instans yang mewakili timer diteruskan ke fungsi. Fungsi ini menulis log yang menunjukkan apakah pemanggilan fungsi ini disebabkan oleh kemunculan jadwal yang terlewat. Contohnya tergantung pada apakah Anda menggunakan model pemrograman Python v1 atau v2.
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)
Contoh berikut menunjukkan fungsi TypeScript pemicu timer.
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,
});
Contoh berikut menunjukkan fungsi JavaScript pemicu timer.
Berikut data pengikatan dalam file function.json:
{
"schedule": "0 */5 * * * *",
"name": "myTimer",
"type": "timerTrigger",
"direction": "in"
}
Berikut ini adalah kode fungsi timer dalam file run.ps1:
# 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"
Atribut
Pustaka C# dalam proses menggunakan TimerTriggerAttribute dari Microsoft.Azure.WebJobs.Extensions sedangkan pustaka C# proses pekerja yang terisolasi menggunakan TimerTriggerAttribute dari Microsoft.Azure.Functions.Worker.Extensions.Timer untuk menentukan fungsi. Sebagai gantinya, skrip C# menggunakan file konfigurasi function.json.
Properti atribut | Deskripsi |
---|---|
Jadwal | Ekspresi CRON atau nilai TimeSpan. TimeSpan hanya dapat digunakan untuk aplikasi fungsi yang berjalan pada Paket Layanan Aplikasi. Anda dapat menempatkan ekspresi jadwal dalam pengaturan aplikasi dan mengatur properti ini menjadi nama pengaturan aplikasi yang dibungkus dengan tanda %, sebagai %ScheduleAppSetting% . |
RunOnStartup | Jika true , fungsi dipanggil ketika runtime dimulai. Misalnya, runtime dimulai saat aplikasi fungsi bangun setelah menganggur karena tidak aktif. saat aplikasi fungsi dimulai ulang karena perubahan fungsi, dan saat aplikasi fungsi diskalakan. Gunakan dengan hati-hati. RunOnStartup jarang harus jika pernah diatur ke true , terutama dalam produksi. |
useMonitor | Atur true ke false atau untuk menunjukkan apakah jadwal harus dipantau. Pemantauan jadwal tetap terjadi jadwal untuk membantu memastikan jadwal dipertahankan dengan benar bahkan ketika instans aplikasi fungsi dimulai ulang. Jika tidak diatur secara eksplisit, defaultnya true adalah untuk jadwal yang memiliki interval pengulangan lebih besar dari atau sama dengan 1 menit. Untuk jadwal yang memicu lebih dari sekali per menit, defaultnya adalah false . |
Dekorator
Hanya berlaku untuk model pemrograman Python v2.
Untuk fungsi Python v2 yang ditentukan menggunakan dekorator, properti berikut pada schedule
:
Properti | Deskripsi |
---|---|
arg_name |
Nama variabel yang mewakili objek timer dalam kode fungsi. |
schedule |
Ekspresi NCRONTAB atau nilai TimeSpan. TimeSpan hanya dapat digunakan untuk aplikasi fungsi yang berjalan pada Paket Layanan Aplikasi. Anda dapat meletakkan ekspresi jadwal dalam pengaturan aplikasi dan mengatur properti ini ke nama pengaturan aplikasi yang dibungkus dalam % tanda, seperti dalam contoh ini: "%ScheduleAppSetting%". |
run_on_startup |
Jika true , fungsi dipanggil ketika runtime dimulai. Misalnya, runtime dimulai saat aplikasi fungsi bangun setelah menganggur karena tidak aktif. saat aplikasi fungsi dimulai ulang karena perubahan fungsi, dan saat aplikasi fungsi diskalakan. Gunakan dengan hati-hati. runOnStartup jarang harus jika pernah diatur ke true , terutama dalam produksi. |
use_monitor |
Atur true ke false atau untuk menunjukkan apakah jadwal harus dipantau. Pemantauan jadwal tetap terjadi jadwal untuk membantu memastikan jadwal dipertahankan dengan benar bahkan ketika instans aplikasi fungsi dimulai ulang. Jika tidak diatur secara eksplisit, defaultnya true adalah untuk jadwal yang memiliki interval pengulangan lebih besar dari atau sama dengan 1 menit. Untuk jadwal yang memicu lebih dari sekali per menit, defaultnya adalah false . |
Untuk fungsi Python yang ditentukan dengan menggunakan function.json, lihat bagian Konfigurasi .
Anotasi
Anotasi @TimerTrigger
pada fungsi menentukan schedule
menggunakan format string yang sama dengan ekspresi CRON. Anotasi tersebut mendukung pengaturan berikut:
Konfigurasi
Hanya berlaku untuk model pemrograman Python v1.
Tabel berikut menjelaskan properti yang bisa Anda atur pada objek yang options
diteruskan ke app.timer()
metode .
Properti | Deskripsi |
---|---|
jadwal | Ekspresi NCRONTAB atau nilai TimeSpan. TimeSpan hanya dapat digunakan untuk aplikasi fungsi yang berjalan pada Paket Layanan Aplikasi. Anda dapat meletakkan ekspresi jadwal dalam pengaturan aplikasi dan mengatur properti ini ke nama pengaturan aplikasi yang dibungkus dalam % tanda, seperti dalam contoh ini: "%ScheduleAppSetting%". |
runOnStartup | Jika true , fungsi dipanggil ketika runtime dimulai. Misalnya, runtime dimulai saat aplikasi fungsi bangun setelah menganggur karena tidak aktif. saat aplikasi fungsi dimulai ulang karena perubahan fungsi, dan saat aplikasi fungsi diskalakan. Gunakan dengan hati-hati. runOnStartup jarang harus jika pernah diatur ke true , terutama dalam produksi. |
useMonitor | Atur true ke false atau untuk menunjukkan apakah jadwal harus dipantau. Pemantauan jadwal tetap terjadi jadwal untuk membantu memastikan jadwal dipertahankan dengan benar bahkan ketika instans aplikasi fungsi dimulai ulang. Jika tidak diatur secara eksplisit, defaultnya true adalah untuk jadwal yang memiliki interval pengulangan lebih besar dari atau sama dengan 1 menit. Untuk jadwal yang memicu lebih dari sekali per menit, defaultnya adalah false . |
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.
Properti function.json | Deskripsi |
---|---|
jenis | Harus diatur ke "timerTrigger". Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure. |
arah | Harus diatur ke "in". Properti ini diatur secara otomatis saat Anda membuat pemicu di portal Microsoft Azure. |
nama | Nama variabel yang mewakili objek timer dalam kode fungsi. |
jadwal | Ekspresi NCRONTAB atau nilai TimeSpan. TimeSpan hanya dapat digunakan untuk aplikasi fungsi yang berjalan pada Paket Layanan Aplikasi. Anda dapat meletakkan ekspresi jadwal dalam pengaturan aplikasi dan mengatur properti ini ke nama pengaturan aplikasi yang dibungkus dalam % tanda, seperti dalam contoh ini: "%ScheduleAppSetting%". |
runOnStartup | Jika true , fungsi dipanggil ketika runtime dimulai. Misalnya, runtime dimulai saat aplikasi fungsi bangun setelah menganggur karena tidak aktif. saat aplikasi fungsi dimulai ulang karena perubahan fungsi, dan saat aplikasi fungsi diskalakan. Gunakan dengan hati-hati. runOnStartup jarang harus jika pernah diatur ke true , terutama dalam produksi. |
useMonitor | Atur true ke false atau untuk menunjukkan apakah jadwal harus dipantau. Pemantauan jadwal tetap terjadi jadwal untuk membantu memastikan jadwal dipertahankan dengan benar bahkan ketika instans aplikasi fungsi dimulai ulang. Jika tidak diatur secara eksplisit, defaultnya true adalah untuk jadwal yang memiliki interval pengulangan lebih besar dari atau sama dengan 1 menit. Untuk jadwal yang memicu lebih dari sekali per menit, defaultnya adalah false . |
Ketika Anda mengembangkan secara lokal, tambahkan pengaturan aplikasi di file local.settings.json dalam koleksi Values
.
Perhatian
Jangan atur runOnStartup ke true
dalam produksi. Menggunakan pengaturan ini membuat eksekusi kode pada waktu yang sangat tidak dapat diprediksi. Dalam pengaturan produksi tertentu, eksekusi ekstra ini dapat dikenakan biaya yang jauh lebih tinggi untuk aplikasi yang dihosting dalam paket Pemakaian. Misalnya, dengan runOnStartup diaktifkan pemicu dipanggil setiap kali aplikasi fungsi Anda diskalakan. Pastikan Anda sepenuhnya memahami perilaku produksi fungsi Anda sebelum mengaktifkan runOnStartup dalam produksi.
Lihat Bagian contoh untuk contoh lengkapnya.
Penggunaan
Ketika fungsi pemicu timer dipanggil, objek timer diteruskan ke fungsi. JSON berikut adalah contoh representasi objek timer.
{
"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
}
Properti isPastDue
adalah true
ketika pemanggilan fungsi saat ini lebih lambat dari yang dijadwalkan. Misalnya, restart aplikasi fungsi dapat menyebabkan pemanggilan terlewatkan.
Ekspresi NCRONTAB
Azure Functions menggunakan pustaka NCronTab untuk menginterpretasikan ekspresi NCRONTAB. Ekspresi NCRONTAB mirip dengan ekspresi CRON kecuali bahwa ekspresi tersebut menyertakan bidang keenam tambahan di awal untuk digunakan untuk presisi waktu dalam detik:
{second} {minute} {hour} {day} {month} {day-of-week}
Setiap bidang dapat memiliki salah satu dari jenis nilai berikut:
Jenis | Contoh | Saat dipicu |
---|---|---|
Nilai tertentu | 0 5 * * * * |
Sekali setiap jam dalam sehari pada menit 5 setiap jam |
Semua nilai (* ) |
0 * 5 * * * |
Pada setiap menit dalam satu jam, selama jam 5 |
Rentang (operator - ) |
5-7 * * * * * |
Tiga kali semenit - pada detik 5 hingga 7 selama setiap menit setiap jam setiap hari |
Satu set nilai (operator , ) |
5,8,10 * * * * * |
Tiga kali semenit - pada detik 5, 8, dan 10 selama setiap menit setiap jam setiap hari |
Nilai interval (operator / ) |
0 */5 * * * * |
12 kali per jam - pada 0 kedua setiap menit ke-5 setiap jam setiap hari |
Untuk menentukan bulan atau hari, Anda dapat menggunakan nilai numerik, nama, atau singkatan nama:
- Selama ber hari, nilai numerik adalah 0 hingga 6, di mana 0 dimulai dengan Hari Minggu.
- Nama dalam bahasa Inggris. Misalnya:
Monday
,January
. - Nama tidak peka huruf besar/kecil.
- Nama dapat disingkat. Sebaiknya gunakan tiga huruf untuk singkatan. Misalnya:
Mon
,Jan
.
Contoh NCRONTAB
Berikut adalah beberapa contoh ekspresi NCRONTAB yang dapat Anda gunakan untuk pemicu timer di Azure Functions.
Contoh | Saat dipicu |
---|---|
0 */5 * * * * |
sekali setiap lima menit |
0 0 * * * * |
sekali di atas setiap jam |
0 0 */2 * * * |
setiap dua jam sekali |
0 0 9-17 * * * |
sekali setiap jam dari jam 9 pagi sampai jam 5 sore |
0 30 9 * * * |
pada 09:30 setiap hari |
0 30 9 * * 1-5 |
pada 09:30 setiap hari kerja |
0 30 9 * Jan Mon |
jam 09:30 setiap hari Senin di bulan Januari |
Catatan
Ekspresi NCRONTAB mendukung format lima bidang dan enam bidang. Posisi bidang keenam adalah nilai untuk detik yang ditempatkan di awal ekspresi. Jika ekspresi CRON tidak valid, Pengujian Fungsi Portal Microsoft Azure akan menampilkan kesalahan 404, jika Application Insights terhubung, detail selengkapnya dicatat di sana.
Zona waktu NCRONTAB
Angka dalam ekspresi NCRONTAB mengacu pada waktu dan tanggal, bukan rentang waktu. Misalnya, 5 di bidang hour
mengacu pada pukul 05.00, tidak setiap 5 jam.
Zona waktu yang digunakan dengan ekspresi CRON adalah Waktu Universal Terkoordinasi (UTC). Agar ekspresi CRON Anda berjalan berdasarkan zona waktu lain, buat setelan aplikasi untuk aplikasi fungsi Anda yang bernama WEBSITE_TIME_ZONE
.
Nilai pengaturan ini bergantung pada sistem operasi dan rencana tempat aplikasi fungsi Anda berjalan.
Sistem operasi | Paket | Nilai |
---|---|---|
Windows | Semua | Atur nilai ke nama zona waktu yang diinginkan seperti yang diberikan oleh baris kedua dari setiap pasangan yang diberikan oleh perintah Windows tzutil.exe /L |
Linux | Premium Khusus |
Atur nilai ke nama zona waktu yang diinginkan seperti yang ditunjukkan dalam tz database. |
Catatan
WEBSITE_TIME_ZONE
dan TZ
saat ini tidak didukung saat berjalan di Linux dalam paket Konsumsi. Dalam hal ini, mengatur WEBSITE_TIME_ZONE
atau TZ
dapat membuat masalah terkait SSL dan menyebabkan metrik berhenti berfungsi untuk aplikasi Anda.
Misalnya, Waktu Timur di AS (diwakili oleh Eastern Standard Time
(Windows) atau America/New_York
(Linux)) saat ini menggunakan UTC-05:00 selama waktu standar dan UTC-04:00 selama siang hari. Untuk memiliki fire pemicu timer pada pukul 10.00 Waktu Timur setiap hari, buat pengaturan aplikasi untuk aplikasi fungsi Anda bernama WEBSITE_TIME_ZONE
, atur nilai ke Eastern Standard Time
(Windows) atau America/New_York
(Linux), lalu gunakan ekspresi NCRONTAB berikut:
"0 0 10 * * *"
Saat Anda menggunakan WEBSITE_TIME_ZONE
waktu disesuaikan untuk perubahan waktu dalam zona waktu tertentu, termasuk waktu musim panas dan perubahan waktu standar.
TimeSpan
TimeSpan
hanya dapat digunakan untuk aplikasi fungsi yang berjalan pada Paket Layanan Aplikasi.
Tidak seperti ekspresi NCRONTAB, TimeSpan
nilai menentukan interval waktu antara setiap pemanggilan fungsi. Ketika fungsi selesai setelah berjalan lebih lama dari interval yang ditentukan, timer segera memanggil fungsi lagi.
Dinyatakan sebagai string, TimeSpan
formatnya adalah hh:mm:ss
ketika hh
kurang dari 24. Ketika dua digit pertama adalah 24 atau lebih besar, formatnya adalah dd:hh:mm
. Berikut adalah beberapa contoh:
Contoh | Saat dipicu |
---|---|
"01:00:00" | Setiap jam |
"00:01:00" | Setiap menit |
"25:00:00:00" | Setiap 25 hari |
"1.00:00:00" | Setiap hari |
Peluasan skala
Jika aplikasi fungsi diskalakan ke beberapa instans, hanya satu instans fungsi yang dipicu timer yang dijalankan di semua instans. Ini tidak akan memicu lagi jika ada pemanggilan yang luar biasa masih berjalan.
Aplikasi fungsi berbagi Penyimpanan
Jika Anda berbagi akun penyimpanan di seluruh aplikasi fungsi yang tidak digunakan ke layanan aplikasi, Anda mungkin perlu secara eksplisit menetapkan ID host untuk setiap aplikasi.
Versi Azure Functions | Pengaturan |
---|---|
2.x (dan lebih tinggi) | AzureFunctionsWebHost__hostid Variabel lingkungan |
1.x | id dalam host.json |
Anda dapat menghilangkan nilai identifikasi atau mengatur konfigurasi identifikasi setiap aplikasi secara manual ke nilai yang berbeda.
Pemicu timer menggunakan kunci penyimpanan untuk memastikan bahwa hanya akan ada satu instans timer ketika aplikasi fungsi diskalakan ke beberapa instans. Jika dua aplikasi fungsi memiliki konfigurasi identifikasi yang sama dan masing-masing menggunakan pemicu timer, hanya satu timer yang berjalan.
Perilaku percobaan kembali
Tidak seperti pemicu antrean, pemicu timer tidak mencoba lagi setelah fungsi gagal. Ketika fungsi gagal, fungsi tidak dipanggil lagi sampai waktu berikutnya pada jadwal.
Memanggil pemicu timer secara manual
Pemicu timer untuk Azure Functions menyediakan webhook HTTP yang dapat dipanggil untuk memicu fungsi secara manual. Ini bisa sangat berguna dalam skenario berikut.
- Pengujian integrasi
- Pertukaran slot sebagai bagian dari tes asap atau aktivitas pemanasan
- Penyebaran awal fungsi untuk segera mengisi singgahan atau tabel pencarian dalam database
Silakan merujuk untuk menjalankan fungsi yang dipicu non HTTP secara manual untuk detail tentang cara memanggil fungsi yang dipicu timer secara manual.
Pemecahan Masalah
Untuk informasi tentang apa yang harus dilakukan ketika pemicu timer tidak berfungsi seperti yang diharapkan, lihat Menyelidiki dan melaporkan masalah dengan fungsi yang dipicu timer tidak menembak.