Serverless automation using PowerShell Core in Azure Functions – Bölüm 01

Öncelikle bu yazı serisine başlamadan şunu göz önünde bulundurmanızı tavsiye ediyorum, yazı içerisinde geçen Azure servislerin detaylı bir biçimde neler yaptığını anlatmayı düşünmüyorum. Bunları anlamak ve kavramak için internet üzerinde örn:’Microsoft Docs’ sınırsız kaynaklara erişme şansınız var. Genel anlamıyla servislerin nerede, ne zaman ve niçin kullanılması gerektiğine değinip servisleri sırası geldikçe ve kullanıma başladıkça sizinle paylaşıyor olacağım. Bu servisleri kullanırken temel veya yüzeysel bir açıklama görebilirsiniz. Fakat bu yazı serisinin temel amacı Serverless hizmetlerini kullarank ve bunlar ile beraber Cloud veya Hybrid otomasyonunun nerelere doğru yelkenler açtığını, son olarakta Powershell Core’un tüm Azure Serverless hizmetlerinde ne/nasıl bir şekilde aktif şekilde röl aldığını anlamanıza yardımcı olmaya çalışacağım.

Uzun süredir Azure Functions ( Serverless Functions ) kullanarak interaktif biçimde Microsoft servislerini deneyimleyip içli dışı olup zaman geçiriyorum. Cloud Engineering departmanlarının even-based cloud otomasyon süreçlerini tasarlıyorum. Azure Functions en sade ve özet haliyle Microsoft’un bize sunduğu Serverless Functions hizmeti olarak karşımıza çıkıyor. İşte tam bu noktada ‘Serverless’ olmasının verdiği avantaj ile Powershell Core esnekliğinide kullanarak Microsoft Azure’un diğer servisleri ile entegre biçimde kullanıp veya başka bir Cloud Provider’ın API/SDK kullanarak farklı otomasyon senaryolarına doğru yelken açabiliyoruz. Azure Functions farklı ‘Run time’ versiyonlarına sahip ve her ‘Run Time’ versiyonunda farklı (.Net veya .Net Core) framework – yani alt yapısı ile karşımıza çıkıyor. Azure Functions App içerisinde run time versiyonlarını daha iyi anlamak için lütfen şu sayfa üzerine göz gezdiriniz. Yazımızın devamında Azure Functions App ‘Run Time 2.x veya 3.x’ kullanarak devam edeceğim. Deneyimlerim doğrultusunda söyleyebilirim ki, ‘Run Time2.x’ den sonra Powershell Core gücünü arkasına alarak çok farklı yenilikler geldi ve Powershell Core ile alt yapı otomasyonu ile uğraşan Developer veya Powershell Developer’ın işlerini kolay hale getirebilcek çözümler sunuyor. Zaten Microsoft Azure Functions Apps ‘Run Time’ 1.x için experimental olarak bizlere kullanıma sunuyordu.

  1. Yukarıdaki resimde Azure Functions App için genel yapı taşlarını görebilirsiniz.
  2. Azure Function App ( yazdığınız kodu çalıştıracak olan / gerçekleştirecek servis)
  3. Function – Fonksiyon geliştirdiniz bu aklınıza gelebilecek ufak işler yapan bir fonksiyonda olabilir veya büyük işler ( Image Processing, Adding new row vs). Fonksiyonlar her zaman Azure Function App içreisinde
  4. çalışırlar. Azure Function App size Cloud üzerinde kaynak ve altyapı tahsis eder. Function’lar ise Azure Function App içerisinde çalışırlar ve onun kaynağını kullanırlar.
  5. Triggers / Function için tetikleyeciler )
  6. Bindings (Function için Input ve Output)

Şimdi gelin beraber bir başlık altında ‘Functions Triggers ve Bindings’ işleyelim.

Functions – Triggers and Bindings

Triggers: Tetikleyiciler (yani Triggers), kodunuzun çalışmasını sağlayan veya başlatmanın bir yolu olarak düşenebilirsiniz. Özetle Function’ın çalışmasına neden olan tetikleyicilerdir, kısaca şu şekilde hayal edebiliriz, Fonksiyon için kodunuzu geliştirdiniz ve deploy ettiniz, geliştirdiğiniz bu fonksiyon için kullanılabilecek veya erişilebilecek yöntemleri tanımlıyor gibi düşünün. Her bir function daima bir trigger (tetikleyiciye) sahip olmalıdır. Triggers, fonksiyonun nasıl çağrıldığını tanımlamanıza yardımcı olur. Triggers (Tetikleyiciler), genellikle fonksiyon içerisine ilişkili/akmasını istediğiniz verileri sağlayacak bir endpoint ( uç nokta ) gibi düşünebilirsiniz. Aşağıdaki resim de Functions için kullanbileceğiniz Triggers ( tetikleyicileri) olarak kullanabileceğiniz Azure native servislerini görebilirsiniz.

Triggers’ların bize en büyük sağladığı faydayı göz önüne aldığımız zaman, diğer hizmetlere kod ile erişmenizden kaçınmanızı sağlar.Örneğin Azure Function Apps içerisinde bulunan bir fonksiyonunuz içerisinden Blob Storage erişmek için, Connection kurup ilgili veriye erişmek için kod yazma zahmetine girmenize gerek kalmaz ve ayrıca bundan daha fazlasına şahit olabilirsiniz ve tetikleyicileri kullanarak. Geliştirdiğiniz fonksiyon parametresinde, tetikleyiciler tarafından gönderilen verileri alırlar. (örneğin, Azure Storage Queue iletisinin içeriğini alır ve işlemenize yardımcı olur). Yine aynı Function işlem sonucunda çıkan değeri kullanarak başka servislere veri gönderebilirsiniz (örneğin, başka bir servis için kuyruk mesajı oluşturabilmek). Unutmamalıdır ki, Tetikleyeciler ( Triggers) fonksiyonunuzu başlatabildiği gibi, ilk başlama işi farklı tipte bir trigger tarafından gerçekleşmiş olup, function çalıştıktan sonraki sonuç doğrultusunda farklı tipte bir tetikleyici de kullanabiliriz.Aşağıda sizin için biraz daha detaylı olacak şekilde bir kaç örnek ile triggers(ların) neler olduğunu açmak istiyorum.

Blog Storage Trigger: Azure Blob Storage içerisine devamlı akan bir resimler olduğunu düşünelim. Bu resimlerin/verilerin boyutlarını değiştirip – üzerinde işler yaptıktan sonra farklı bir lokasyona veya istemiş olduğum yere tekrar aktarmak olsun. Sürecimizi uçtan uça düşünelim, Bir Web Hizmeti veya herhangi bir yöntem ile Blob Storage içerisine resimleriniz gönderiliyor, ve bu resimlerin geliştirdiğiniz fonksiyonunuz tarafından işlenmesini istiyorsunuz. Blob Storage yeni bir resim yüklendiğinde otomatik olarak fonksiyonunuz tetiklenecek.

HTTP Trigger: Functions size bir HTTP endpoint (uç noktası) temin eder ve bu uç noktasına istendiğine/istek iletildiğinde çalışır. Azure Functions ‘HTTP Trigger’ sayesinde basit bir RESTful HTTP uç noktaları sunar. Aynı RESTful-Web API’sı gibi çağırabiliyorsunuz. İhtiyaciniz doğrultusunda Post, Get, Delete, Path, Put şeklinde istekleri karşılayabilirsiniz. Daha fazla ileri gidecek olursak, Azure API Management üzerindenden geliştirdiğiniz fonksiyonlarınızı RESTful http endpointlerinizin specification yayınlayabilirsiniz.

Queue Storage Trigger: Bildiğiniz gibi farklı servisler geliştirirken çoğu zaman bir Messaging sistemi kullanılır ve mesajlar buraya bırakılır. First-in-First-out kuralı ile kuyruğu gelen mesajlar sırasıyla uygulamanız tarafından işlenir. Azure Functions için Queue Storage Trigger kullanırsanız, Azure Storage içerisindeki bulunan ve messaging servisi olan queue gönderdiğiniz her mesaj otomatik olarak fonksiyonunuzu tetikleyecek ve içeriği fonksiyonunuz tarafından okunup işleme alınacaktır.

Timer Trigger: Trigger’ın adında anlaşılabileceği gibi belirlediğiniz zaman aralıklarında fonksiyonunuzu otomatik olarak çalışmasına sağlayabilirsiniz.

SendGrid: SendGrid bildiğimiz gibi bulut tabanlı bir email delivery hizmeti. Bu hizmet pazarlama gibi yoğun trafik gerektiren mail bildirimleri için kullanabiliyoruz. SendGrid tetikleyiciler arasında kullanabiliyoruz.

Not: Eğer Messaging servislerine ile ilgili daha fazla detay almak istiyorsunuz, şu servisleri incelemenizi tavsiye ederim. Azure Storage Queue, Service Bus, Azure Event Grid hizmetlerini incelemenizi tavsiye ederim. İlgili yazıyı şu köşeye bırakıyorum.

Özetle, Tetikleyicilerin kullanım amacını kavradık. Azure servislerinin native bir şekilde entegrasyona sahip olabilecek gücünü kullanarak, farklı servisler arasına erişirken bizi kod yazmaktan kurtarmaktadır. Ayrıca, Event-based cloud automation yaklaşımını ile Serverless servisini kullanarak Azure özelinde hemen hemen her kaynağınız ile ilgili aksiyon alma şansınız bulunmaktadır.

Bir sonraki yazımızda Azure Functions – Bindings detaylarına dokunuyor olacağız.