Kurs
Azure Functions, Microsoft’un sunucusuz hesaplama hizmetinin bir parçasıdır. Kısaca, sunucuları kendiniz yönetmeden, olaylara yanıt olarak küçük kod parçacıkları çalıştırmanıza olanak tanır.
Örneğin, bir HTTP isteği geldiğinde, depolamaya bir dosya yüklendiğinde veya planlanan bir zamana ulaşıldığında bir fonksiyon çalışabilir.
“Sunucusuz” mutlaka sunucu olmadığı anlamına gelmez. Azure’un altyapıyı sizin yerinize yönettiği anlamına gelir. Azure, arka planda sağlama, ölçekleme ve bakımı üstlenir.
Bu kılavuzda yapı taşlarını ele alacağım. Yani tetikleyiciler, bağlamalar, barındırma seçenekleri ve başlamanıza yardımcı olacak uygulamalı bir örnek.
Azure Functions Nedir?
Bir Azure Function, seçtiğiniz bir olay tarafından tetiklendiğinde çalışan küçük bir kod parçasıdır. Esasen mantığı siz yazarsınız, geri kalanını Azure sizin için halleder.
Bu modeli tanımlayan üç fikir vardır.
- Olay güdümlü yürütme, kodun sürekli değil yalnızca bir şeyler olduğunda çalışmasına izin verir.
- Otomatik ölçekleme, talebe göre Azure’un bilişim kaynaklarını ekleyip kaldırmasına imkân tanır.
- Tüketime dayalı fiyatlandırma ise bazı barındırma planlarında, yalnızca kodunuzun gerçekten çalıştığı süre için ödeme yapmanızı sağlar.
Tek bir fonksiyon tercihen tek bir atomik işi yapar; örneğin bir görseli yeniden boyutlandırmak veya bir mesajı işlemek gibi. Bir Function App ise bir veya daha fazla fonksiyonu barındıran kaptır. İçindeki tüm fonksiyonlar için yapılandırma ve dağıtım gibi paylaşılan ayarları yönetir.
Azure Functions Nasıl Çalışır
Bir fonksiyonun yaşam döngüsü kabaca aşağıdaki basit düzeni izler:
- Bir olay gerçekleşir; örneğin bir dosya yüklemesi veya HTTP çağrısı.
- Bir tetikleyici olayı algılar ve fonksiyonu anında başlatır.
- Fonksiyon kendi kodunu çalıştırır.
- Bağlamalar, ihtiyaç duyulan girdiyi okuyan veya çıktıyı gönderen diğer hizmetlere fonksiyonu bağlar.
- Azure, seçtiğiniz barındırma planına bağlı olarak bu sürecin arkasındaki bilişim kaynaklarını yönetir.
Bu akış, dil veya barındırma seçeneğiniz ne olursa olsun aynıdır (bahsedilen adımların çoğu için). Yalnızca tetikleyici, kod ve bağlamalar değişir.
Azure Functions Tetikleyicileri
Her fonksiyonun tam olarak bir tetikleyicisi vardır. Tetikleyici, fonksiyonun tam olarak nasıl başladığını tanımlar. Bilmeniz gereken en yaygın türler şunlardır:
- HTTP Trigger: Bir HTTP isteği alındığında bir fonksiyon çalıştırır. API geliştirmede yaygındır.
- Timer Trigger: Bir fonksiyonu bir zamanlamaya göre çalıştırır; örneğin her saat veya günde bir kez.
- Blob Storage Trigger: Azure Blob Storage’a bir dosya eklendiğinde veya değiştirildiğinde bir fonksiyonu çalıştırır.
- Queue Trigger: Bir kuyruğa yeni bir mesaj geldiğinde bir fonksiyonu çalıştırır.
- Event Hub Trigger: Bir olay akışına yanıt olarak bir fonksiyon çalıştırır. Çok yüksek veri hacimleri için oldukça kullanışlıdır.
Azure Functions Bağlamaları
Tetikleyiciler ve bağlamaların sıkça karıştırıldığını düşünüyorum; benzer görünseler de tamamen farklı işler yaparlar. Bir tetikleyici fonksiyonu başlatır, bir bağlama ise veriyi okuyup göndererek fonksiyonu veriye bağlar.
Girdi bağlamaları
Burada, özel tümleşme kodu yazmadan fonksiyonunuza veri sağlarsınız. Örneğin, yalnızca bağlamayı tanımlayarak bir fonksiyonun bir veritabanından kaydı otomatik olarak okuması sağlanabilir.
Çıktı bağlamaları
Bu, fonksiyonunuzun sonucunu başka bir yere göndermenizi sağlar. Örneğin, işlenmiş bir mesajı bir kuyruğa yazmak için çıktı bağlamalarını kullanabilirsiniz.
İşte yardımcı olacak bir örnek: Bir Blob Storage tetikleyicisi, bir görsel yüklendiğinde bir fonksiyonu başlatır. Bir çıktı bağlaması ise yeniden boyutlandırılan görseli farklı bir depolama kapsayıcısına kaydeder. Bu şekilde, herhangi bir el ile depolama istemcisi koduna gerek kalmaz.
İlk Azure Function’ınızı Nasıl Oluşturursunuz
İşte, selamlama döndüren çok basit bir HTTP tetiklemeli fonksiyon örneği. Akış şu şekildedir:
- Bir Function App oluşturun. Bu, Azure’daki fonksiyonunuzun kabıdır.
- Bir çalışma zamanı seçin ve kod yazmak istediğiniz dili belirleyin.
- Function App’inizin içinde yeni bir fonksiyon ekleyebilmek için fonksiyonu oluşturun.
- Fonksiyonun web isteklerine yanıt vermesini sağlamak için HTTP tetikleyicisini seçin.
- İstekten bir isim okuyup “Merhaba, [isim].” döndürmek gibi basit bir işlev ekleyin.
- Yerleşik test araçlarını kullanarak çalıştırın ve test edin veya tarayıcınızdan bir istek gönderin.
- Canlıya almak ve erişilebilir kılmak için Azure’a dağıtın.
Deseni göstermek ve gerisini yaratıcılığınıza bırakmak için bu örneği bilerek küçük tuttum.
Azure Functions’ın Desteklediği Diller
Azure Functions şu gibi pek çok dili destekler:
- C#
- JavaScript/TypeScript
- Python
- Java
- PowerShell
Destek ve geliştirme modelleri dile ve sürüme göre değişebilir. Bu nedenle, yeni bir projeye başlamadan önce güncel Azure belgelerini kontrol etmenizi öneririm; zira bu detaylar sık değişir.
Azure Functions Barındırma Seçenekleri
Her Azure Function aynı şekilde çalışmaz. Bu nedenle Azure, farklı barındırma planları sunar ve her biri, özel durumunuza göre seçmeniz gereken farklı ödünleşimler içerir. Bu ödünleşimler şunlardır:
- Ölçekleme: Bazı planlar otomatik ve anında ölçeklenir, bazıları ise daha fazla el ile kontrol gerektirir.
- Başlangıç davranışı: Bazı planlar fonksiyonları “sıcak” tutar. Bu, hemen çalışmaya hazır oldukları anlamına gelir; diğerleri ise talep üzerine başlatır.
- Ağ: Bazı planlar özel bir sanal ağa bağlanma gibi gelişmiş ağ özelliklerini desteklerken, diğerleri desteklemez.
- Maliyet: Fiyatlandırma modelleri, yürütme başına ödemeden sabit aylık maliyetlere kadar ciddi biçimde farklılık gösterir.
Azure Functions’ta Ölçekleme ve Soğuk Başlangıçlar
Üretimde çalışan bir fonksiyon kullanırken önem taşıyan iki kavram daha vardır. Bunlar:
Otomatik ölçekleme
Burada Azure, fonksiyonunuzdaki yükü izler; talep arttığında daha fazla bilişim örneği ekler, talep düştüğünde ise kaldırır. Bunu el ile yönetmeniz gerekmez.
Soğuk başlangıçlar
Bir fonksiyon yakın zamanda çalışmadıysa, yeni bir isteği karşılamadan önce başlatılmak için kısa bir zamana ihtiyaç duyabilir. Bu gecikmeye soğuk başlangıç denir. Bazı barındırma planları, bahsedildiği gibi örneği sıcak tutarak bunu azaltır veya önler.
Yaygın Azure Functions Kullanım Senaryaları
Olay güdümlü model, karşılaşabileceğiniz pek çok günlük probleme uyar. Özellikle:
API’ler ve webhook’lar
Tam teşekküllü bir web sunucusunu 7/24 çalıştırmadan gelen HTTP isteklerini ele almak içindir.
Dosya ve görsel işleme
Bir dosya depolamaya düştüğünde bir fonksiyonu tetiklemeye, ardından yeniden boyutlandırma, dönüştürme veya yalnızca tarama yapmaya yardımcı olur.
Zamanlanmış işler
Ayrı bir her zaman açık sunucuya ihtiyaç olmadan zamanlayıcıyla temizlik görevleri, raporlar veya hatırlatıcıları çalıştırmaya yardımcı olur.
Veri işleme hatları
Mesajları veya olayları geldikçe, adım adım işlemeye yardımcı olur.
IoT ve olay işleme
Akış halinde gelen büyük hacimli algılayıcı veya cihaz verisini ele almaya yardımcı olur.
Arka plan görevleri
E-posta göndermek gibi yavaş veya aralıklı işleri ana uygulamanızı engellememesi için dışarı taşır.
Azure Functions’ı İzleme ve Sorun Giderme
Bir fonksiyon canlıya alındığında, nasıl performans gösterdiğine dair görünürlük gerekir.
Örneğin, hata ayıklama için çok kullanışlı olan, her çalıştırmada neler olduğunu kaydeden günlükleri görebilirsiniz. Ayrıca Azure araçlarındaki Application Insights’ı da kontrol edebilirsiniz; bu araç temelde performansı, istekleri ve hataları tek bir merkezde izler.
Bir fonksiyonun ne zaman ve neden tamamlanmadığını bilmek için çağrı hatalarını da takip etmelisiniz. Performans izleme, sorun hâline gelmeden önce yavaş fonksiyonları fark etmenize yardımcı olur ve elbette, başarısız yürütmelerin otomatik olarak yeniden denenmesi için yeniden deneme davranışı yapılandırılabilir.
Sonuç
Azure Functions, alttaki sunucuları yönetmeden, olaylara yanıt olarak kod çalıştırmanın bir yolunu sunar. Tetikleyiciler, bir fonksiyonun ne zaman başlayacağına karar verir. Bağlamalar ise ek tümleşme koduna gerek kalmadan o fonksiyonu diğer hizmetlere bağlamayı kolaylaştırır.
Basit bir test fonksiyonundan üretimde çalışan bir şeye geçerken, barındırma ve ölçekleme seçimleri çok daha fazla önem kazanır. Doğru plan yalnızca maliyeti değil, aynı zamanda hız ve güvenilirliği de etkiler.
Merkezi olmayan veriler ve dağıtık iş yükleri üzerinde bütünleşik (federated) ML işlem hatlarıyla uç zekâ sağlayan hızlandırılmış yapay zekâ sistemleri üzerinde çalışıyorum. Çalışmalarım Büyük Modeller, Konuşma İşleme, Bilgisayarlı Görü, Pekiştirmeli Öğrenme ve ileri ML topolojilerine odaklanmaktadır.
SSS
Azure Functions nedir?
Sunucuları sizin yönetmenize gerek kalmadan olaylara yanıt olarak küçük kod parçacıkları çalıştıran sunucusuz bir hizmet.
Bir Azure Function’ı ne tetikler?
HTTP istekleri, zamanlayıcılar, dosya yüklemeleri veya kuyruk mesajları gibi olaylar.
Tetikleyici ile bağlama arasındaki fark nedir?
Bir tetikleyici fonksiyonu başlatır. Bir bağlama ise girdi veya çıktı için onu diğer hizmetlere bağlar.
Soğuk başlangıç nedir?
Bir fonksiyonun, bir süre boşta kaldıktan sonra başlarken yaşadığı kısa gecikme.
Azure Functions hangi dilleri destekler?
C#, JavaScript/TypeScript, Python, Java ve PowerShell.
