Timer trigger for Azure Functions

Belli zaman aralıklarında bir işlem yaptırmak istediğimizde, örneğin veritabanındaki bir tabloda tarih aralığına göre satırların aktiflik durumunu değiştirmek istiyoruz, öncellikle UPDATE komutumuzu store procedure olarak yazıp bunu SQL Server Agent’ta zamanlarız. Ancak eğer veritabanımız Azure üzerinde ise SQL SERVER AZURE’da SQL Server Agent kullanılamıyor. Bu durumda ise işlemimizi Azure Functions tanımlayarak halledebiliriz.

Azure Functions , altyapıyı açıkça sağlamak veya yönetmek zorunda kalmadan isteğe bağlı kod çalıştırmamızı sağlayan, sunucusuz (serverless) bir hizmettir. Çeşitli işlevleri gerçekleştirmek üzere bir komut dosyasını veya kod parçasını çalıştırmak için Azure Functions kullanabiliriz.

Öncelikle Microsoft Azure Web İşlevi Araçları(Azure Functions and Web Jobs Tools)’nın yüklü ve güncel olduğunu kontrol etmeliyiz. Yüklü değilse de aşağıdaki gibi seçerek yüklemeliyiz.

 

 

Şimdi projemizi açalım:

 

 

Cloud sekmesinin altındaki Azure Functions’ı seçtikten sonra projemiz için ihtiyacımız olan işlevi seçiyoruz. Bizim için bu Timer Trigger oluyor. Schedule bölümüne birazdan geçeceğiz. Değiştirmeden o şekilde bırakıyoruz ve OK’e basıp devam ediyoruz.

 

 

Proje dosyalarını inceleyecek olursak:

 

 

Local.settings.json dosyası, uygulama ayarlarını, connection string’i ve Azure Functions Core Tools’un ayarlarını saklar. Local.settings.json dosyasındaki ayarlar, yalnızca local olarak çalışırken kullanılır. Varsayılan olarak, proje Azure’da yayınlandığında bu ayarlar otomatik olarak aktarılmaz. Bu ayarların Azure’da functions uygulamasına eklendiğinden emin olmak için yayınladığımızda –publish-local-settings anahtarını kullanmalıyız. Connection Strings’deki değerlerin hiçbir zaman yayınlanmadığını da belirteyim. Connection String’i birazdan Azure Portal üzerinden ekleyeceğiz.


Şimdi projemizin kodlarını yazma kısmına geçelim. Bugünün tarihinden küçük kayıtların IsActive özelliğini false yapalım. Bunu da her 5 dakikada bir tekrarlasın. Veritabanındaki  tablomuzda şu sekilde:

 

 

Kodlarımız şu şekilde:

Zamanlayıcı fonksiyonunu yazarken vereceğimiz zamanlama ifadesinin adı CRON ifadesidir. CRON ifadesi altı alandan oluşur:

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

Azure Functions zamanlama tetikleyicisi için kullanabileceğiniz CRON ifadesinin bazı örnekleri şu şekildedir:

Örnek Tetiklenme Zamanı
“0 */5 * * * *” her beş dakikada bir
“0 0 * * * *” her saat başı
“0 0 */2 * * *” her iki saatte bir
“0 0 9-17 * * *” saat 9’dan 17’e kadar ki her saat başı
“0 30 9 * * *” her gün sabah 9:30
“0 30 9 * * 1-5” her hafta sabah 9:30
“0 30 9 * Jan Mon” Ocak ayının her pazartesi saat 9:30

 

Her 5 dakikada bir belirtilen saatte veritabanına gidecek ve belirttiğim işlemi gerçekleştirecek. Bunu da herhangi bir sunucuya ihtiyaç duymadan yapacak.  İstersek yukarıdaki tablodaki örnekler gibi zamanlamayı değiştirebiliriz. Şimdi projeyi çalıştırdığımızda:

 

 

şeklinde bir console açılır ve ayarlanmış zamanlamaları bize gösterir.

 

 

Şimdi sırada bunu Azure’da yayınlama kısmı var. Öncesinde Azure Portal’a giderek gerekli ayarlamaları yapmalıyız.

 

Serverless Function App seçeneğini seçiyoruz.

 

 

Gerekli alanları doldurduktan sonra Function App’imizi oluşturuyoruz. Şimdi de buna Connection String’i ekleyelim:

 

 

Platform Features’dan Application Settings’i seçiyoruz ve Connection String’i ekliyoruz.

 

 

Artık projemizi publish edebiliriz. Projeye sağ tıklayıp Publish’i seçip, Azure hesabımızı, aboneliğimizi ve portal üzerinden oluşturduğumuz Function App’i seçerek publish ediyoruz.

 

 

Artık istediğimiz işlevi belirttiğimiz zaman aralığında gerçekleştirebilecek bir Function App’imiz var.

Tavsiye edilen okumalar:

  1. Timer trigger for Azure Functions
  2. Azure Functions Documentation

Kaynak kodlarını buradan indirebilirsiniz.

OLASI HATALAR:

=> Microsoft.Azure.WebJobs.Host: Cannot bind parameter ‘log’ to type TraceWriter. Make sure the parameter Type is supported by the binding. If you’re using binding extensions (e.g. ServiceBus, Timers, etc.) make sure you’ve called the registration method for the extension(s) in your startup code (e.g. config.UseServiceBus(), config.UseTimers(), etc.).

Çözüm:  Azure Functions and Web Job Tools’u güncellemeniz sorunu çözecektir.

Leave a Reply

Your email address will not be published. Required fields are marked *