Microsoft AZ-204: Azure Functions ve Sunucusuz Bilişim — Çalışma kılavuzu
Şunun bir parçası: Microsoft Azure Developer Associate AZ-204 — Çalışma kılavuzu. Doğrulanmış cevaplarla şurada pratik yapın: Microsoft sınav merkezi, veya şurada süreli deneme sınavları çözün: ExamRoll.io.
Genel Bakış
Azure Functions, olay güdümlü ve kısa ömürlü iş yükleri için optimize edilmiş sunucusuz bir işlem hizmetidir. Altyapıyı soyutlayarak HTTP uç noktaları, kuyruklar, bloblar, veri değişiklik akışları ve akış hizmetlerinden gelen olaylara yanıt veren koda odaklanmanızı sağlar. Ölçeklendirme, fiyatlandırma ve soğuk başlatma davranışını yöneten bir barındırma planı seçersiniz; kodunuzu tetikleyicilere ve veri kaynaklarına bildirimsel bağlamalarla bağlarsınız; ve isteğe bağlı olarak Durable Functions kullanarak uzun süren, güvenilir iş akışları oluşturursunuz. Sağlam yapılandırma, tekrarlanabilir dağıtım ve Application Insights ile derinlemesine gözlemlenebilirlik, platformu üretim seviyesi sistemler için tamamlar.
Barındırma Planları, Ölçeklendirme ve Soğuk Başlatmalar
Bir barındırma planı seçmek, yürütme özelliklerini ve maliyeti belirler.
Tüketim planı:
- Ölçeklendirme ve fiyatlandırma: Yürütme ve kaynak tüketimi başına ödeme yaparsınız. Platform, olaylara göre otomatik olarak yatay ölçeklenir. Boştayken instance sayısı sıfıra kadar iner.
- Yürütme limitleri: Fonksiyon zaman aşımı, HTTP olmayan fonksiyonlar için 10 dakikaya kadar yapılandırılabilir; HTTP fonksiyonları ise istemci bağlantısı nedeniyle daha kısa pratik zaman aşımlarına sahiptir.
- Soğuk başlatma: Soğuk başlatmalar, boşta kalma sürelerinden sonra veya yeni instance’lar başlatıldığında yatay ölçeklenme sırasında meydana gelir. Başlatma süresi dile, bağımlılıklara ve uygulama boyutuna bağlıdır.
- Ağ/özellikler: Varsayılan olarak genel ağ kullanımını destekler. Premium’a kıyasla sınırlı özellik setine sahiptir (örneğin, VNET entegrasyonu yoktur). Dağıtım yuvaları mevcut değildir.
Premium planı:
- Ölçeklendirme ve fiyatlandırma: Olaylara göre ölçeklenir ancak soğuk başlatmaları ortadan kaldırmak için “önceden ısıtılmış” instance’ları korur. Aktif ve önceden ısıtılmış instance’lar için ayrılan çekirdek saniyesi ve belleğe göre faturalandırılır.
- Yürütme limitleri: Pratik olarak sınırsız yürütme süresi (HTTP istemci kısıtlamalarına tabidir). Gecikmeye duyarlı veya daha ağır iş yükleri için önerilir.
- Soğuk başlatmayı azaltma: Önceden ısıtılmış instance’lar çalışma zamanını (runtime) sıcak tutar. Plan başına önceden ısıtılmış instance sayısını siz kontrol ederek ani yük artışlarında (burst) öngörülebilir gecikme sağlarsınız.
- Ağ/özellikler: VNET entegrasyonu, özel uç noktalar, artırılmış instance boyutları ve dağıtım yuvaları desteklenir.
Ayrılmış (App Service) planı:
- Ölçeklendirme ve fiyatlandırma: Manuel veya otomatik ölçeklendirme kurallarıyla sağlanan App Service instance’ları üzerinde çalışır. Kullanımdan bağımsız olarak temel App Service planı için ödeme yaparsınız.
- Yürütme limitleri: Arka plan yürütmesi için platform tarafından dayatılan bir zaman aşımı yoktur. Zaten boşta App Service kapasiteniz olduğunda veya tutarlı performansa ihtiyaç duyduğunuzda idealdir.
- Soğuk başlatmayı azaltma: Uygulamayı yüklü tutmak için Always On özelliğini etkinleştirin. Sıfıra ölçeklenme yoktur; instance’lar sıcak kalır.
Maliyet açısından optimize edilmiş düzensiz iş yükleri için Tüketim’i, düşük gecikme ve VNET ihtiyaçları için Premium’u ve mevcut App Service kapasitesiyle birleştirme veya tam kontrol gerektiren durumlar için Ayrılmış planı seçin. Ultra düşük gecikme için, önceden ısıtılmış instance’lara sahip Premium veya Always On özelliğine sahip Ayrılmış plan, soğuk başlatmaları azaltır. Bağımlılıkları azaltarak, run-from-package kullanarak ve istemcileri tembel başlatma (lazily initializing) yöntemiyle soğuk başlatma etkisini daha da en aza indirin.
Tetikleyiciler ve Bağlamalar
Function’lar tetikleyiciler tarafından etkinleştirilir ve verilerle bağlamalar aracılığıyla etkileşime girer. Tetikleyiciler, bir function’ın nasıl ve ne zaman çalışacağını tanımlar. Bağlamalar, zorunlu SDK kodu olmadan girdi/çıktı için harici servislere bildirimsel olarak bağlanır.
Yaygın tetikleyiciler:
- HTTP tetikleyicisi: REST tarzı API’ler veya webhook’lar için uç noktaları (endpoint) kullanıma sunar. Yetkilendirme seviyeleri arasında Anonymous, Function ve Admin bulunur ve anahtarlar veya platform kimlik doğrulaması aracılığıyla uygulanır. Uzun süren görevler için idemopotansiyi ve zaman aşımlarını göz önünde bulundurun; gerektiğinde kuyruğa veya Durable Functions’a aktarın.
- Zamanlayıcı tetikleyicisi: CRON tabanlı zamanlamalar, uygulama başına (her zamanlayıcı için) tek bir örnekte (instance) çalışır. Saat dilimi yapılandırmasıyla birlikte NCRONTAB ifadelerini kullanın. Bakım, yoklama (polling) ve temizlik işleri için idealdir.
- Azure Storage Queue tetikleyicisi: Bir kuyruktaki mesajlara yanıt verir. Kuyruktan çıkarma sayısı eşiğinden sonra bir -poison kuyruğu ile zehirli mesaj (poison message) işlemeyi destekler. host.json aracılığıyla toplu iş boyutunu (batch size), görünürlük zaman aşımını (visibility timeout) ve eş zamanlılığı (concurrency) yapılandırın.
- Azure Blob Storage tetikleyicisi: Yoklama (polling) ve Event Grid bildirimlerinin bir kombinasyonunu kullanarak blob oluşturma/güncelleme olaylarına tepki verir. Kapsamı container’lar ve ön eklerle (prefix) sınırlamak için yol desenleri (path patterns) kullanın. Büyük blob yüklemeleri için nihai tutarlılığı (eventual consistency) ve yeniden deneme davranışını anlayın.
- Azure Event Hubs tetikleyicisi: Denetim noktası (checkpointing) oluşturma özelliğiyle yüksek verimli olay akışlarını (event streams) tüketir. Verim (throughput) için bölüm eş zamanlılığını (partition concurrency), toplu iş boyutunu ve ön alımı (prefetch) yapılandırın. Bölüm başına sıralamanın korunduğu telemetri ve akış işleme için uygundur.
- Azure Service Bus tetikleyicisi: Kuyruk veya konu (topic) aboneliğini destekler. maxConcurrentCalls, ön alım (prefetch) ve otomatik tamamlama (auto-complete) davranışlarını yapılandırın. Teslim edilemeyen mesaj kuyrukları (dead-letter queues), daha sonra incelenmek üzere teslim denemelerini aşan mesajları yakalar.
- Azure Cosmos DB tetikleyicisi: Ekleme ve güncelleme işlemleri için değişiklik akışını (change feed) dinler. Fiziksel bölüm sayısıyla ölçeklenir; yeterli RU sağlandığından emin olun. Örnekler (instance) arasında yatay ölçeklendirmeyi (scale-out) koordine etmek için kira koleksiyonunu (leases collection) kullanın.
Bağlamalar:
- Girdi bağlamaları: Function’a veri sağlarlar; ör. blob içeriği, tablo varlığı (entity), Cosmos DB belgeleri veya kuyruk mesajı üst verileri. .NET’te, öznitelikler (attributes) (ör.
undefined
) veya function.json bağlamayı tanımlar; diğer dillerde yapılandırma bildirimseldir.
- Çıktı bağlamaları: SDK’lar olmadan veri yazarlar; ör. bir mesajı kuyruğa ekleme, bir blob oluşturma, Event Hub/Service Bus’a gönderme veya Cosmos DB’ye yazma. Function’lar birden çok çıktı bağlamasına sahip olabilir veya function imzasından tek bir çıktı döndürebilir.
- Bağlama ifadeleri:
undefined
,
undefined
gibi yer tutucuları ve ortama dayalı uygulama ayarlarını kullanarak bağlantı ayrıntılarını ve yolları parametrelendirin. Bağlantı özellikleri, uygulama ayarları adlarına referans vererek anahtar rotasyonunu ve gizli anahtar yönetimini (secret management) mümkün kılar. Gizli anahtarları gömmekten kaçınmak için desteklendiği yerlerde yönetilen kimlik (managed identity) ile kimlik tabanlı bağlantıları tercih edin.
- Eş zamanlılık ve toplu iş: Verimi (throughput) ve bellek kullanımını ayarlamak için host.json dosyasında uzantı başına (queues, serviceBus, eventHub) eş zamanlılığı ve toplu iş boyutlarını kontrol edin. Hataların ortaya çıktığından emin olmak için zehirli/teslim edilemeyen mesaj (poison/dead-letter) işlemeyi doğrulayın.
Tetikleyicileri ve bağlamaları idempotansi, geri basınç (backpressure) ve hata yalıtımı (failure isolation) için tasarlayın. En az bir kez teslimat (at-least-once delivery) kaynakları (kuyruklar, Event Hubs, Service Bus) için function’ları idempotent ve yeniden denemelere karşı dayanıklı olacak şekilde yazın.
Durable Functions: Güvenilir Orkestrasyon Desenleri
Durable Functions, dayanıklı bir görev çerçevesi (durable task framework) kullanarak uzun süren iş akışları için Azure Functions’ı durum bilgili (stateful), güvenilir orkestrasyon ile genişletir.
Function türleri:
- Orkestratör function’ları: Belirleyici (deterministic) yapılar kullanarak iş akışı mantığını kodda tanımlar. Orkestratörler, olaylar üzerine durumu yeniden oynatır ve uygun yardımcılar olmadan belirleyici olmayan API’lerden (
undefined
, random, ağ çağrıları) kaçınmalıdır. Örnekleri (instance) başlatmak, sorgulamak ve yönetmek için Durable orkestrasyon istemci API’lerini kullanın.
- Aktivite function’ları: Harici API’leri çağırmak, CPU’ya bağlı işlemler yapmak veya G/Ç (IO) görevleri gibi ayrık iş birimlerini yürütür. Aktiviteler yeniden denenebilir ve bağımsız olarak ölçeklenebilir.
- Varlık (Entity) function’ları: Küçük, tutarlı durum ve operasyonlara (ör. sayaçlar, cihaz durumu) sahip, dayanıklı, adreslenebilir varlıklar sağlar. Varlıklar, serileştirilmiş operasyonları tek iş parçacıklı (single-threaded) tutarlılıkla işler.
Desenler:
- Function zincirleme: Aktiviteleri tanımlanmış bir sırada (A → B → C) sıralar ve sonuçları bir sonrakine aktarır. Bağımlılıkları olan işlem hatları (pipeline) için kullanışlıdır.
- Fan-out/fan-in (Dağıtma/Toplama): Birden çok aktiviteyi paralel olarak başlatır ve sonuçları birleştirir. Orkestratörler,
undefined
benzeri anlamsal yapılarla koordinasyon sağlar. Bunu, bağımsız görevlerin paralel işlenmesi için kullanın.
- İnsan etkileşimi (harici olaylar): Zaman aşımları ve yükseltme (escalation) ile
undefined
kullanarak harici bir girdi (ör. onay) bekler. SLA’ları ve telafi mantığını (compensation logic) uygulamak için dayanıklı zamanlayıcılarla birleştirin.
- Asenkron HTTP API’leri: Orkestrasyonları başlatır ve durum/sorgu URL’leri ile birlikte
undefined
yanıtı döndürür. İstemciler, nihai sonuç veya durum için Durable istemci bağlaması tarafından sunulan durum uç noktalarını (status endpoint) yoklar (poll).
- Monitör: Bir programa göre çalışan tekrarlayan denetim noktalarıdır; ör. işlem gücünü (compute) meşgul etmekten kaçınmak için dayanıklı zamanlayıcılar kullanarak bir koşul karşılanana kadar bir uç noktayı yoklama (polling).
- Toplayıcı/Varlık (Aggregator/Entity): Tam bir iş akışı olmadan hassas koordinasyon için varlık (entity) function’larını kullanarak küçük durumları mantığın yanında saklar.
Durable Functions, aktivitelerin en az bir kez (at-least-once) yürütülmesini ve orkestratör durumunun tam olarak bir kez (exactly-once) ilerlemesini garanti eder. Durumu depolama alanında (varsayılan Azure Storage’dır) kalıcı hale getirirler; depolama hesabının verim (throughput) ve güvenilirlik ihtiyaçlarını karşıladığından emin olun. Geçici hatalar için özel yeniden deneme politikaları kullanın ve harici etkileşim için olaylar (event) oluşturun. Çok uzun süreçler için, dayanıklı orkestrasyonlar yerleşik dayanıklılıkla günler hatta aylar boyunca çalışabilir.
Yapılandırma, Dağıtım ve Gözlemlenebilirlik
Function app yapılandırması katmanlıdır ve ortama duyarlıdır.
- host.json: Çalışma zamanı (runtime) ve eklenti davranışını kontrol eder. Günlüklemeyi (örnekleme, günlük seviyeleri), functionTimeout, eklenti ayarlarını (toplu iş boyutları, eş zamanlılık, önceden getirme) ve JSON şema sürümünü yapılandırın. host.json dosyasını kaynak kontrolünde tutun.
- local.settings.json: Bağlantı dizeleri ve uygulama ayarları dahil olmak üzere yerel geliştirme ayarları. Azure’a dağıtılmaz. Sırları (secret) uygun şekilde yönetin; herkese açık repolardan hariç tutun ve yerel geliştirme için kullanıcı sırları (user-secrets) veya ortam enjeksiyonu kullanın.
- Uygulama ayarları: Function App (App Service) yapılandırmasında saklanır. Kritik ayarlar arasında AzureWebJobsStorage (tetikleyiciler, günlükler ve kontrol noktaları tarafından kullanılan depolama hesabı için), eklentiye özgü bağlantı dizeleri ve herhangi bir özel yapılandırma bulunur. Değişim (swap) sırasında yer değiştirmelerini önlemek için sırları slot ayarları olarak işaretleyin. Sırları düz metin olarak saklamaktan kaçınmak için yönetilen kimlik (managed identity) ile Key Vault referansları kullanın.
Dağıtım seçenekleri:
- Zip Deploy: Derlenmiş yapıtlarınızın (artifact) bir ZIP dosyasını uygulamaya yükleyin. CI/CD için hızlı ve basittir.
undefined
veya zipdeploy API’sini kullanın. Dosyaları içerik dizinine yazar.
- Run-From-Package: WEBSITE_RUN_FROM_PACKAGE ayarını bir paket URL’sine (veya en son sürüm için 1’e) ayarlayın. Çalışma zamanı (runtime) paketi salt okunur olarak bağlar, bu da soğuk başlangıcı (cold start) iyileştirir ve dağıtım sırasında dosya kilitlenme sorunlarını ortadan kaldırır. Tekrarlanabilir geri almalar (rollback) için paketi bir SAS URL’si ile Blob Storage’da saklayın.
- Dağıtım yuvaları (Deployment slots): Hazırlık (staging) ve üretim (production) yuvaları, ısınma (warmup) ile sıfır kesintili değişimler sağlar. Yuvalar, Premium ve Dedicated planlarında desteklenir. Ortamlar arası sızıntıyı önlemek için sırlar ve uç noktalar (endpoint) için yuvaya özgü ayarları (slot ayarı bayrağı) yapılandırın. Trafik taşınmadan önce eklentileri ve bağlamaları (binding) doğrulamak için değişim öncesi ısınma (preSwap warmup) kullanın.
Application Insights ile İzleme:
- Çağrı günlükleri: Her fonksiyon çağrısı; İstekler (Requests), İzler (Traces), İstisnalar (Exceptions) ve Bağımlılıklar (Dependencies) dahil olmak üzere yapılandırılmış telemetri yayar. Yapılandırılmış günlükler için ILogger (veya eşdeğerini) kullanın. Operasyon ve korelasyon kimlikleri, servisler arasındaki aktiviteyi ve bağımlılıkları birbirine bağlar.
- Canlı Metrikler (Live Metrics): Örnekleme olmaksızın iş hacmi (throughput), hatalar ve gecikme süresinin (latency) gerçek zamanlı görünümü. Dağıtımları, ölçeklenmeyi ve yoğun kullanılan yolları (hot path) gözlemlemek için kullanışlıdır. Sorunları izole etmek için fonksiyon adına göre filtreleyin.
- Hatalar ve güvenilirlik: İstisnaları (Exceptions), başarısız İstekleri (Requests) ve bağımlılık hatalarını inceleyin. Hata oranı, FunctionExecutionCount anomalileri veya DLQ/zehirli (poison) kuyruk büyümesi üzerine uyarılar yapılandırın. Storage Queue tetikleyicileri için -poison kuyruğunu izleyin; Service Bus/Event Hubs için teslim edilemeyenler (dead-letter) ve kontrol noktası (checkpoint) sağlığını izleyin. Geçici hataların etkisini azaltmak için host.json’daki yeniden deneme politikalarını ve geri çekilme (backoff) ayarlarını düzenleyin.
- Dağıtık izleme (Distributed tracing): Korelasyonu HTTP ve mesajlaşma yoluyla yaymak için W3C izleme başlıklarını etkinleştirin. Durable Functions için, çerçeve (framework) orkestrasyon ve aktivite telemetrisini birbirine bağlayarak uçtan uca tanılamaya yardımcı olur. Maliyet ve doğruluk arasında denge kurmak için örneklemeyi ayarlayın.
Fonksiyonları dağıtım otomasyonu (GitHub Actions/Azure Pipelines), HTTP uç noktaları için sağlık denetimleri (health probe) ve otomatik ölçeklendirmeye duyarlı ayarlama ile çalıştırın. Paketleri yalın tutun, istemcileri (ör. HttpClient, Service Bus istemcisi) statik singleton’lar olarak önbelleğe alın ve çalışma zamanı hatalarını önlemek için bağlama (binding) bağlantı ayarlarının başlangıçta çözümlendiğini doğrulayın.
Pratik Problem Senaryosu
Contoso Retail, müşteriler sepetlerine ürün eklediğinde gerçek zamanlı olarak indirim uygulayan bir promosyon hizmeti başlatıyor. Arka uç (backend), yüksek değişkenlikli trafiğe düşük gecikme süresiyle yanıt vermeli, bir üçüncü taraf fiyatlandırma API’sini çağırmalı ve bir Cosmos DB sepet belgesini güncellemelidir. Operasyon ekibi, sıfır kesintili dağıtımlar ve hatalara karşı derinlemesine görünürlük istiyor.
- Barındırma planını seçin ve uygulamayı yapılandırın
- İki önceden ısıtılmış örnek (instance) ve VNET entegrasyonu ile bir Azure Functions Premium planı kullanın. Premium plan, gecikmeye duyarlı sepet etkileşimleri için soğuk başlangıçları (cold start) ortadan kaldırır ve VNET’teki bir NAT veya güvenlik duvarı aracılığıyla üçüncü taraf API’sine giden trafiği güvence altına alır.
- Sepet uç noktası için HTTP ile tetiklenen bir fonksiyon ve indirim alımı ile sepet güncellemesini koordine etmek için bir Durable Functions orkestratörü içeren tek bir Function App oluşturun.
- Güvenilirlik ve paralellik için Durable orkestrasyonu uygulayın
- Orkestratör fonksiyonu: Girdiyi doğrulamak, her sepet satırı için indirimleri aktivite fonksiyonları aracılığıyla paralel olarak getirmek üzere yelpazeleme (fan-out) yapmak ve ardından en iyi fiyatı toplamak için birleştirme (fan-in) yapmak üzere adımları zincirleyin. Durable orkestrasyonu, deterministik kontrol akışı ve yeniden başlatmalara karşı dayanıklılık sağlar.
- Aktivite fonksiyonları: Bir aktivite, yeniden deneme politikalarıyla üçüncü taraf API’sini çağırır; diğeri ise bir çıktı bağlaması (output binding) aracılığıyla Cosmos DB’deki sepeti günceller. Aktiviteler, harici G/Ç’yi (IO) kapsüller ve orkestratör mantığını tekrarlamadan bağımsız olarak yeniden denenebilir.
- Basitlik için tetikleyicileri ve bağlamaları yapılandırın
- Web ön ucundan (frontend) imzalı istekleri kabul etmek için Function yetkilendirmeli HTTP tetikleyicisi. Uzun süren sepet işlemleri için bir durum URL’si ile 202 veya hızlı yollar için 200 döndürün.
- Sepet belgesini upsert etmek için aktivite üzerinde Cosmos DB çıktı bağlaması. Bağlama ifadeleri, doğru bölüm anahtarını (partition key) hedeflemek için HTTP yükündeki (payload) cartId’yi kullanır.
- Cosmos DB ve Key Vault referansları için yönetilen kimlik (managed identity) ve kimlik tabanlı bağlantılar kullanarak sırları uygulama ayarlarından kaldırın.
- Yapılandırmayı ve dağıtımı optimize edin
- host.json, functionTimeout’u sınırsız (Premium) olarak ayarlar ve servis ağı (service mesh) dostu HTTP zaman aşımlarını yapılandırır. Günlükleme seviyeleri üretim için Information’a ayarlanır ve maliyeti kontrol etmek için Örneklemeler (Samples) %20 olarak belirlenir.
- Sürümlenmiş bir Blob container’ında saklanan paketlerle run-from-package kullanın. CI aracılığıyla
undefined
ile dağıtım yapın ve sıfır kesintili sürüm yayınları için bir hazırlık yuvası (staging slot) üzerinden üretime değişim (swap) yapın. Ortamlar arası sızıntıyı önlemek için bağlantı dizelerini ve API uç noktalarını slot ayarları olarak işaretleyin.
- İzleyin ve çalıştırın
- Sürüm yayınları sırasında iş hacmini (throughput) ve gecikmeyi (latency) izlemek için Application Insights ve Canlı Metrikler’i (Live Metrics) etkinleştirin. HTTP 5xx, fiyatlandırma API’sine olan bağımlılık hata oranı ve Durable function başarısız orkestrasyonlarındaki artışlar üzerine uyarılar yapılandırın.
- Aralıklı üçüncü taraf sorunları için kök neden analizini hızlandırmak amacıyla HTTP isteğini Durable orkestrasyonu ve aktivite bağımlılıklarıyla ilişkilendirmek için dağıtık izleme (distributed tracing) kullanın.
Neden bu seçimler:
- Önceden ısıtılmış örneklere sahip Premium plan, tutarlı bir şekilde düşük gecikme süresi sağlar ve güvenli çıkış (egress) için VNET entegrasyonunu destekler.
- Durable Functions, harici API çağrıları için otomatik durum ve yeniden deneme yönetimi ile güvenilir zincirleme ve yelpazeleme/birleştirme (fan-out/fan-in) sağlar.
- Bağlamalar (Bindings), kazan kodu (boilerplate) azaltır ve Cosmos DB’ye tutarlı, bildirimsel veri erişimi uygular.
- Run-from-package ve yuvalar, dosya kilitlenme sorunları veya kesinti olmadan tekrarlanabilir, atomik dağıtımlar sunar.
- Application Insights, operasyonel SLA’larla uyumlu gerçek zamanlı gözlemlenebilirlik, korelasyon ve uyarı sunar.
← Azure App Service ve Web Apps · Tüm alanlar · Azure Storage ve Blob Storage →
Bu soruları çözün → · ExamRoll.io’da süreli pratik →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Sınavınızı geçin →