{"id":37483,"date":"2026-01-06T11:41:42","date_gmt":"2026-01-06T08:41:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37483"},"modified":"2026-01-06T11:41:42","modified_gmt":"2026-01-06T08:41:42","slug":"sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/","title":{"rendered":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilme ve da\u011f\u0131t\u0131lma \u015fekilleri s\u00fcrekli evrim ge\u00e7irmektedir. Geleneksel sunucu tabanl\u0131 mimarilerin yerini alan veya onlara g\u00fc\u00e7l\u00fc bir alternatif sunan yakla\u015f\u0131mlardan biri de &#8220;sunucusuz&#8221; (serverless) mimaridir. Sunucusuz mimari, geli\u015ftiricilerin altyap\u0131 y\u00f6netimi endi\u015fesi olmadan kod yazmaya odaklanmas\u0131n\u0131 sa\u011flar. Bu modelin kalbinde ise &#8220;sunucusuz fonksiyonlar&#8221; yatar. Bir di\u011fer ad\u0131yla Fonksiyon-olarak-Hizmet (Function-as-a-Service &#8211; FaaS) olarak bilinen bu fonksiyonlar, belirli bir olaya (event) yan\u0131t olarak \u00e7al\u0131\u015fan, k\u0131sa \u00f6m\u00fcrl\u00fc kod par\u00e7ac\u0131klar\u0131d\u0131r.<\/p>\n<p>Bu makalede, sunucusuz fonksiyonlar\u0131n ne oldu\u011funu, neden bu kadar pop\u00fcler hale geldi\u011fini, temel kavramlar\u0131n\u0131, nas\u0131l yaz\u0131laca\u011f\u0131n\u0131 ve en iyi uygulamalar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. AWS Lambda, Azure Functions ve Google Cloud Functions gibi \u00f6nde gelen bulut sa\u011flay\u0131c\u0131lar\u0131n\u0131n sundu\u011fu hizmetler \u00fczerinden pratik bir \u00f6rnekle konuyu somutla\u015ft\u0131raca\u011f\u0131z. Amac\u0131m\u0131z, sunucusuz fonksiyon d\u00fcnyas\u0131na ad\u0131m atmak isteyen geli\u015ftiricilere kapsaml\u0131 ve pratik bir rehber sunmakt\u0131r.<\/p>\n<p>Sunucusuz mimarinin sundu\u011fu avantajlar saymakla bitmez: maliyet etkinli\u011fi, otomatik \u00f6l\u00e7eklenebilirlik, bak\u0131m y\u00fck\u00fcn\u00fcn azalmas\u0131 ve daha h\u0131zl\u0131 geli\u015ftirme d\u00f6ng\u00fcleri. Ancak her teknolojide oldu\u011fu gibi, sunucusuz fonksiyonlar\u0131n da kendine \u00f6zg\u00fc zorluklar\u0131 ve en iyi uygulama prensipleri vard\u0131r. Bu makale, bu zorluklar\u0131n \u00fcstesinden gelmenize ve sunucusuz fonksiyonlar\u0131n potansiyelini tam olarak kullanman\u0131za yard\u0131mc\u0131 olacak bilgilerle dolu olacakt\u0131r.<\/p>\n<h2>Temel Kavramlar<\/h2>\n<p>Sunucusuz fonksiyonlar\u0131n d\u00fcnyas\u0131na dalmadan \u00f6nce, bu mimarinin temelini olu\u015fturan baz\u0131 \u00f6nemli kavramlar\u0131 anlamak hayati \u00f6nem ta\u015f\u0131r. Bu kavramlar, sunucusuz sistemlerin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve onlarla etkile\u015fime girmenin en iyi yollar\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>FaaS Nedir?<\/h3>\n<p>FaaS (Function-as-a-Service), sunucusuz mimarinin temel ta\u015flar\u0131ndan biridir. Geli\u015ftiricilerin, sunucular\u0131 y\u00f6netmek veya altyap\u0131y\u0131 yap\u0131land\u0131rmak zorunda kalmadan, tek bir i\u015flevi veya kodu \u00e7al\u0131\u015ft\u0131rmas\u0131na olanak tan\u0131yan bir bulut hizmeti modelidir. Bulut sa\u011flay\u0131c\u0131s\u0131 (AWS, Azure, Google Cloud vb.), fonksiyonun \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 i\u00e7in gerekli t\u00fcm sunucu y\u00f6netimi, \u00f6l\u00e7eklendirme, g\u00fcvenlik yamalar\u0131 ve i\u015fletim sistemi g\u00fcncellemeleri gibi g\u00f6revleri \u00fcstlenir. Geli\u015ftiriciler yaln\u0131zca kodlar\u0131n\u0131 yazar, da\u011f\u0131t\u0131r ve tetikleyicileri yap\u0131land\u0131r\u0131r. Fonksiyonlar, yaln\u0131zca \u00e7al\u0131\u015ft\u0131klar\u0131 s\u00fcre boyunca faturaland\u0131r\u0131l\u0131r, bu da maliyet etkinli\u011fi sa\u011flar.<\/p>\n<h3>Olay Tabanl\u0131 Mimari (Event-Driven Architecture)<\/h3>\n<p>Sunucusuz fonksiyonlar, do\u011fas\u0131 gere\u011fi olay tabanl\u0131d\u0131r. Bu, bir fonksiyonun belirli bir olay\u0131n (event) meydana gelmesiyle tetiklendi\u011fi anlam\u0131na gelir. Olaylar \u00e7ok \u00e7e\u015fitli kaynaklardan gelebilir: bir HTTP iste\u011fi, bir veritaban\u0131 kayd\u0131n\u0131n de\u011fi\u015fmesi, bir dosyan\u0131n bulut depolama alan\u0131na y\u00fcklenmesi, bir mesaj kuyru\u011funa yeni bir mesaj\u0131n eklenmesi veya belirli bir zaman \u00e7izelgesine g\u00f6re (cron job gibi). Bu olay tabanl\u0131 yap\u0131, sunucusuz fonksiyonlar\u0131 mikro hizmet mimarileri ve ger\u00e7ek zamanl\u0131 uygulamalar i\u00e7in ideal k\u0131lar. Fonksiyonlar, yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda \u00e7al\u0131\u015farak kaynak t\u00fcketimini minimize eder.<\/p>\n<h3>Cold Start vs. Warm Start<\/h3>\n<p>Sunucusuz fonksiyonlarla ilgili en \u00e7ok konu\u015fulan konulardan biri &#8220;cold start&#8221; (so\u011fuk ba\u015flang\u0131\u00e7) ve &#8220;warm start&#8221; (s\u0131cak ba\u015flang\u0131\u00e7) kavramlar\u0131d\u0131r.<\/p>\n<p>*   <strong>Cold Start:<\/strong> Bir fonksiyon uzun s\u00fcredir \u00e7al\u0131\u015fmad\u0131\u011f\u0131nda veya ilk kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, bulut sa\u011flay\u0131c\u0131s\u0131n\u0131n fonksiyonun \u00e7al\u0131\u015fma ortam\u0131n\u0131 (runtime environment) ba\u015flatmas\u0131, kodunu y\u00fcklemesi ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 \u00e7\u00f6zmesi gerekir. Bu s\u00fcre\u00e7, fonksiyonun ilk \u00e7a\u011fr\u0131lmas\u0131na ek bir gecikme ekler ve buna &#8220;cold start&#8221; denir. Cold start s\u00fcresi, kullan\u0131lan dil, ba\u011f\u0131ml\u0131l\u0131klar\u0131n say\u0131s\u0131 ve kod boyutu gibi fakt\u00f6rlere ba\u011fl\u0131 olarak de\u011fi\u015febilir.<br \/>\n*   <strong>Warm Start:<\/strong> Bir fonksiyon k\u0131sa s\u00fcre \u00f6nce \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131ysa, bulut sa\u011flay\u0131c\u0131s\u0131 genellikle \u00e7al\u0131\u015fma ortam\u0131n\u0131 belirli bir s\u00fcre boyunca aktif tutar. Bu s\u00fcre i\u00e7inde gelen sonraki \u00e7a\u011fr\u0131lar, mevcut ortam\u0131 kullanarak daha h\u0131zl\u0131 ba\u015flar. Buna &#8220;warm start&#8221; denir ve cold start gecikmesini ya\u015famaz.<\/p>\n<p>Cold start, \u00f6zellikle d\u00fc\u015f\u00fck gecikme s\u00fcresi gerektiren uygulamalar i\u00e7in bir zorluk te\u015fkil edebilir. Sa\u011flay\u0131c\u0131lar, bu sorunu hafifletmek i\u00e7in \u00e7e\u015fitli optimizasyonlar ve \u00f6zellikler (\u00f6rne\u011fin, Provisioned Concurrency) sunmaktad\u0131r.<\/p>\n<h3>Fonksiyon Tetikleyicileri (Triggers)<\/h3>\n<p>Bir sunucusuz fonksiyonun ne zaman \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirleyen mekanizmalara tetikleyiciler denir. Her bulut sa\u011flay\u0131c\u0131s\u0131, \u00e7ok \u00e7e\u015fitli tetikleyici t\u00fcrlerini destekler. En yayg\u0131n tetikleyici t\u00fcrleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>HTTP\/API Gateway:<\/strong> Bir HTTP iste\u011fi (REST API \u00e7a\u011fr\u0131s\u0131) al\u0131nd\u0131\u011f\u0131nda fonksiyonu tetikler. Web uygulamalar\u0131 ve API backend&#8217;leri i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Veritaban\u0131 De\u011fi\u015fiklikleri:<\/strong> Bir veritaban\u0131ndaki (\u00f6rn. DynamoDB, Cosmos DB) bir kayd\u0131n eklenmesi, g\u00fcncellenmesi veya silinmesi durumunda fonksiyonu tetikler.<br \/>\n*   <strong>Depolama Olaylar\u0131:<\/strong> Bir dosyan\u0131n bulut depolama alan\u0131na (\u00f6rn. S3, Blob Storage) y\u00fcklenmesi, silinmesi veya g\u00fcncellenmesi durumunda tetiklenir.<br \/>\n*   <strong>Mesaj Kuyruklar\u0131\/Ak\u0131\u015flar\u0131:<\/strong> Bir mesaj kuyru\u011funa (\u00f6rn. SQS, Azure Service Bus) veya olay ak\u0131\u015f\u0131na (\u00f6rn. Kinesis, Kafka) yeni bir mesaj geldi\u011finde tetiklenir.<br \/>\n*   <strong>Zamanlay\u0131c\u0131lar (Cron Jobs):<\/strong> Belirli aral\u0131klarla veya belirli bir zamanda (\u00f6rn. her gece saat 03:00&#8217;te) fonksiyonu tetikler.<br \/>\n*   <strong>Kimlik Do\u011frulama Olaylar\u0131:<\/strong> Kullan\u0131c\u0131 kayd\u0131, giri\u015f veya \u015fifre s\u0131f\u0131rlama gibi kimlik do\u011frulama hizmetlerindeki olaylara yan\u0131t olarak tetiklenir.<\/p>\n<h3>Sunucusuz Ortamlar (Runtimes)<\/h3>\n<p>Sunucusuz fonksiyonlar, belirli bir programlama dili i\u00e7in \u00f6zel olarak yap\u0131land\u0131r\u0131lm\u0131\u015f bir &#8220;runtime environment&#8221; (\u00e7al\u0131\u015fma ortam\u0131) i\u00e7inde \u00e7al\u0131\u015f\u0131r. Bulut sa\u011flay\u0131c\u0131lar\u0131 genellikle pop\u00fcler diller i\u00e7in yerel destek sunar:<\/p>\n<p>*   Node.js<br \/>\n*   Python<br \/>\n*   Java<br \/>\n*   C# (.NET)<br \/>\n*   Go<br \/>\n*   Ruby<br \/>\n*   PHP (baz\u0131 sa\u011flay\u0131c\u0131larda)<br \/>\n*   Custom Runtimes (\u00f6zel \u00e7al\u0131\u015fma ortamlar\u0131, Docker imajlar\u0131 kullanarak herhangi bir dili \u00e7al\u0131\u015ft\u0131rma imkan\u0131)<\/p>\n<p>Geli\u015ftiriciler, fonksiyonlar\u0131n\u0131 yazacaklar\u0131 dili se\u00e7er ve bulut sa\u011flay\u0131c\u0131s\u0131 bu dilin gerektirdi\u011fi \u00e7al\u0131\u015fma ortam\u0131n\u0131 sa\u011flar. Bu ortam, fonksiyonun kodunu ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131racak i\u015fletim sistemi, dil yorumlay\u0131c\u0131s\u0131\/derleyicisi ve gerekli k\u00fct\u00fcphaneleri i\u00e7erir.<\/p>\n<p>Bu temel kavramlar\u0131 anlamak, sunucusuz fonksiyonlar\u0131 etkili bir \u015fekilde tasarlaman\u0131z, geli\u015ftirmeniz ve sorun gidermeniz i\u00e7in sa\u011flam bir temel olu\u015fturacakt\u0131r.<\/p>\n<h2>Sunucusuz Fonksiyon Yazmaya Ba\u015flamadan \u00d6nce<\/h2>\n<p>Bir sunucusuz fonksiyon yazmaya ba\u015flamadan \u00f6nce atman\u0131z gereken baz\u0131 \u00f6nemli ad\u0131mlar ve yapman\u0131z gereken se\u00e7imler vard\u0131r. Bu \u00f6n haz\u0131rl\u0131k, geli\u015ftirme s\u00fcrecinizi kolayla\u015ft\u0131racak ve projenizin ba\u015far\u0131s\u0131 i\u00e7in sa\u011flam bir temel olu\u015fturacakt\u0131r.<\/p>\n<h3>Sa\u011flay\u0131c\u0131 Se\u00e7imi<\/h3>\n<p>Sunucusuz fonksiyonlar i\u00e7in bir\u00e7ok bulut sa\u011flay\u0131c\u0131s\u0131 se\u00e7ene\u011fi mevcuttur ve her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve ekosistemi vard\u0131r. En pop\u00fcler olanlar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>AWS Lambda:<\/strong> Pazar lideri olup, geni\u015f bir hizmet yelpazesi ve olgun bir ekosistem sunar. Entegrasyon se\u00e7enekleri \u00e7ok fazlad\u0131r.<br \/>\n*   <strong>Azure Functions:<\/strong> Microsoft ekosistemine a\u015fina olanlar i\u00e7in idealdir. Visual Studio entegrasyonu ve .NET deste\u011fi g\u00fc\u00e7l\u00fcd\u00fcr.<br \/>\n*   <strong>Google Cloud Functions:<\/strong> Google Cloud Platform (GCP) kullan\u0131c\u0131lar\u0131 i\u00e7in do\u011fal bir se\u00e7imdir. Firebase ile g\u00fc\u00e7l\u00fc entegrasyonu vard\u0131r.<br \/>\n*   <strong>Cloudflare Workers:<\/strong> Edge computing (u\u00e7 bili\u015fim) odakl\u0131d\u0131r. Fonksiyonlar\u0131 d\u00fcnya genelindeki Cloudflare a\u011f\u0131nda \u00e7al\u0131\u015ft\u0131rarak \u00e7ok d\u00fc\u015f\u00fck gecikme s\u00fcreleri sunar. JavaScript\/TypeScript tabanl\u0131d\u0131r.<br \/>\n*   <strong>Vercel Functions\/Netlify Functions:<\/strong> Frontend geli\u015ftiricileri i\u00e7in pop\u00fclerdir. Kendi statik site\/frontend bar\u0131nd\u0131rma hizmetleriyle entegre olarak, API ve backend fonksiyonlar\u0131n\u0131 kolayca da\u011f\u0131tma imkan\u0131 sunar.<\/p>\n<p>Se\u00e7im yaparken projenizin gereksinimlerini, mevcut teknoloji y\u0131\u011f\u0131n\u0131n\u0131z\u0131, maliyet beklentilerinizi ve geli\u015ftirme ekibinizin a\u015final\u0131\u011f\u0131n\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmal\u0131s\u0131n\u0131z.<\/p>\n<h3>Programlama Dili Se\u00e7imi<\/h3>\n<p>\u00c7o\u011fu b\u00fcy\u00fck bulut sa\u011flay\u0131c\u0131s\u0131, Node.js, Python, Java, C#, Go ve Ruby gibi pop\u00fcler programlama dillerini destekler. Dil se\u00e7imi, ekibinizin uzmanl\u0131\u011f\u0131na, projenin performans gereksinimlerine ve mevcut ekosistemdeki k\u00fct\u00fcphane deste\u011fine ba\u011fl\u0131d\u0131r.<\/p>\n<p>*   <strong>Node.js ve Python:<\/strong> Genellikle cold start s\u00fcreleri daha k\u0131sad\u0131r ve h\u0131zl\u0131 geli\u015ftirme i\u00e7in tercih edilir. Web API&#8217;leri, veri i\u015fleme ve otomasyon g\u00f6revleri i\u00e7in pop\u00fclerdir.<br \/>\n*   <strong>Java ve C#:<\/strong> Daha b\u00fcy\u00fck ve karma\u015f\u0131k kurumsal uygulamalar i\u00e7in tercih edilebilir. Cold start s\u00fcreleri genellikle daha uzundur ancak daha y\u00fcksek performans ve daha olgun bir kurumsal ekosistem sunarlar.<br \/>\n*   <strong>Go:<\/strong> Y\u00fcksek performans ve d\u00fc\u015f\u00fck bellek t\u00fcketimi isteyen senaryolar i\u00e7in iyi bir se\u00e7enektir.<\/p>\n<h3>Geli\u015ftirme Ortam\u0131 ve Ara\u00e7lar\u0131<\/h3>\n<p>Sunucusuz fonksiyonlar\u0131 geli\u015ftirmek i\u00e7in baz\u0131 ara\u00e7lara ihtiyac\u0131n\u0131z olacakt\u0131r:<\/p>\n<p>*   <strong>Bulut Sa\u011flay\u0131c\u0131s\u0131n\u0131n CLI (Command Line Interface):<\/strong> AWS CLI, Azure CLI, gcloud CLI gibi ara\u00e7lar, fonksiyonlar\u0131 yerel ortamdan olu\u015fturman\u0131za, yap\u0131land\u0131rman\u0131za ve da\u011f\u0131tman\u0131za olanak tan\u0131r.<br \/>\n*   <strong>SDK&#8217;lar (Software Development Kits):<\/strong> Se\u00e7ti\u011finiz programlama dili i\u00e7in sa\u011flay\u0131c\u0131n\u0131n SDK&#8217;s\u0131n\u0131 kullanarak bulut hizmetleriyle etkile\u015fime ge\u00e7ebilirsiniz.<br \/>\n*   <strong>IDE\/Metin Edit\u00f6r\u00fc:<\/strong> Visual Studio Code, PyCharm, IntelliJ IDEA gibi bir geli\u015ftirme ortam\u0131, kod yazma ve hata ay\u0131klama s\u00fcre\u00e7lerini kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Yerel Test Ara\u00e7lar\u0131:<\/strong> Baz\u0131 sa\u011flay\u0131c\u0131lar veya \u00fc\u00e7\u00fcnc\u00fc taraf ara\u00e7lar (\u00f6rne\u011fin, AWS SAM CLI), fonksiyonlar\u0131n\u0131z\u0131 buluta da\u011f\u0131tmadan \u00f6nce yerel olarak test etmenizi sa\u011flar.<br \/>\n*   <strong>Sunucusuz \u00c7er\u00e7eveler (Serverless Frameworks):<\/strong> Serverless Framework, AWS SAM, SST gibi ara\u00e7lar, sunucusuz uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131n\u0131, y\u00f6netimini ve testini basitle\u015ftiren g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r.<\/p>\n<h3>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi<\/h3>\n<p>\u00c7o\u011fu fonksiyon, harici k\u00fct\u00fcphanelere veya mod\u00fcllere ihtiya\u00e7 duyar. Bu ba\u011f\u0131ml\u0131l\u0131klar\u0131n do\u011fru bir \u015fekilde y\u00f6netilmesi ve fonksiyon kodunuzla birlikte buluta da\u011f\u0131t\u0131lmas\u0131 \u00f6nemlidir.<\/p>\n<p>*   <strong>Node.js:<\/strong> <code>npm<\/code> veya <code>yarn<\/code> kullanarak <code>package.json<\/code> dosyas\u0131nda ba\u011f\u0131ml\u0131l\u0131klar\u0131 tan\u0131mlars\u0131n\u0131z. Da\u011f\u0131t\u0131m i\u00e7in <code>node_modules<\/code> klas\u00f6r\u00fc genellikle fonksiyon koduyla birlikte paketlenir.<br \/>\n*   <strong>Python:<\/strong> <code>pip<\/code> kullanarak <code>requirements.txt<\/code> dosyas\u0131nda ba\u011f\u0131ml\u0131l\u0131klar\u0131 belirtirsiniz. Bu ba\u011f\u0131ml\u0131l\u0131klar, da\u011f\u0131t\u0131m paketinize dahil edilmelidir.<br \/>\n*   <strong>Di\u011fer Diller:<\/strong> Benzer \u015fekilde, her dilin kendi paket y\u00f6neticisi ve ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi mekanizmas\u0131 vard\u0131r.<\/p>\n<p>Ba\u011f\u0131ml\u0131l\u0131klar\u0131n boyutunu k\u00fc\u00e7\u00fck tutmak, cold start s\u00fcrelerini optimize etmek a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<p>Bu \u00f6n ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, art\u0131k ilk sunucusuz fonksiyonunuzu yazmaya haz\u0131rs\u0131n\u0131z.<\/p>\n<h2>Pratik Bir \u00d6rnek: AWS Lambda ile Sunucusuz Fonksiyon Yaz\u0131m\u0131<\/h2>\n<p>Bu b\u00f6l\u00fcmde, AWS Lambda kullanarak basit bir sunucusuz fonksiyonun nas\u0131l yaz\u0131laca\u011f\u0131n\u0131, da\u011f\u0131t\u0131laca\u011f\u0131n\u0131 ve bir API Gateway tetikleyicisi ile nas\u0131l entegre edilece\u011fini ad\u0131m ad\u0131m g\u00f6sterece\u011fiz. Node.js dilini kullanaca\u011f\u0131z, ancak prensipler di\u011fer diller i\u00e7in de benzerdir.<\/p>\n<h3>Senaryo Belirleme<\/h3>\n<p>Basit bir &#8220;Hello World&#8221; mesaj\u0131 d\u00f6nd\u00fcren ve iste\u011fe ba\u011fl\u0131 olarak bir sorgu parametresi (query parameter) ile ki\u015fiselle\u015ftirilebilen bir REST API endpoint&#8217;i olu\u015ftural\u0131m.<\/p>\n<p>*   <code>GET \/hello<\/code>: &#8220;Merhaba, sunucusuz d\u00fcnya!&#8221; d\u00f6nd\u00fcrecek.<br \/>\n*   <code>GET \/hello?name=John<\/code>: &#8220;Merhaba, John!&#8221; d\u00f6nd\u00fcrecek.<\/p>\n<h3>Gereksinimler<\/h3>\n<p>*   Bir AWS hesab\u0131 (ve yap\u0131land\u0131r\u0131lm\u0131\u015f kimlik bilgileri).<br \/>\n*   AWS CLI y\u00fckl\u00fc ve yap\u0131land\u0131r\u0131lm\u0131\u015f.<br \/>\n*   Node.js ve npm y\u00fckl\u00fc.<\/p>\n<h3>Ad\u0131m 1: Fonksiyon Olu\u015fturma<\/h3>\n<p>AWS Lambda fonksiyonunu AWS Y\u00f6netim Konsolu veya AWS CLI \u00fczerinden olu\u015fturabilirsiniz. CLI daha otomatize bir yakla\u015f\u0131m sundu\u011fu i\u00e7in onu tercih edelim.<\/p>\n<p>\u00d6ncelikle, fonksiyonumuz i\u00e7in bir IAM rol\u00fc olu\u015fturmam\u0131z gerekiyor. Bu rol, Lambda fonksiyonumuzun CloudWatch Logs&#8217;a g\u00fcnl\u00fck yazma iznine sahip olmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<p>1.  <strong>IAM Rol\u00fc Olu\u015fturma:<\/strong><br \/>\n    <code>lambda-basic-execution-role.json<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki g\u00fcven ilkesini ekleyin:<\/p>\n<pre><code class=\"language-json\">{\n      \"Version\": \"2012-10-17\",\n      \"Statement\": [\n        {\n          \"Effect\": \"Allow\",\n          \"Principal\": {\n            \"Service\": \"lambda.amazonaws.com\"\n          },\n          \"Action\": \"sts:AssumeRole\"\n        }\n      ]\n    }<\/code><\/pre>\n<p>    \u015eimdi bu politikay\u0131 kullanarak rol\u00fc olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">aws iam create-role --role-name lambda-hello-world-role --assume-role-policy-document file:\/\/lambda-basic-execution-role.json<\/code><\/pre>\n<p>    Rol olu\u015fturulduktan sonra, Lambda&#8217;n\u0131n CloudWatch&#8217;a log yazabilmesi i\u00e7in gerekli politikay\u0131 ekleyin:<\/p>\n<pre><code class=\"language-bash\">aws iam attach-role-policy --role-name lambda-hello-world-role --policy-arn arn:aws:iam::aws:policy\/service-role\/AWSLambdaBasicExecutionRole<\/code><\/pre>\n<p>    Bu komutlar\u0131n \u00e7\u0131kt\u0131s\u0131ndan <code>Role.Arn<\/code> de\u011ferini not al\u0131n. Bu, fonksiyonu olu\u015ftururken kullanaca\u011f\u0131m\u0131z rol ARN&#8217;sidir.<\/p>\n<h3>Ad\u0131m 2: Kod Yaz\u0131m\u0131<\/h3>\n<p>\u015eimdi fonksiyon kodunu yazal\u0131m. <code>hello-world<\/code> ad\u0131nda bir klas\u00f6r olu\u015fturun ve i\u00e7ine <code>index.js<\/code> ad\u0131nda bir dosya ekleyin:<\/p>\n<pre><code class=\"language-javascript\">\/\/ hello-world\/index.js\n\nexports.handler = async (event) => {\n    let name = 'sunucusuz d\u00fcnya'; \/\/ Varsay\u0131lan isim\n\n    \/\/ E\u011fer event objesinde query string parametreleri varsa\n    if (event.queryStringParameters && event.queryStringParameters.name) {\n        name = event.queryStringParameters.name;\n    }\n\n    const response = {\n        statusCode: 200,\n        headers: {\n            \"Content-Type\": \"application\/json\"\n        },\n        body: JSON.stringify({ message: <code>Merhaba, ${name}!<\/code> }),\n    };\n    return response;\n};<\/code><\/pre>\n<p>*   <code>exports.handler<\/code>: Bu, Lambda&#8217;n\u0131n fonksiyonunuzu \u00e7a\u011f\u0131rd\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131raca\u011f\u0131 ana fonksiyondur.<br \/>\n*   <code>event<\/code>: Bu obje, tetikleyiciden gelen verileri i\u00e7erir. API Gateway durumunda, HTTP iste\u011fi detaylar\u0131n\u0131 (metot, yol, ba\u015fl\u0131klar, sorgu parametreleri, g\u00f6vde vb.) i\u00e7erir.<br \/>\n*   <code>context<\/code>: Bu obje, \u00e7al\u0131\u015fma zaman\u0131 bilgileri, istek kimli\u011fi ve g\u00fcnl\u00fck gruplar\u0131 gibi bilgileri i\u00e7erir.<br \/>\n*   <code>statusCode<\/code>, <code>headers<\/code>, <code>body<\/code>: Bu format, API Gateway ile sorunsuz entegrasyon i\u00e7in \u00f6nemlidir. <code>body<\/code> alan\u0131 bir string olmal\u0131d\u0131r, bu y\u00fczden JSON objemizi <code>JSON.stringify()<\/code> ile string&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fcyoruz.<\/p>\n<h3>Ad\u0131m 3: Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00f6netme<\/h3>\n<p>Bu basit \u00f6rnekte harici bir ba\u011f\u0131ml\u0131l\u0131\u011f\u0131m\u0131z yok. Ancak olsayd\u0131, <code>package.json<\/code> dosyas\u0131n\u0131 olu\u015fturur, ba\u011f\u0131ml\u0131l\u0131klar\u0131 <code>npm install<\/code> ile kurar ve ard\u0131ndan <code>node_modules<\/code> klas\u00f6r\u00fcn\u00fc de zip dosyas\u0131na dahil ederdik.<\/p>\n<p>\u015eimdi fonksiyon kodumuzu bir zip dosyas\u0131na s\u0131k\u0131\u015ft\u0131ral\u0131m:<\/p>\n<pre><code class=\"language-bash\">cd hello-world\nzip -r ..\/hello-world.zip .\ncd ..<\/code><\/pre>\n<p>Bu komutlar, <code>hello-world<\/code> klas\u00f6r\u00fcn\u00fcn i\u00e7eri\u011fini (<code>index.js<\/code>) bir \u00fcst klas\u00f6rde <code>hello-world.zip<\/code> ad\u0131yla s\u0131k\u0131\u015ft\u0131r\u0131r.<\/p>\n<h3>Ad\u0131m 4: Fonksiyonu Da\u011f\u0131tma (Deploy)<\/h3>\n<p>\u015eimdi fonksiyonumuzu AWS Lambda&#8217;ya da\u011f\u0131tal\u0131m. <code>YOUR_LAMBDA_ROLE_ARN<\/code> yerine Ad\u0131m 1&#8217;de ald\u0131\u011f\u0131n\u0131z IAM rol ARN&#8217;sini koyun.<\/p>\n<pre><code class=\"language-bash\">aws lambda create-function \\\n    --function-name HelloWorldFunction \\\n    --runtime nodejs18.x \\\n    --zip-file fileb:\/\/hello-world.zip \\\n    --handler index.handler \\\n    --role arn:aws:iam::123456789012:role\/lambda-hello-world-role \\\n    --timeout 30 \\\n    --memory-size 128<\/code><\/pre>\n<p>*   <code>--function-name<\/code>: Fonksiyonunuzun ad\u0131.<br \/>\n*   <code>--runtime<\/code>: Kullan\u0131lan Node.js versiyonu.<br \/>\n*   <code>--zip-file<\/code>: Da\u011f\u0131t\u0131lacak zip dosyas\u0131n\u0131n yolu.<br \/>\n*   <code>--handler<\/code>: Fonksiyonunuzun giri\u015f noktas\u0131 (<code>dosya_ad\u0131.fonksiyon_ad\u0131<\/code>).<br \/>\n*   <code>--role<\/code>: Fonksiyonun kullanaca\u011f\u0131 IAM rol\u00fcn\u00fcn ARN&#8217;si.<br \/>\n*   <code>--timeout<\/code>: Fonksiyonun \u00e7al\u0131\u015fmas\u0131na izin verilen maksimum saniye.<br \/>\n*   <code>--memory-size<\/code>: Fonksiyona tahsis edilen bellek (MB).<\/p>\n<p>Fonksiyon ba\u015far\u0131yla olu\u015fturulduktan sonra, \u00e7\u0131kt\u0131da fonksiyonun ARN&#8217;sini g\u00f6receksiniz.<\/p>\n<h3>Ad\u0131m 5: Tetikleyici Yap\u0131land\u0131rma (API Gateway)<\/h3>\n<p>\u015eimdi bu Lambda fonksiyonunu bir HTTP iste\u011fiyle tetikleyebilmek i\u00e7in bir API Gateway tetikleyicisi ekleyelim.<\/p>\n<p>1.  <strong>API Gateway Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">aws apigatewayv2 create-api --name HelloWorldAPI --protocol-type HTTP --target arn:aws:lambda:REGION:ACCOUNT_ID:function:HelloWorldFunction<\/code><\/pre>\n<p>    *   <code>REGION<\/code>: AWS b\u00f6lgeniz (\u00f6rn. <code>us-east-1<\/code>).<br \/>\n    *   <code>ACCOUNT_ID<\/code>: AWS hesap ID&#8217;niz.<br \/>\n    *   <code>HelloWorldFunction<\/code>: Lambda fonksiyonunuzun ad\u0131.<\/p>\n<p>    Bu komut size bir <code>ApiId<\/code> ve <code>ApiEndpoint<\/code> d\u00f6nd\u00fcrecektir. <code>ApiEndpoint<\/code> URL&#8217;sini not al\u0131n.<\/p>\n<p>2.  <strong>Lambda \u0130zinlerini Yap\u0131land\u0131rma:<\/strong><br \/>\n    API Gateway&#8217;in Lambda fonksiyonunuzu \u00e7a\u011f\u0131rabilmesi i\u00e7in gerekli izni vermeniz gerekir.<\/p>\n<pre><code class=\"language-bash\">aws lambda add-permission \\\n        --function-name HelloWorldFunction \\\n        --statement-id ApiGatewayInvoke \\\n        --action lambda:InvokeFunction \\\n        --principal apigateway.amazonaws.com \\\n        --source-arn \"arn:aws:execute-api:REGION:ACCOUNT_ID:API_ID\/<em>\/<\/em>\"<\/code><\/pre>\n<p>    *   <code>API_ID<\/code>: \u00d6nceki ad\u0131mda ald\u0131\u011f\u0131n\u0131z <code>ApiId<\/code>.<br \/>\n    *   <code>REGION<\/code> ve <code>ACCOUNT_ID<\/code> kendi de\u011ferlerinizle de\u011fi\u015ftirin.<\/p>\n<h3>Ad\u0131m 6: Test Etme<\/h3>\n<p>\u015eimdi API Gateway&#8217;in sa\u011flad\u0131\u011f\u0131 URL \u00fczerinden fonksiyonumuzu test edebiliriz.<\/p>\n<p>1.  <strong>Varsay\u0131lan \u00c7a\u011fr\u0131:<\/strong><br \/>\n    Taray\u0131c\u0131n\u0131zda veya <code>curl<\/code> kullanarak <code>ApiEndpoint<\/code> URL&#8217;nizi ziyaret edin.<\/p>\n<pre><code class=\"language-bash\">curl YOUR_API_ENDPOINT<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131: <code>{\"message\":\"Merhaba, sunucusuz d\u00fcnya!\"}<\/code><\/p>\n<p>2.  <strong>Parametreli \u00c7a\u011fr\u0131:<\/strong><br \/>\n    \u015eimdi bir <code>name<\/code> sorgu parametresi ekleyelim:<\/p>\n<pre><code class=\"language-bash\">curl \"YOUR_API_ENDPOINT?name=Geli\u015ftirici\"<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131: <code>{\"message\":\"Merhaba, Geli\u015ftirici!\"}<\/code><\/p>\n<p>Tebrikler! \u0130lk sunucusuz fonksiyonunuzu AWS Lambda \u00fczerinde ba\u015far\u0131yla da\u011f\u0131tt\u0131n\u0131z ve test ettiniz.<\/p>\n<h3>Ad\u0131m 7: Loglama ve \u0130zleme<\/h3>\n<p>AWS Lambda, fonksiyonlar\u0131n\u0131z\u0131n \u00e7al\u0131\u015fma zaman\u0131 g\u00fcnl\u00fcklerini otomatik olarak Amazon CloudWatch Logs&#8217;a g\u00f6nderir.<\/p>\n<p>*   AWS Y\u00f6netim Konsolu&#8217;nda Lambda fonksiyonunuza gidin.<br \/>\n*   &#8220;Monitor&#8221; sekmesine t\u0131klay\u0131n.<br \/>\n*   &#8220;View CloudWatch logs&#8221; d\u00fc\u011fmesine t\u0131klayarak fonksiyonunuzun g\u00fcnl\u00fcklerini g\u00f6rebilirsiniz. Burada, fonksiyonunuzun her \u00e7a\u011fr\u0131s\u0131 i\u00e7in ba\u015flang\u0131\u00e7, biti\u015f ve rapor (s\u00fcre, bellek kullan\u0131m\u0131 vb.) bilgilerini bulacaks\u0131n\u0131z.<br \/>\n*   CloudWatch ayr\u0131ca fonksiyonunuzun \u00e7a\u011fr\u0131 say\u0131s\u0131, hata oran\u0131, gecikme s\u00fcresi gibi metrikleri de otomatik olarak toplar.<\/p>\n<p>Bu ad\u0131mlar, basit bir sunucusuz fonksiyonun ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc anlaman\u0131z i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Daha karma\u015f\u0131k uygulamalar i\u00e7in, veritaban\u0131 entegrasyonlar\u0131, ortam de\u011fi\u015fkenleri, VPC yap\u0131land\u0131rmalar\u0131 ve daha geli\u015fmi\u015f hata y\u00f6netimi gibi konulara odaklanman\u0131z gerekecektir.<\/p>\n<h2>Sunucusuz Fonksiyon Tasar\u0131m\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Sunucusuz fonksiyonlar, geli\u015ftirme s\u00fcre\u00e7lerini basitle\u015ftirirken, ayn\u0131 zamanda kendine \u00f6zg\u00fc tasar\u0131m prensipleri ve en iyi uygulamalar gerektirir. Bu prensiplere uymak, \u00f6l\u00e7eklenebilir, g\u00fcvenli, bak\u0131m\u0131 kolay ve maliyet etkin sunucusuz uygulamalar olu\u015fturman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Tek Sorumluluk Prensibi (Single Responsibility Principle &#8211; SRP)<\/h3>\n<p>Her sunucusuz fonksiyonun yaln\u0131zca tek bir i\u015flevi yerine getirmesi idealdir. B\u00fcy\u00fck, monolitik fonksiyonlar yerine, k\u00fc\u00e7\u00fck, odaklanm\u0131\u015f fonksiyonlar olu\u015fturun. Bu yakla\u015f\u0131m:<\/p>\n<p>*   <strong>Bak\u0131m\u0131 Kolayla\u015ft\u0131r\u0131r:<\/strong> Bir fonksiyonun amac\u0131 net oldu\u011funda, kodunu anlamak ve de\u011fi\u015ftirmek daha kolayd\u0131r.<br \/>\n*   <strong>Test Edilebilirli\u011fi Art\u0131r\u0131r:<\/strong> K\u00fc\u00e7\u00fck fonksiyonlar i\u00e7in birim testleri yazmak daha basittir.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirli\u011fi \u0130yile\u015ftirir:<\/strong> Her fonksiyon ba\u011f\u0131ms\u0131z olarak \u00f6l\u00e7eklenebildi\u011fi i\u00e7in, uygulaman\u0131z\u0131n yaln\u0131zca ihtiya\u00e7 duyulan k\u0131s\u0131mlar\u0131 kaynak t\u00fcketir.<br \/>\n*   <strong>Maliyet Etkinli\u011fi Sa\u011flar:<\/strong> Yaln\u0131zca belirli bir i\u015flev i\u00e7in \u00f6deme yapars\u0131n\u0131z.<\/p>\n<h3>Stateless Olma<\/h3>\n<p>Sunucusuz fonksiyonlar do\u011fas\u0131 gere\u011fi durumsuz (stateless) olmal\u0131d\u0131r. Bu, bir fonksiyonun \u00e7al\u0131\u015fma ortam\u0131n\u0131n veya \u00f6nceki \u00e7a\u011fr\u0131lar\u0131ndan gelen verileri saklamamas\u0131 gerekti\u011fi anlam\u0131na gelir. Her \u00e7a\u011fr\u0131, tamamen yeni bir y\u00fcr\u00fctme ortam\u0131nda \u00e7al\u0131\u015f\u0131yormu\u015f gibi davranmal\u0131d\u0131r. Durum bilgisi gerektiren veriler (kullan\u0131c\u0131 oturumlar\u0131, veritaban\u0131 ba\u011flant\u0131lar\u0131 vb.) harici depolama hizmetlerinde (veritabanlar\u0131, \u00f6nbellekler, depolama kovalar\u0131) tutulmal\u0131d\u0131r. Bu, fonksiyonlar\u0131n kolayca \u00f6l\u00e7eklenmesini ve hatalara kar\u015f\u0131 daha diren\u00e7li olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>H\u0131zl\u0131 Ba\u015flang\u0131\u00e7 S\u00fcreleri \u0130\u00e7in Optimizasyon<\/h3>\n<p>Cold start, sunucusuz fonksiyonlar\u0131n \u00f6nemli bir dezavantaj\u0131 olabilir. Bunu minimize etmek i\u00e7in:<\/p>\n<p>*   <strong>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Minimize Edin:<\/strong> Fonksiyonunuzun kulland\u0131\u011f\u0131 harici k\u00fct\u00fcphanelerin say\u0131s\u0131n\u0131 ve boyutunu m\u00fcmk\u00fcn oldu\u011funca azalt\u0131n. Yaln\u0131zca ger\u00e7ekten ihtiyac\u0131n\u0131z olanlar\u0131 dahil edin.<br \/>\n*   <strong>Kod Boyutunu K\u00fc\u00e7\u00fclt\u00fcn:<\/strong> Fonksiyon kodunuzun kendisi de k\u00fc\u00e7\u00fck olmal\u0131d\u0131r. Gerekli olmayan dosyalar\u0131 da\u011f\u0131t\u0131m paketinizden \u00e7\u0131kar\u0131n.<br \/>\n*   <strong>Daha H\u0131zl\u0131 Diller Kullan\u0131n:<\/strong> Node.js, Python ve Go gibi diller genellikle Java veya .NET&#8217;e g\u00f6re daha k\u0131sa cold start s\u00fcrelerine sahiptir.<br \/>\n*   <strong>Provisioned Concurrency (\u00d6nceden Tahsis Edilmi\u015f E\u015fzamanl\u0131l\u0131k) Kullan\u0131n:<\/strong> Baz\u0131 sa\u011flay\u0131c\u0131lar (\u00f6rn. AWS Lambda), belirli say\u0131da fonksiyon \u00f6rne\u011finin her zaman &#8220;s\u0131cak&#8221; kalmas\u0131n\u0131 sa\u011flayan \u00f6zellikler sunar. Bu, maliyetli olabilir ancak kritik uygulamalar i\u00e7in cold start&#8217;\u0131 tamamen ortadan kald\u0131r\u0131r.<\/p>\n<h3>Hata Y\u00f6netimi ve Yeniden Denemeler<\/h3>\n<p>Sunucusuz fonksiyonlar da hata verebilir. Sa\u011flam bir hata y\u00f6netimi stratejisi olu\u015fturmak \u00f6nemlidir:<\/p>\n<p>*   <strong>Do\u011fru Hata Kodlar\u0131 ve Mesajlar\u0131 D\u00f6n\u00fcn:<\/strong> API Gateway arac\u0131l\u0131\u011f\u0131yla tetiklenen fonksiyonlar i\u00e7in, uygun HTTP durum kodlar\u0131 (\u00f6rn. 400, 404, 500) ve a\u00e7\u0131klay\u0131c\u0131 hata mesajlar\u0131 d\u00f6nd\u00fcr\u00fcn.<br \/>\n*   <strong>\u00d6l\u00fc Harf Kuyruklar\u0131 (Dead-Letter Queues &#8211; DLQ):<\/strong> Bir fonksiyonun birden fazla denemeden sonra bile ba\u015far\u0131s\u0131z olmas\u0131 durumunda, ba\u015far\u0131s\u0131z olaylar\u0131 bir DLQ&#8217;ya (\u00f6rn. SQS kuyru\u011fu) y\u00f6nlendirin. Bu, ba\u015far\u0131s\u0131z olaylar\u0131 daha sonra incelemenize ve yeniden i\u015flemenize olanak tan\u0131r.<br \/>\n*   <strong>\u0130dempotence (Tekrarlanabilirlik):<\/strong> Fonksiyonlar\u0131n\u0131z\u0131, ayn\u0131 girdiyle birden fazla kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda bile ayn\u0131 sonucu verecek \u015fekilde tasarlay\u0131n. Bu, \u00f6zellikle otomatik yeniden denemelerle \u00e7al\u0131\u015f\u0131rken \u00f6nemlidir.<\/p>\n<h3>G\u00fcvenlik<\/h3>\n<p>Sunucusuz fonksiyonlar\u0131n g\u00fcvenli\u011fi, geleneksel sunuculardan farkl\u0131 bir yakla\u015f\u0131m gerektirir:<\/p>\n<p>*   <strong>En Az Ayr\u0131cal\u0131k Prensibi (Least Privilege):<\/strong> Fonksiyonlar\u0131n\u0131za yaln\u0131zca i\u015flerini yapmak i\u00e7in kesinlikle ihtiya\u00e7 duyduklar\u0131 izinleri verin. \u00d6rne\u011fin, bir fonksiyonun yaln\u0131zca belirli bir S3 kovas\u0131na yazma izni olmas\u0131 gerekiyorsa, ona t\u00fcm S3 kovalar\u0131na tam eri\u015fim izni vermeyin.<br \/>\n*   <strong>Ortam De\u011fi\u015fkenleri ile Hassas Bilgileri Y\u00f6netme:<\/strong> Veritaban\u0131 kimlik bilgileri, API anahtarlar\u0131 gibi hassas bilgileri do\u011frudan kodunuzda saklamay\u0131n. Bunun yerine, bunlar\u0131 bulut sa\u011flay\u0131c\u0131s\u0131n\u0131n g\u00fcvenli ortam de\u011fi\u015fkeni veya s\u0131r y\u00f6netimi hizmetlerini (AWS Secrets Manager, Azure Key Vault) kullanarak y\u00f6netin.<br \/>\n*   <strong>VPC Konfig\u00fcrasyonu:<\/strong> Fonksiyonunuzun \u00f6zel a\u011f kaynaklar\u0131na (\u00f6rn. bir VPC i\u00e7indeki veritabanlar\u0131) eri\u015fmesi gerekiyorsa, fonksiyonunuzu ayn\u0131 VPC i\u00e7inde yap\u0131land\u0131r\u0131n.<\/p>\n<h3>Veritaban\u0131 Ba\u011flant\u0131lar\u0131 ve Havuzlama<\/h3>\n<p>Sunucusuz fonksiyonlar genellikle k\u0131sa \u00f6m\u00fcrl\u00fc oldu\u011fu i\u00e7in, her \u00e7a\u011fr\u0131da yeni bir veritaban\u0131 ba\u011flant\u0131s\u0131 a\u00e7mak maliyetli ve yava\u015f olabilir.<\/p>\n<p>*   <strong>Ba\u011flant\u0131 Havuzu (Connection Pooling):<\/strong> E\u011fer m\u00fcmk\u00fcnse, fonksiyonunuzun k\u00fcresel kapsamda bir veritaban\u0131 ba\u011flant\u0131 havuzu olu\u015fturmas\u0131n\u0131 sa\u011flay\u0131n. Fonksiyonun &#8220;warm start&#8221; yapmas\u0131 durumunda, bu ba\u011flant\u0131 havuzu yeniden kullan\u0131labilir.<br \/>\n*   <strong>Sunucusuz Veritabanlar\u0131:<\/strong> DynamoDB, Aurora Serverless gibi sunucusuz veritabanlar\u0131, sunucusuz fonksiyonlarla do\u011fal olarak entegre olur ve ba\u011flant\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc azalt\u0131r.<\/p>\n<h3>Test Edilebilirlik<\/h3>\n<p>Sunucusuz fonksiyonlar\u0131n test edilmesi \u00f6nemlidir:<\/p>\n<p>*   <strong>Birim Testleri:<\/strong> Fonksiyonlar\u0131n\u0131z\u0131n i\u015f mant\u0131\u011f\u0131n\u0131 k\u00fc\u00e7\u00fck, izole birimlerde test edin.<br \/>\n*   <strong>Entegrasyon Testleri:<\/strong> Fonksiyonlar\u0131n\u0131z\u0131n di\u011fer bulut hizmetleriyle (veritabanlar\u0131, mesaj kuyruklar\u0131) do\u011fru \u015fekilde entegre olup olmad\u0131\u011f\u0131n\u0131 test edin.<br \/>\n*   <strong>U\u00e7tan Uca (End-to-End) Testler:<\/strong> API Gateway \u00fczerinden t\u00fcm ak\u0131\u015f\u0131 test ederek, uygulaman\u0131z\u0131n beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>Yerel Em\u00fclasyon:<\/strong> AWS SAM CLI gibi ara\u00e7lar, Lambda fonksiyonlar\u0131n\u0131 ve API Gateway&#8217;i yerel olarak em\u00fcle etmenizi sa\u011flayarak h\u0131zl\u0131 geli\u015ftirme ve hata ay\u0131klama imkan\u0131 sunar.<\/p>\n<h3>Cold Start Optimizasyonu<\/h3>\n<p>Yukar\u0131da bahsedilen y\u00f6ntemlere ek olarak, cold start&#8217;\u0131 azaltmak i\u00e7in \u015funlar\u0131 d\u00fc\u015f\u00fcnebilirsiniz:<\/p>\n<p>*   <strong>K\u00fc\u00e7\u00fck Fonksiyonlar:<\/strong> Daha k\u00fc\u00e7\u00fck kod paketleri, daha h\u0131zl\u0131 y\u00fcklenir.<br \/>\n*   <strong>Statik \u0130\u00e7eri\u011fi Ayr\u0131 Tutma:<\/strong> Fonksiyonunuzun par\u00e7as\u0131 olmayan statik dosyalar\u0131 (resimler, CSS) ayr\u0131 bir depolama hizmetinde tutun.<br \/>\n*   <strong>Dil Se\u00e7imi:<\/strong> D\u00fc\u015f\u00fck cold start s\u00fcreleri i\u00e7in optimize edilmi\u015f dilleri (Node.js, Python, Go) tercih edin.<\/p>\n<p>Bu en iyi uygulamalar, sunucusuz mimarinin sundu\u011fu esneklik ve g\u00fcc\u00fc tam olarak kullan\u0131rken, ayn\u0131 zamanda olas\u0131 tuzaklardan ka\u00e7\u0131nman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>Geli\u015fmi\u015f Sunucusuz Konular<\/h2>\n<p>Temel sunucusuz fonksiyonlar\u0131 yazmay\u0131 \u00f6\u011frendikten sonra, daha karma\u015f\u0131k ve b\u00fcy\u00fck \u00f6l\u00e7ekli sunucusuz uygulamalar olu\u015fturmak i\u00e7in baz\u0131 geli\u015fmi\u015f konular\u0131 ve ara\u00e7lar\u0131 ke\u015ffedebilirsiniz.<\/p>\n<h3>Sunucusuz \u00c7er\u00e7eveler (Serverless Frameworks)<\/h3>\n<p>Sunucusuz uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131, yap\u0131land\u0131rmas\u0131 ve y\u00f6netimi, \u00f6zellikle birden fazla fonksiyon ve hizmetten olu\u015fan karma\u015f\u0131k sistemlerde zorlay\u0131c\u0131 olabilir. Sunucusuz \u00e7er\u00e7eveler, bu s\u00fcreci otomatikle\u015ftirmek ve basitle\u015ftirmek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<p>*   <strong>Serverless Framework:<\/strong> \u00c7e\u015fitli bulut sa\u011flay\u0131c\u0131lar\u0131n\u0131 (AWS, Azure, Google Cloud, Alibaba Cloud vb.) destekleyen pop\u00fcler, a\u00e7\u0131k kaynakl\u0131 bir \u00e7er\u00e7evedir. Tek bir yap\u0131land\u0131rma dosyas\u0131 (YAML) ile fonksiyonlar\u0131n\u0131z\u0131, tetikleyicilerinizi, IAM rollerinizi ve di\u011fer bulut kaynaklar\u0131n\u0131z\u0131 tan\u0131mlaman\u0131za ve da\u011f\u0131tman\u0131za olanak tan\u0131r.<br \/>\n*   <strong>AWS SAM (Serverless Application Model):<\/strong> AWS&#8217;ye \u00f6zg\u00fc bir \u00e7er\u00e7evedir. AWS CloudFormation \u00fczerine in\u015fa edilmi\u015ftir ve Lambda fonksiyonlar\u0131, API Gateway&#8217;ler, DynamoDB tablolar\u0131 gibi AWS kaynaklar\u0131n\u0131 tan\u0131mlamak i\u00e7in basitle\u015ftirilmi\u015f bir s\u00f6zdizimi sunar. Yerel test ve hata ay\u0131klama ara\u00e7lar\u0131 da i\u00e7erir.<br \/>\n*   <strong>SST (Serverless Stack):<\/strong> React tabanl\u0131 bir framework olup, daha \u00e7ok full-stack sunucusuz uygulamalar geli\u015ftirmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Canl\u0131 yeniden y\u00fckleme (live reloading) gibi \u00f6zelliklerle geli\u015ftirme deneyimini iyile\u015ftirir.<br \/>\n*   <strong>Zappa (Python i\u00e7in):<\/strong> Python web uygulamalar\u0131n\u0131 (Django, Flask) AWS Lambda ve API Gateway \u00fczerinde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015ft\u0131r.<\/p>\n<p>Bu \u00e7er\u00e7eveler, altyap\u0131y\u0131 kod olarak (Infrastructure as Code &#8211; IaC) y\u00f6netmenize olanak tan\u0131yarak tekrarlanabilir ve s\u00fcrd\u00fcr\u00fclebilir da\u011f\u0131t\u0131mlar sa\u011flar.<\/p>\n<h3>Sunucusuz Veritabanlar\u0131<\/h3>\n<p>Sunucusuz fonksiyonlar genellikle durumsuz oldu\u011fu i\u00e7in, verileri kal\u0131c\u0131 olarak depolamak i\u00e7in harici bir veritaban\u0131na ihtiya\u00e7 duyarlar. Geleneksel veritabanlar\u0131 sunucusuz fonksiyonlarla kullan\u0131labilse de, &#8220;sunucusuz&#8221; olarak tasarlanm\u0131\u015f veritabanlar\u0131 daha iyi entegrasyon ve \u00f6l\u00e7eklenebilirlik sunar:<\/p>\n<p>*   <strong>Amazon DynamoDB:<\/strong> Tamamen y\u00f6netilen, anahtar-de\u011fer ve belge veritaban\u0131d\u0131r. Sunucusuz uygulamalar i\u00e7in d\u00fc\u015f\u00fck gecikme s\u00fcresi ve y\u00fcksek \u00f6l\u00e7eklenebilirlik sunar. Kullan\u0131m ba\u015f\u0131na \u00f6deme modeli sunar.<br \/>\n*   <strong>Amazon Aurora Serverless:<\/strong> Geleneksel ili\u015fkisel veritabanlar\u0131n\u0131n (MySQL ve PostgreSQL uyumlu) avantajlar\u0131n\u0131 sunarken, kapasite y\u00f6netimi y\u00fck\u00fcn\u00fc ortadan kald\u0131r\u0131r. Otomatik olarak \u00f6l\u00e7eklenir ve yaln\u0131zca kullan\u0131ld\u0131\u011f\u0131nda \u00f6deme yap\u0131l\u0131r.<br \/>\n*   <strong>Azure Cosmos DB:<\/strong> Microsoft Azure&#8217;\u0131n k\u00fcresel olarak da\u011f\u0131t\u0131lm\u0131\u015f, \u00e7ok modelli veritaban\u0131 hizmetidir. Sunucusuz fonksiyonlarla sorunsuz entegre olur.<br \/>\n*   <strong>Google Cloud Firestore:<\/strong> Google Cloud&#8217;un esnek, \u00f6l\u00e7eklenebilir ve sunucusuz belge veritaban\u0131d\u0131r.<\/p>\n<p>Bu veritabanlar\u0131, sunucusuz fonksiyonlar\u0131n \u00f6l\u00e7eklenme ve maliyet avantajlar\u0131n\u0131 tamamlayarak eksiksiz bir sunucusuz y\u0131\u011f\u0131n olu\u015fturman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h3>Orkestrasyon ve \u0130\u015f Ak\u0131\u015flar\u0131<\/h3>\n<p>Tek bir fonksiyonun \u00f6tesine ge\u00e7en, birden fazla ad\u0131m\u0131 i\u00e7eren karma\u015f\u0131k i\u015f s\u00fcre\u00e7leri i\u00e7in, sunucusuz orkestrasyon hizmetleri devreye girer:<\/p>\n<p>*   <strong>AWS Step Functions:<\/strong> Bir dizi Lambda fonksiyonunu, konteyner g\u00f6revlerini veya di\u011fer bulut hizmetlerini birle\u015ftiren durum makineleri (state machines) olu\u015fturman\u0131za olanak tan\u0131r. Hata i\u015fleme, yeniden denemeler, paralel y\u00fcr\u00fctme ve uzun s\u00fcreli i\u015f ak\u0131\u015flar\u0131 i\u00e7in idealdir. G\u00f6rsel bir aray\u00fczle i\u015f ak\u0131\u015flar\u0131n\u0131z\u0131 tasarlayabilir ve izleyebilirsiniz.<br \/>\n*   <strong>Azure Durable Functions:<\/strong> Azure Functions&#8217;\u0131n bir uzant\u0131s\u0131d\u0131r. Uzun s\u00fcreli, durum bilgisi olan i\u015f ak\u0131\u015flar\u0131 (orkestrat\u00f6r fonksiyonlar) olu\u015fturman\u0131za olanak tan\u0131r. Zincirleme, fan-out\/fan-in ve insan etkile\u015fimi gibi desenleri destekler.<br \/>\n*   <strong>Google Cloud Workflows:<\/strong> Bir dizi bulut hizmetini birle\u015ftiren i\u015f ak\u0131\u015flar\u0131 olu\u015fturmak i\u00e7in y\u00f6netilen bir hizmettir.<\/p>\n<p>Bu hizmetler, mikro hizmetlerinizi ve sunucusuz fonksiyonlar\u0131n\u0131z\u0131 bir araya getirerek daha b\u00fcy\u00fck ve daha karma\u015f\u0131k i\u015f uygulamalar\u0131 olu\u015fturman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>CI\/CD Entegrasyonu<\/h3>\n<p>Sunucusuz uygulamalar i\u00e7in s\u00fcrekli entegrasyon ve s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) hatt\u0131 kurmak, h\u0131zl\u0131 ve g\u00fcvenilir da\u011f\u0131t\u0131mlar i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>*   <strong>Otomatik Testler:<\/strong> Her kod de\u011fi\u015fikli\u011finde birim, entegrasyon ve u\u00e7tan uca testleri otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131n.<br \/>\n*   <strong>Otomatik Da\u011f\u0131t\u0131m:<\/strong> Testlerden ge\u00e7en kodun otomatik olarak geli\u015ftirme, test veya \u00fcretim ortamlar\u0131na da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flay\u0131n.<br \/>\n*   <strong>Versiyonlama:<\/strong> Fonksiyonlar\u0131n\u0131z\u0131n farkl\u0131 versiyonlar\u0131n\u0131 y\u00f6netin ve gerekirse \u00f6nceki versiyonlara kolayca geri d\u00f6nebilme yetene\u011fine sahip olun.<br \/>\n*   <strong>Bulut Sa\u011flay\u0131c\u0131s\u0131 CI\/CD Hizmetleri:<\/strong> AWS CodePipeline\/CodeBuild, Azure DevOps, Google Cloud Build gibi hizmetler, sunucusuz uygulamalar i\u00e7in CI\/CD hatlar\u0131 olu\u015fturmak i\u00e7in kullan\u0131labilir.<br \/>\n*   <strong>\u00dc\u00e7\u00fcnc\u00fc Taraf CI\/CD Ara\u00e7lar\u0131:<\/strong> Jenkins, GitLab CI\/CD, GitHub Actions gibi pop\u00fcler ara\u00e7lar da sunucusuz da\u011f\u0131t\u0131mlarla entegre edilebilir.<\/p>\n<p>CI\/CD, sunucusuz geli\u015ftirmenin \u00e7evik do\u011fas\u0131n\u0131 destekler ve yeni \u00f6zelliklerin h\u0131zla kullan\u0131ma sunulmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu geli\u015fmi\u015f konular, sunucusuz mimarinin sundu\u011fu potansiyeli tam olarak kullanman\u0131za ve karma\u015f\u0131k, \u00f6l\u00e7eklenebilir ve g\u00fcvenilir uygulamalar olu\u015fturman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h2>Sunucusuz Fonksiyonlar\u0131n S\u0131n\u0131rlamalar\u0131 ve Zorluklar\u0131<\/h2>\n<p>Sunucusuz fonksiyonlar bir\u00e7ok avantaj sunsa da, her teknoloji gibi kendine \u00f6zg\u00fc s\u0131n\u0131rlamalara ve zorluklara sahiptir. Bu zorluklar\u0131 anlamak, sunucusuz mimariyi ne zaman ve nas\u0131l kullanaca\u011f\u0131n\u0131za dair bilin\u00e7li kararlar vermenizi sa\u011flar.<\/p>\n<h3>Cold Start Latency<\/h3>\n<p>Daha \u00f6nce de bahsedildi\u011fi gibi, cold start gecikmeleri, \u00f6zellikle d\u00fc\u015f\u00fck gecikme s\u00fcresi gerektiren veya s\u0131k s\u0131k \u00e7a\u011fr\u0131lmayan fonksiyonlar i\u00e7in \u00f6nemli bir sorun olabilir. Fonksiyonun \u00e7al\u0131\u015fma ortam\u0131n\u0131n ba\u015flat\u0131lmas\u0131, kodun y\u00fcklenmesi ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n \u00e7\u00f6z\u00fclmesi zaman al\u0131r. Bu, kullan\u0131c\u0131 deneyimini olumsuz etkileyebilir. \u00c7\u00f6z\u00fcmler (Provisioned Concurrency gibi) genellikle ek maliyet getirir.<\/p>\n<h3>Vendor Lock-in (Sa\u011flay\u0131c\u0131ya Ba\u011f\u0131ml\u0131l\u0131k)<\/h3>\n<p>Her bulut sa\u011flay\u0131c\u0131s\u0131n\u0131n kendi sunucusuz hizmetleri, API&#8217;leri ve entegrasyonlar\u0131 vard\u0131r. Bir sa\u011flay\u0131c\u0131n\u0131n ekosistemine derinlemesine entegre olmak, ba\u015fka bir sa\u011flay\u0131c\u0131ya ge\u00e7i\u015f yapmay\u0131 veya \u00e7oklu bulut stratejisi izlemeyi zorla\u015ft\u0131rabilir. Fonksiyon kodunuz ta\u015f\u0131nabilir olsa da, tetikleyiciler, veritabanlar\u0131, kimlik ve eri\u015fim y\u00f6netimi (IAM) gibi \u00e7evre hizmetleri sa\u011flay\u0131c\u0131ya \u00f6zg\u00fc olabilir.<\/p>\n<h3>Debugging ve \u0130zleme Karma\u015f\u0131kl\u0131\u011f\u0131<\/h3>\n<p>Da\u011f\u0131t\u0131k bir mimaride, bir hatan\u0131n kayna\u011f\u0131n\u0131 bulmak ve izlemek geleneksel monolitik uygulamalara g\u00f6re daha karma\u015f\u0131k olabilir. Birden fazla fonksiyonun ve hizmetin bir araya geldi\u011fi bir i\u015flem ak\u0131\u015f\u0131nda, hatan\u0131n nerede meydana geldi\u011fini belirlemek zorla\u015f\u0131r.<\/p>\n<p>*   <strong>Da\u011f\u0131t\u0131k \u0130zleme:<\/strong> \u0130steklerin birden fazla fonksiyon ve hizmet aras\u0131nda nas\u0131l hareket etti\u011fini izlemek i\u00e7in da\u011f\u0131t\u0131k izleme ara\u00e7lar\u0131na (\u00f6rn. AWS X-Ray, Azure Application Insights) ihtiya\u00e7 duyulur.<br \/>\n*   <strong>Log Y\u00f6netimi:<\/strong> \u00c7ok say\u0131da fonksiyonun \u00fcretti\u011fi g\u00fcnl\u00fckleri merkezi bir yerde toplamak ve analiz etmek i\u00e7in geli\u015fmi\u015f log y\u00f6netimi \u00e7\u00f6z\u00fcmleri (\u00f6rn. CloudWatch Logs Insights, ELK Stack) gerekebilir.<\/p>\n<h3>Kaynak S\u0131n\u0131rlar\u0131<\/h3>\n<p>Sunucusuz fonksiyonlar, bulut sa\u011flay\u0131c\u0131s\u0131 taraf\u0131ndan belirlenen belirli kaynak s\u0131n\u0131rlar\u0131na tabidir:<\/p>\n<p>*   <strong>Bellek:<\/strong> Fonksiyonlara tahsis edilebilecek maksimum bellek miktar\u0131 vard\u0131r (\u00f6rn. AWS Lambda&#8217;da 128MB&#8217;dan 10240MB&#8217;a kadar).<br \/>\n*   <strong>Y\u00fcr\u00fctme S\u00fcresi:<\/strong> Bir fonksiyonun \u00e7al\u0131\u015fmas\u0131na izin verilen maksimum s\u00fcre vard\u0131r (\u00f6rn. AWS Lambda&#8217;da 15 dakika). Uzun s\u00fcreli, karma\u015f\u0131k i\u015flemler i\u00e7in uygun de\u011fildir.<br \/>\n*   <strong>Disk Alan\u0131:<\/strong> Fonksiyonun ge\u00e7ici olarak kullanabilece\u011fi disk alan\u0131 s\u0131n\u0131rl\u0131d\u0131r.<br \/>\n*   <strong>E\u015fzamanl\u0131l\u0131k:<\/strong> Varsay\u0131lan olarak belirli bir b\u00f6lgedeki toplam e\u015fzamanl\u0131 fonksiyon \u00e7a\u011fr\u0131s\u0131 say\u0131s\u0131 limitlidir.<\/p>\n<p>Bu s\u0131n\u0131rlar, baz\u0131 i\u015f y\u00fcklerinin sunucusuz mimariye uygun olmayabilece\u011fi anlam\u0131na gelir.<\/p>\n<h3>Maliyet Y\u00f6netimi<\/h3>\n<p>Sunucusuz modelde &#8220;kulland\u0131\u011f\u0131n kadar \u00f6de&#8221; prensibi ge\u00e7erli olsa da, maliyetleri do\u011fru tahmin etmek ve y\u00f6netmek bazen zorlay\u0131c\u0131 olabilir. \u00d6zellikle y\u00fcksek trafikli uygulamalarda veya hatal\u0131 yap\u0131land\u0131r\u0131lm\u0131\u015f fonksiyonlarda beklenmedik maliyet art\u0131\u015flar\u0131 ya\u015fanabilir. Her bir k\u00fc\u00e7\u00fck \u00e7a\u011fr\u0131n\u0131n maliyeti d\u00fc\u015f\u00fck olsa da, milyonlarca \u00e7a\u011fr\u0131 h\u0131zla birikebilir. \u0130yi bir izleme ve b\u00fct\u00e7e y\u00f6netimi stratejisi gereklidir.<\/p>\n<h3>Yerel Geli\u015ftirme ve Test<\/h3>\n<p>Sunucusuz fonksiyonlar\u0131n bulut ortam\u0131nda \u00e7al\u0131\u015fmak \u00fczere tasarlanmas\u0131, yerel geli\u015ftirme ve test s\u00fcre\u00e7lerini zorla\u015ft\u0131rabilir. T\u00fcm bulut hizmetlerini yerel olarak taklit etmek veya em\u00fcle etmek her zaman m\u00fcmk\u00fcn veya pratik de\u011fildir. Bu durum, geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fc uzatabilir ve hata ay\u0131klamay\u0131 karma\u015f\u0131kla\u015ft\u0131rabilir. AWS SAM CLI gibi ara\u00e7lar bu konuda yard\u0131mc\u0131 olsa da, tam bir bulut ortam\u0131n\u0131 taklit etmek zordur.<\/p>\n<h3>Karma\u015f\u0131k A\u011f Yap\u0131land\u0131rmalar\u0131<\/h3>\n<p>Fonksiyonunuzun \u00f6zel bir a\u011fdaki (Virtual Private Cloud &#8211; VPC) veritabanlar\u0131na veya di\u011fer kaynaklara eri\u015fmesi gerekti\u011finde, a\u011f yap\u0131land\u0131rmalar\u0131 karma\u015f\u0131kla\u015fabilir. Fonksiyonun VPC i\u00e7ine yerle\u015ftirilmesi, cold start s\u00fcrelerini art\u0131rabilir ve \u00f6zel a\u011f kurallar\u0131 gerektirebilir.<\/p>\n<p>Bu zorluklara ra\u011fmen, do\u011fru tasar\u0131m, ara\u00e7 se\u00e7imi ve en iyi uygulamalarla sunucusuz fonksiyonlar, bir\u00e7ok uygulama senaryosu i\u00e7in son derece g\u00fc\u00e7l\u00fc ve verimli bir \u00e7\u00f6z\u00fcm sunmaya devam etmektedir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Sunucusuz fonksiyonlar, modern uygulama geli\u015ftirme paradigmalar\u0131n\u0131 k\u00f6kten de\u011fi\u015ftiren g\u00fc\u00e7l\u00fc bir teknolojidir. Geli\u015ftiricilere, altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc bulut sa\u011flay\u0131c\u0131s\u0131na devrederek tamamen i\u015f mant\u0131\u011f\u0131na odaklanma \u00f6zg\u00fcrl\u00fc\u011f\u00fc sunar. Bu makalede, sunucusuz mimarinin temel kavramlar\u0131ndan, FaaS modelinin i\u015fleyi\u015fine, cold start\/warm start farkl\u0131l\u0131klar\u0131ndan \u00e7e\u015fitli tetikleyici t\u00fcrlerine kadar geni\u015f bir yelpazeyi ele ald\u0131k.<\/p>\n<p>Pratik bir AWS Lambda \u00f6rne\u011fi \u00fczerinden, Node.js kullanarak basit bir API fonksiyonunun nas\u0131l yaz\u0131laca\u011f\u0131n\u0131, ba\u011f\u0131ml\u0131l\u0131klar\u0131n nas\u0131l y\u00f6netilece\u011fini, buluta nas\u0131l da\u011f\u0131t\u0131laca\u011f\u0131n\u0131 ve bir API Gateway ile nas\u0131l entegre edilece\u011fini ad\u0131m ad\u0131m g\u00f6sterdik. Bu \u00f6rnek, sunucusuz fonksiyonlar\u0131n ger\u00e7ek d\u00fcnyada nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131na dair somut bir anlay\u0131\u015f sa\u011flam\u0131\u015ft\u0131r.<\/p>\n<p>Ayr\u0131ca, sunucusuz fonksiyonlar\u0131 tasarlarken ve geli\u015ftirirken izlenmesi gereken en iyi uygulamalar\u0131 derinlemesine inceledik. Tek sorumluluk prensibi, durumsuzluk, h\u0131zl\u0131 ba\u015flang\u0131\u00e7 s\u00fcreleri i\u00e7in optimizasyon, sa\u011flam hata y\u00f6netimi, g\u00fcvenlik ve veritaban\u0131 ba\u011flant\u0131 stratejileri gibi konular, \u00f6l\u00e7eklenebilir, g\u00fcvenilir ve maliyet etkin sunucusuz uygulamalar olu\u015fturman\u0131n anahtar\u0131d\u0131r. Geli\u015fmi\u015f sunucusuz \u00e7er\u00e7eveler, sunucusuz veritabanlar\u0131, orkestrasyon ara\u00e7lar\u0131 ve CI\/CD entegrasyonu gibi konulara de\u011finerek, daha karma\u015f\u0131k ve kurumsal d\u00fczeydeki sunucusuz \u00e7\u00f6z\u00fcmler i\u00e7in ufuk a\u00e7t\u0131k.<\/p>\n<p>Elbette, her teknolojide oldu\u011fu gibi sunucusuz fonksiyonlar\u0131n da cold start gecikmeleri, sa\u011flay\u0131c\u0131ya ba\u011f\u0131ml\u0131l\u0131k, hata ay\u0131klama zorluklar\u0131 ve kaynak s\u0131n\u0131rlar\u0131 gibi kendi zorluklar\u0131 vard\u0131r. Ancak bu zorluklar, bilin\u00e7li bir tasar\u0131m ve do\u011fru ara\u00e7 se\u00e7imi ile y\u00f6netilebilir.<\/p>\n<p>Sunucusuz mimari, \u00f6zellikle olay tabanl\u0131 sistemler, mikro hizmetler, API backend&#8217;leri, veri i\u015fleme boru hatlar\u0131 ve otomasyon g\u00f6revleri i\u00e7in m\u00fckemmel bir uyum sa\u011flar. Geli\u015ftiricilerin daha h\u0131zl\u0131 inovasyon yapmas\u0131na, maliyetleri d\u00fc\u015f\u00fcrmesine ve uygulamalar\u0131n\u0131 otomatik olarak \u00f6l\u00e7eklendirmesine olanak tan\u0131r. Gelecekte, sunucusuz teknolojilerin daha da olgunla\u015fmas\u0131, yeni kullan\u0131m senaryolar\u0131n\u0131n ortaya \u00e7\u0131kmas\u0131 ve mevcut s\u0131n\u0131rlamalar\u0131n hafifletilmesi beklenmektedir.<\/p>\n<p>Bu rehberin, sunucusuz fonksiyonlar d\u00fcnyas\u0131na ilk ad\u0131m\u0131n\u0131z\u0131 atman\u0131zda veya mevcut bilginizi peki\u015ftirmenizde size yard\u0131mc\u0131 olmas\u0131n\u0131 umuyoruz. Sunucusuz geli\u015ftirmenin heyecan verici d\u00fcnyas\u0131na ho\u015f geldiniz!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilm","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-37483","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilm\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-06T08:41:42+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-01-06T08:41:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/\"},\"wordCount\":5492,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/\",\"name\":\"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-06T08:41:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber","og_description":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilm","og_url":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-06T08:41:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber","datePublished":"2026-01-06T08:41:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/"},"wordCount":5492,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/","name":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-06T08:41:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-fonksiyon-nasil-yazilir-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Sunucusuz Fonksiyon Nas\u0131l Yaz\u0131l\u0131r: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37483","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37483"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37483\/revisions"}],"predecessor-version":[{"id":37484,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37483\/revisions\/37484"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}