{"id":1459,"date":"2018-04-26T21:11:07","date_gmt":"2018-04-26T18:11:07","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=1459"},"modified":"2018-04-26T21:15:26","modified_gmt":"2018-04-26T18:15:26","slug":"asp-net-core-series-04-building-serverless-api-backend-on-kubernetes","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/","title":{"rendered":"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama"},"content":{"rendered":"<p>Cloud-based sistemlerin \u00e7o\u011falmas\u0131 ile birlikte, son d\u00f6nemlerde kendisinden olduk\u00e7a fazla s\u00f6z ettiren bir kavram a\u00e7\u0131kcas\u0131\u00a0<em>serverless<\/em>. Bir \u015feylerin h\u0131zla geli\u015fti\u011fi bu g\u00fcn\u00fcm\u00fcz \u00e7a\u011f\u0131nda, time to market&#8217;e daha da \u00f6nem verilmesiyle beraber, bazen tek ihtiyac\u0131m\u0131z olan \u015fey sadece bir <strong>function<\/strong> olabiliyor. Durum b\u00f6yle olunca, bu makale kapsam\u0131nda ise ara\u015ft\u0131rmalar\u0131m ve deneyimlerim do\u011frultusunda\u00a0serverless(<em>Function-as-a-Service<\/em>) kavram\u0131ndan biraz bahsedip, daha sonra bir serverless framework&#8217;\u00fc olan <em>Fission<\/em> ile\u00a0<em>Kubernetes<\/em>\u00a0\u00fczerinde \u00f6rnek\u00a0bir serverless\u00a0<em>API<\/em> backend&#8217;i geli\u015ftirece\u011fiz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2193 lazyload\" data-src=\"\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg\" alt=\"\" width=\"1024\" height=\"405\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg 1024w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture-300x119.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture-768x304.jpg 768w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/405;\" \/><\/a><\/p>\n<h4>Serverless Architecture Giri\u015f<\/h4>\n<p>\u00d6zellikle <strong>scalability<\/strong> kavram\u0131n\u0131n \u00f6nemli oldu\u011fu durumlarda, sunucu configuration&#8217;lar\u0131, management i\u015flemleri ve hatta hata y\u00f6netimi gibi konulara tak\u0131lmadan uygulamalar\u0131m\u0131z\u0131 yada tek bir function&#8217;\u0131 \u00e7al\u0131\u015ft\u0131rabilmeye dayanan bir mimaridir asl\u0131nda. Serverless demek, k\u0131saca her \u015feyin birer servis olarak kullan\u0131lmas\u0131 demektir diyebiliriz san\u0131r\u0131m. Bir ba\u015fka de\u011fi\u015fle serverless computing paradigmas\u0131 long-running virtual machine&#8217;lerin aksine, istek \u00fczerine a\u00e7\u0131lan(event-driven) ge\u00e7ici <strong>short-running<\/strong> hesaplama\u00a0birimlerinin, iste\u011fi tamamlamas\u0131 ve ard\u0131ndan kapanmas\u0131 mant\u0131\u011f\u0131na dayan\u0131r.<\/p>\n<p>\u00d6rne\u011fin kullan\u0131c\u0131lar\u0131n be\u011fendikleri \u00fcr\u00fcnleri favori listelerine ekleyebilme \u00f6zelli\u011fi, e-ticaret web sitelerinin vazge\u00e7ilmez \u00f6zelliklerinden birisidir san\u0131r\u0131m. Bu \u00f6zellik genelde ekleme, \u00e7\u0131kartma ve listeleme function&#8217;lar\u0131na sahip oluyor. Bu \u00fc\u00e7 function&#8217;\u0131n birer event sonucu tetiklenen ayr\u0131 birer function oldu\u011funu d\u00fc\u015f\u00fcnebiliriz.<\/p>\n<p>Bir developer olarak, bir backend server&#8217;\u0131n\u0131 maintain etme derdi olmadan, geli\u015ftirdi\u011fimiz kodu serverless\u00a0mimarisi ile on demand olarak deploy edebilmek ve \u00e7al\u0131\u015ft\u0131rabilmek, kula\u011fa ho\u015f geliyor de\u011fil mi?\u00a0 Bununla birlikte e\u011fer bir public cloud kullan\u0131c\u0131s\u0131 iseniz en g\u00fczel taraf\u0131 ise, ger\u00e7ekten <strong>kulland\u0131\u011f\u0131n\u0131z kadar \u00fccretlendiriliyor<\/strong> olman\u0131zd\u0131r.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/03\/breaking-bad.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-2207 lazyload\" data-src=\"\/wp-content\/uploads\/2018\/03\/breaking-bad.jpg\" alt=\"\" width=\"1062\" height=\"580\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/breaking-bad.jpg 1543w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/breaking-bad-300x164.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/breaking-bad-768x420.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/breaking-bad-1024x559.jpg 1024w\" data-sizes=\"(max-width: 1062px) 100vw, 1062px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1062px; --smush-placeholder-aspect-ratio: 1062\/580;\" \/><\/a><\/p>\n<p>Tabi bunun yap\u0131s\u0131n\u0131 da iyi tasarlamak gerekir.<\/p>\n<p>Serverless mimarisini kullanabilmemiz i\u00e7in <em>Azure Functions<\/em>,\u00a0<em>Amazon Lambda<\/em> ve <em>Google Cloud Functions<\/em>\u00a0bizlere gerekli altyap\u0131lar\u0131 sunmaktad\u0131r. Ben bu makale kapsam\u0131nda ise bu \u00fc\u00e7 b\u00fcy\u00fck provider&#8217;dan ziyade serverless mimarisini,\u00a0<em>kubernetes<\/em> \u00fczerinde bir\u00a0serverless framework&#8217;\u00fc olan\u00a0<em>fission <\/em>ile\u00a0nas\u0131l kullanabiliriz konusu \u00fczerinde durmaya \u00e7al\u0131\u015faca\u011f\u0131m.\u00a0Ayr\u0131ca <em>ASP.NET Core<\/em> ile nas\u0131l bir serverless backend <em>API<\/em>&#8216;\u0131 geli\u015ftirebiliriz konusuna da de\u011finiyor olaca\u011f\u0131z.<\/p>\n<p>\u0130lk olarak\u00a0serverless mimarisi \u00f6zelinde dikkat etmemiz gereken bir ka\u00e7 noktaya de\u011finmek istiyorum.<\/p>\n<h4>Nelere Dikkat Etmeliyiz?<\/h4>\n<ul>\n<li>Function&#8217;lar\u0131n &#8220;<em>idempotent<\/em>&#8221; olmas\u0131na dikkat edilmesi gerekmektedir. Yani ilgili provider, olu\u015fan bir event sonucu, ilgili function&#8217;\u0131 birden fazla kez \u00e7al\u0131\u015ft\u0131rmaya \u00e7al\u0131\u015fabilir. Bu konu hakk\u0131nda \u00e7ok fazla detaya girmeyece\u011fim. Bununla ilgili\u00a0<em><a href=\"https:\/\/lostechies.com\/jimmybogard\/2013\/06\/03\/un-reliability-in-messaging-idempotency-and-de-duplication\/\" target=\"_blank\" rel=\"noopener\">burada<\/a><\/em> g\u00fczel bir yaz\u0131 var.<\/li>\n<li>Long-running i\u015fler, bir ba\u015fka dikkate almam\u0131z gereken bir noktad\u0131r. \u00d6rne\u011fin <em>Amazon Lambda<\/em>, execution i\u00e7in maximum 5 dakika sa\u011flamaktad\u0131r.<\/li>\n<li>Response time&#8217;\u0131n \u00f6nemli oldu\u011fu i\u015fler. Warm-up durumlar\u0131 sebebiyle latency&#8217;ler ya\u015fanabilmektedir. Tecr\u00fcbelerim bu y\u00f6nde oldu. (Bu gibi durumlar i\u00e7in geli\u015ftirilmi\u015f serverless warmup plugin&#8217;leri mevcut, ama deneyimlemedim)<\/li>\n<li>En \u00f6nemli konulardan biriside provider ba\u011f\u0131ml\u0131l\u0131\u011f\u0131. E\u011fer d\u00fczg\u00fcn bir abstraction ger\u00e7ekle\u015ftirmedi isek, bir ba\u015fka provider&#8217;a ge\u00e7mek \u00e7ok da kolay olmayacakt\u0131r. Bunlar\u0131n hepsi ise bizlere &#8220;ekstra efor&#8221; olarak yans\u0131yacakt\u0131r.<\/li>\n<\/ul>\n<h4>Open-Source Serverless Framework&#8217;leri<\/h4>\n<p><a href=\"\/wp-content\/uploads\/2018\/03\/open-source.jpg\"><img decoding=\"async\" class=\"aligncenter wp-image-2218 lazyload\" data-src=\"\/wp-content\/uploads\/2018\/03\/open-source.jpg\" alt=\"\" width=\"779\" height=\"437\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/open-source.jpg 870w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/open-source-300x168.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/open-source-768x431.jpg 768w\" data-sizes=\"(max-width: 779px) 100vw, 779px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 779px; --smush-placeholder-aspect-ratio: 779\/437;\" \/><\/a><\/p>\n<p>Serverless kavram\u0131ndan biraz bahsettik. \u0130nternet \u00fczerinde hali haz\u0131rda bir \u00e7ok harika makale mevcut oldu\u011fu i\u00e7in bu konu hakk\u0131nda daha fazla detaya girmek istemedim.<\/p>\n<p>Peki, serverless mimarisini kullanabilmemiz i\u00e7in\u00a0<em>Azure<\/em>, <em>Amazon<\/em> ve <em>Google<\/em> gibi dev provider&#8217;lar\u0131n bizlere gerekli altyap\u0131lar\u0131 sa\u011flad\u0131klar\u0131na de\u011findik. Ayr\u0131ca bu makale kapsam\u0131nda ise <em>kubernetes<\/em> \u00fczerinde bir serverless framework&#8217;\u00fc olan <em>fission<\/em> ile bir backend <em>API<\/em>&#8216;\u0131 geli\u015ftirece\u011fimizden de bahsettik.<\/p>\n<p>\u015eimdi <em>Azure Functions<\/em>,\u00a0<em>Amazon Lambda<\/em> ve <em>Google Cloud Functions&#8217;<\/em>a alternatif olan open-source serverless framework&#8217;lerinden biraz bahsetmek istiyorum.<\/p>\n<p>Open-source d\u00fcnyas\u0131nda <em>Fission<\/em>, <em>OpenWhisk <\/em>ve <em>Kubeless\u00a0<\/em>gibi harika alternatif framework&#8217;ler mevcut durumda. Bu framework&#8217;lerin en g\u00fczel taraf\u0131 ise, cloud provider agnostik olmalar\u0131d\u0131r san\u0131r\u0131m. \u00d6rne\u011fin <em>fission<\/em> ve <em>kubeless<\/em>, <em>kubernetes<\/em>&#8216;in \u00e7al\u0131\u015fabildi\u011fi her yerde \u00e7al\u0131\u015fabilmektedir. Public cloud, private cloud veya kendi laptop&#8217;\u0131n\u0131zda farketmez, istedi\u011finiz yerde \u00e7al\u0131\u015ft\u0131rabilirsiniz. Commercial provider&#8217;lara g\u00f6re open-source serverless framework&#8217;leri, do\u011fas\u0131 gere\u011fi bizlere daha geni\u015f bir 3th party integration alan\u0131 ve \u00f6zg\u00fcrl\u00fck de sunmaktad\u0131r.<\/p>\n<p>Open-source mu, yoksa commercial m\u0131 se\u00e7ene\u011fi tamamen size kalm\u0131\u015f durumda. Serverless mimarisinin,\u00a0firmalara cazip gelen as\u0131l taraf\u0131 herhangi bir ekstra efor ve infrastructure ile u\u011fra\u015fmadan zaman&#8217;dan ve paradan tasarruf etmek olunca, elbette burada da se\u00e7im i\u00e7in bir tradeoff s\u00f6z konusu oluyor.<\/p>\n<h4>Fission &#8211; Serverless Framework<\/h4>\n<p><a href=\"\/wp-content\/uploads\/2018\/03\/fission-logo-e1521404899499.png\"><img decoding=\"async\" class=\"aligncenter wp-image-2200 lazyload\" data-src=\"\/wp-content\/uploads\/2018\/03\/fission-logo-e1521404899499.png\" alt=\"\" width=\"1057\" height=\"322\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-logo-e1521404899499.png 1573w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-logo-e1521404899499-300x91.png 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-logo-e1521404899499-768x234.png 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-logo-e1521404899499-1024x312.png 1024w\" data-sizes=\"(max-width: 1057px) 100vw, 1057px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1057px; --smush-placeholder-aspect-ratio: 1057\/322;\" \/><\/a><\/p>\n<p><em>Fission<\/em>\u00a0open-source bir serverless framework&#8217;\u00fc olup, high-level olarak\u00a0<em>kubernetes<\/em> i\u00e7in bir abstraction layer sa\u011flamaktad\u0131r. Yukar\u0131daki b\u00f6l\u00fcmde de bahsetti\u011fim gibi <em>fission<\/em>&#8216;\u0131n en g\u00fczel taraf\u0131 ise, <em>kubernetes<\/em>&#8216;in \u00e7al\u0131\u015fabildi\u011fi her yerde \u00e7al\u0131\u015fabilmesidir. <em>Fission<\/em>\u00a0&#8220;Python&#8221;, &#8220;Go&#8221;, &#8220;.NET&#8221;, &#8220;.NET 2.0&#8221;, &#8220;NodeJS&#8221;, &#8220;Perl&#8221; ve &#8220;Ruby&#8221; gibi geni\u015f bir\u00a0environment&#8217;a sahiptir.<\/p>\n<p><em>Fission<\/em> function&#8217;lar\u0131n startup time&#8217;\u0131n\u0131 h\u0131zland\u0131rabilmek i\u00e7in, built-in bir pre warm up mekanizmas\u0131na sahiptir. Bunun i\u00e7in k\u00fc\u00e7\u00fck dynamic loader&#8217;lar\u0131n bulunudu\u011fu &#8220;warm&#8221; container&#8217;lar\u0131 maintain etmektedir. Cold-started an\u0131nda ise &#8220;warm&#8221; container&#8217;lardan birisi se\u00e7ilir ve function load edilir. Bu sayede cold-start latency&#8217;leri ortalama &#8220;100msec&#8221; civar\u0131ndad\u0131r. Bununla ilgili detayl\u0131 bilgiye ise, <em><a href=\"https:\/\/docs.fission.io\/0.6.0\/concepts\/executor\/\" target=\"_blank\" rel=\"noopener\">buradan<\/a><\/em> ula\u015fabilirsiniz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/03\/fission-vs-containers-diagram.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2237 lazyload\" data-src=\"\/wp-content\/uploads\/2018\/03\/fission-vs-containers-diagram.png\" alt=\"\" width=\"800\" height=\"528\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-vs-containers-diagram.png 800w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-vs-containers-diagram-300x198.png 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-vs-containers-diagram-768x507.png 768w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/528;\" \/><\/a><\/p>\n<p><em>Fission<\/em>&#8216;\u0131 kullanmaya ba\u015flamadan, genel olarak bir konseptine g\u00f6z atal\u0131m.<\/p>\n<ul>\n<li><strong>Environment<\/strong>: Webserver, dynamic loader ve bir function&#8217;\u0131n runtime spesifik par\u00e7alar\u0131n\u0131 i\u00e7eren bir container&#8217;d\u0131r. Bir function olu\u015fturmadan \u00f6nce, bir environment olu\u015fturmam\u0131z gerekmektedir.<\/li>\n<li><strong>Function<\/strong>: Execute olacak olan kod par\u00e7am\u0131z.<\/li>\n<li><strong>Trigger<\/strong>: Function&#8217;lar\u0131 invoke eden bir event. &#8220;<em>HTTP<\/em>&#8220;, &#8220;<em>Time<\/em>&#8221; ve &#8220;<em>MQ<\/em>&#8221; olmak \u00fczere \u00fc\u00e7 adet trigger bulunmaktad\u0131r. Biz \u00f6rne\u011fimizde &#8220;<em>HTTP<\/em>&#8221; trigger&#8217;\u0131n\u0131 kullanaca\u011f\u0131z.<\/li>\n<\/ul>\n<p>Bu \u00f6n bilgilerin ard\u0131ndan, art\u0131k uygulamaya ge\u00e7ebiliriz.<\/p>\n<h4>Fission&#8217;\u0131 Kullanmak<\/h4>\n<p><em>Fission<\/em>&#8216;\u0131 kullanabilmemiz i\u00e7in \u00f6ncelikle bir <em>kubernetes<\/em> cluster&#8217;\u0131na ihtiyac\u0131m\u0131z var. Bunun i\u00e7in <em>Minikube&#8217;u<\/em>\u00a0veya\u00a0<em>Docker<\/em>&#8216;\u0131n edge channel&#8217;\u0131n\u0131 kullanarak h\u0131zl\u0131ca bir\u00a0<em>kubernetes<\/em> cluster&#8217;\u0131na sahip olabiliriz. Detayl\u0131 bilgiye ise\u00a0<em><a href=\"https:\/\/docs.fission.io\/0.6.0\/installation\/kubernetessetup\/\" target=\"_blank\" rel=\"noopener\">buradan<\/a><\/em> ula\u015fabilirsiniz.<\/p>\n<p><em>Kubernetes<\/em>\u00a0cluster kurulumunun ard\u0131ndan, s\u0131ras\u0131yla &#8220;<em>Kubernetes CLI<\/em>&#8220;, &#8220;<em>Helm<\/em>&#8221; ve son olarak &#8220;<em>Fission<\/em>&#8221; kurulumunu ger\u00e7ekle\u015ftirmemiz gerekmektedir. \u0130lgili kurulum ad\u0131mlar\u0131n\u0131 ise <em><a href=\"https:\/\/docs.fission.io\/0.6.0\/installation\/installation\/\" target=\"_blank\" rel=\"noopener\">buradan<\/a><\/em> takip edebilirsiniz.<\/p>\n<blockquote><p><strong>NOT<\/strong>: Gerekli kurulumlar\u0131n ard\u0131ndan, &#8220;<em><a href=\"https:\/\/docs.fission.io\/0.6.0\/installation\/installation\/#run-an-example\" target=\"_blank\" rel=\"noopener\">Run an example<\/a><\/em>&#8221; k\u0131sm\u0131ndaki \u00f6rne\u011fin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun.<\/p><\/blockquote>\n<p>\u015eimdi en basit haliyle <em>fission<\/em> ile bir function&#8217;\u0131 nas\u0131l olu\u015fturabilir ve deploy edebiliriz k\u0131sm\u0131na bir bakal\u0131m. Bunun i\u00e7in, ilk olarak <em>fission<\/em> \u00fczerinde a\u015fa\u011f\u0131daki komut sat\u0131r\u0131 ile &#8220;<em>dotnetcore-env<\/em>&#8221; ad\u0131nda bir <em>.NET Core 2.0<\/em>\u00a0environment&#8217;\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"lang:default decode:true\">fission env create --name dotnetcore-env --image fission\/dotnet20-env<\/pre>\n<blockquote><p><strong>NOT<\/strong>: Environment olu\u015ftururken,\u00a0CPU ve memory resource limit&#8217;lerini de belirtebilmek m\u00fcmk\u00fcnd\u00fcr. \u00d6rne\u011fin: &#8220;<em>&#8211;mincpu 40 &#8211;maxcpu 80 &#8211;minmemory 64 &#8211;maxmemory 128<\/em>&#8220;<\/p><\/blockquote>\n<p><em>Fission<\/em>&#8216;\u0131n<em> .NET Core 2.0<\/em> environment&#8217;\u0131 i\u00e7erisinde, upload edilen function&#8217;\u0131 compile edebilmek i\u00e7in\u00a0<em>Roslyn<\/em> ve host i\u015flemlerini ger\u00e7ekle\u015ftirebilmek i\u00e7in ise <em>Kestrel<\/em> ve <em>Nancy<\/em>&#8216;i bar\u0131nd\u0131rmaktad\u0131r.<\/p>\n<p>Art\u0131k olu\u015fturmu\u015f oldu\u011fumuz bu environment&#8217;\u0131 kullanarak, toplama i\u015flemi yapan basit bir function olu\u015fturabiliriz. Bunun i\u00e7in,\u00a0<em>fission<\/em>&#8216;\u0131n built-in olarak bize sunmu\u015f oldu\u011fu <em>.NET Core 2.0<\/em>\u00a0environment&#8217;\u0131n\u0131n function template&#8217;ini kullanaca\u011f\u0131z.<\/p>\n<p><em>VS Code<\/em>&#8216;u a\u00e7al\u0131m ve &#8220;<em>FissionFunction<\/em>&#8221; isminde, a\u015fa\u011f\u0131daki gibi bir class olu\u015ftural\u0131m.<\/p>\n<pre class=\"lang:c# decode:true\">using System;\r\nusing Fission.DotNetCore.Api;\r\n\r\npublic class FissionFunction\r\n{\r\n    public string Execute(FissionContext context)\r\n    {\r\n        int x = Convert.ToInt32(context.Arguments[\"x\"]);\r\n        int y = Convert.ToInt32(context.Arguments[\"y\"]);\r\n\r\n        return (x + y).ToString();\r\n    }\r\n}<\/pre>\n<p>Built-in olarak sunulan\u00a0<em>.NET Core 2.0<\/em> environment&#8217;\u0131, yukar\u0131daki gibi bir convention ile \u00e7al\u0131\u015fabilmektedir. \u0130\u00e7erisinde &#8220;<em>Execute<\/em>&#8221; method&#8217;unun yer ald\u0131\u011f\u0131, yukar\u0131daki gibi bir &#8220;<em>FissionFunction<\/em>&#8221; isminde class olu\u015fturmam\u0131z gerekmektedir.<\/p>\n<p>Olu\u015fturmu\u015f oldu\u011fumuz &#8220;<em>FissionFunction<\/em>&#8221; class&#8217;\u0131na bakarsak, query-string ile gelen de\u011ferlere &#8220;<em>context.Arguments<\/em>&#8221; \u00fczerinden eri\u015febilmekteyiz. Body i\u00e7erisinden gelecek olan de\u011ferlere ise, &#8220;<em>context.Request.Body<\/em>&#8221; stream&#8217;i \u00fczerinden eri\u015febilmek de m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>\u015eimdi olu\u015fturmu\u015f oldu\u011fumuz &#8220;<em>FissionFunction<\/em>&#8221; class&#8217;\u0131n\u0131, <em>fussion<\/em> \u00fczerinde a\u015fa\u011f\u0131daki gibi bir function olarak tan\u0131mlamam\u0131z gerekmektedir.<\/p>\n<pre class=\"lang:default decode:true\">fission fn create --name addition --env dotnetcore-env --code [Your_Work_Dir]\/FissionFunction.cs<\/pre>\n<p>Yukar\u0131daki komut sat\u0131r\u0131 ile &#8220;<em>addition<\/em>&#8221; isminde, &#8220;<em>dotnetcore-env<\/em>&#8221; environment&#8217;\u0131n\u0131 kullanan ve &#8220;<em>FissionFunction<\/em>&#8221; class&#8217;\u0131n\u0131 execute edecek bir function tan\u0131mlam\u0131\u015f olduk.<\/p>\n<p>\u015eimdi ise olu\u015fturmu\u015f oldu\u011fumuz &#8220;<em>addition<\/em>&#8221; function&#8217;\u0131n\u0131n execute olabilmesi i\u00e7in bir trigger olu\u015fturmam\u0131z gerekmektedir. Bunun i\u00e7in ise a\u015fa\u011f\u0131daki komut sat\u0131r\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmam\u0131z yeterli olacakt\u0131r.<\/p>\n<pre class=\"lang:default decode:true\">fission ht create --method GET --url \/addition --function addition<\/pre>\n<p>Yukar\u0131daki komut sat\u0131r\u0131 ile &#8220;<em>addition<\/em>&#8221; function&#8217;\u0131n\u0131 &#8220;<em>http:\/\/localhost\/addition<\/em>&#8221; <em>URL<\/em>&#8216;i \u00fczerinden <em>GET<\/em> edildi\u011finde \u00e7al\u0131\u015ft\u0131rmas\u0131 i\u00e7in bir <em>HTTP<\/em> trigger&#8217;\u0131 olu\u015fturduk.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/03\/fission-functions.jpeg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2232 lazyload\" data-src=\"\/wp-content\/uploads\/2018\/03\/fission-functions.jpeg\" alt=\"\" width=\"1604\" height=\"274\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-functions.jpeg 1604w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-functions-300x51.jpeg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-functions-768x131.jpeg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-functions-1024x175.jpeg 1024w\" data-sizes=\"(max-width: 1604px) 100vw, 1604px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1604px; --smush-placeholder-aspect-ratio: 1604\/274;\" \/><\/a><\/p>\n<p>Hepsi bu kadar.<\/p>\n<p>Geriye sadece test i\u015flemi kald\u0131. Test edebilmek i\u00e7in\u00a0&#8220;<em>http:\/\/localhost\/addition?x=10&amp;y=5<\/em>&#8221; <em>URL<\/em>&#8216;ine bir <em>GET<\/em> iste\u011finde bulunal\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2018\/03\/fission-addition-test.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2233 lazyload\" data-src=\"\/wp-content\/uploads\/2018\/03\/fission-addition-test.jpg\" alt=\"\" width=\"1604\" height=\"238\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-addition-test.jpg 1604w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-addition-test-300x45.jpg 300w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-addition-test-768x114.jpg 768w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/fission-addition-test-1024x152.jpg 1024w\" data-sizes=\"(max-width: 1604px) 100vw, 1604px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1604px; --smush-placeholder-aspect-ratio: 1604\/238;\" \/><\/a><br \/>\nSonu\u00e7 ise yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi. <em>HTTP<\/em> trigger &#8220;<em>addition<\/em>&#8221; function&#8217;\u0131n\u0131 tetikledi ve &#8220;<em>FussionFunction<\/em>&#8221; class&#8217;\u0131 i\u00e7erisindeki &#8220;<em>Execute<\/em>&#8221; method&#8217;u \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131.<\/p>\n<p>\u00d6rne\u011fimizde basit olarak\u00a0<em>fission&#8217;<\/em>\u0131n bize sunmu\u015f oldu\u011funu built-in <em>.NET Core 2.0 <\/em>environment&#8217;\u0131 ile bir function olu\u015fturduk ve \u00e7al\u0131\u015ft\u0131rd\u0131k. Peki farkl\u0131 ihtiya\u00e7lar kar\u015f\u0131s\u0131nda ise, nas\u0131l bir function olu\u015fturabiliriz sorusunu duyar gibiyim. \u00d6rne\u011fin bir function i\u00e7erisinde bir ka\u00e7 farkl\u0131 <em>NuGet<\/em> package&#8217;\u0131n\u0131 kullanmak isteyebiliriz.<\/p>\n<p>Malesef<em>\u00a0fission<\/em>&#8216;\u0131n eksisi, \u015fuanda sadece &#8220;<em>compiled language<\/em>&#8221; ler i\u00e7in multiple file \u00f6zelli\u011fini desteklememektedir. Bu gibi durumlar i\u00e7in built-in olarak sunulan environment yerine, <em><a href=\"https:\/\/github.com\/fission\/fission\/tree\/master\/environments\/dotnet20\" target=\"_blank\" rel=\"noopener\">buradaki<\/a><\/em> projeyi kullanarak kendi environment&#8217;\u0131m\u0131z\u0131 (docker image) kolayl\u0131kla olu\u015fturabiliriz.<\/p>\n<p>Environment&#8217;\u0131 olu\u015fturduktan sonra ise tek yapmam\u0131z gereken \u015fey, a\u015fa\u011f\u0131daki gibi onu kullanmak olacakt\u0131r:<\/p>\n<pre class=\"lang:default decode:true\">fission env create --name your-dotnetcore-env --image your\/dotnet20-env<\/pre>\n<h4>Sonu\u00e7<\/h4>\n<p><em>FaaS<\/em>, son d\u00f6nemlerde beni heyecanland\u0131ran nadir konulardan birisidir. Bence short-lived function&#8217;lar olu\u015fturup ona \u00f6zel k\u00fc\u00e7\u00fck kod par\u00e7alar\u0131 yazabilmek, infra i\u015flerine harcanan zaman ve eforu azaltabilmek, teknolojinin h\u0131zla geli\u015fti\u011fi ve de\u011fi\u015fti\u011fi g\u00fcn\u00fcm\u00fcz \u00e7a\u011f\u0131nda \u00f6zellikle b\u00fcy\u00fck bir \u00f6nem ta\u015f\u0131maktad\u0131r. <em>Fission<\/em> gibi open-source serverless framework&#8217;leri, \u00f6zellikle provider agnostik olduklar\u0131 i\u00e7in san\u0131r\u0131m beni daha \u00e7ok cezbediyorlar. Bulundu\u011fum ortamlarda \u00e7ok da fazla <em>FaaS<\/em> kullan\u0131m\u0131 g\u00f6rmesemde, cloud provider&#8217;lar\u0131n\u0131n bu alana yat\u0131r\u0131m yapmalar\u0131n\u0131 g\u00f6rmek sevindirici. San\u0131r\u0131m gelecek zamanlarda daha \u00e7ok g\u00f6r\u00fcyor olaca\u011f\u0131m. Umar\u0131m. :)<\/p>\n<h4>Baz\u0131 Referanslar<\/h4>\n<blockquote><p>https:\/\/docs.fission.io\/0.6.0\/concepts\/<br \/>\nhttps:\/\/medium.com\/@PaulDJohnston\/when-not-to-use-serverless-jeff-6d054d0e7098<br \/>\nhttp:\/\/www.datacenterknowledge.com\/archives\/2017\/01\/18\/open-source-serverless-computing-frameworks-matter<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Cloud-based sistemlerin \u00e7o\u011falmas\u0131 ile birlikte, son d\u00f6nemlerde kendisinden olduk\u00e7a fazla s\u00f6z ettiren bir kavram a\u00e7\u0131kcas\u0131\u00a0serverless. Bir \u015feylerin h\u0131zla geli\u015fti\u011fi bu g\u00fcn\u00fcm\u00fcz \u00e7a\u011f\u0131nda, time to market&#8217;e daha da \u00f6nem verilmesiyle beraber, bazen tek ihtiyac\u0131m\u0131z olan \u015fey sadece bir function olabiliyor. Durum b\u00f6yle olunca, bu makale kapsam\u0131nda&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":2193,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[417,486],"tags":[419,444,489,488,490,487],"class_list":["post-1459","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-core","category-serverless","tag-asp-net-core","tag-asp-net-core-kubernetes","tag-asp-net-core-serverless","tag-faas","tag-function-as-a-service","tag-serverless","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":true,"content":true,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama - G\u00f6khan G\u00f6kalp<\/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:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-26T18:11:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-04-26T18:15:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"405\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama\",\"datePublished\":\"2018-04-26T18:11:07+00:00\",\"dateModified\":\"2018-04-26T18:15:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/\"},\"wordCount\":3391,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/serverless-architecture.jpg\",\"keywords\":[\"asp.net core\",\"asp.net core kubernetes\",\"asp.net core serverless\",\"faas\",\"function as a service\",\"serverless\"],\"articleSection\":[\"ASP.NET Core\",\"Serverless\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/\",\"name\":\"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/serverless-architecture.jpg\",\"datePublished\":\"2018-04-26T18:11:07+00:00\",\"dateModified\":\"2018-04-26T18:15:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/serverless-architecture.jpg\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/uploads\\\/2018\\\/03\\\/serverless-architecture.jpg\",\"width\":1024,\"height\":405},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ASP.NET Core Series 04: Building Serverless API Backend on Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama - G\u00f6khan G\u00f6kalp","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:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/","og_locale":"tr_TR","og_type":"article","og_title":"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2018-04-26T18:11:07+00:00","article_modified_time":"2018-04-26T18:15:26+00:00","og_image":[{"width":1024,"height":405,"url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg","type":"image\/jpeg"}],"author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama","datePublished":"2018-04-26T18:11:07+00:00","dateModified":"2018-04-26T18:15:26+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/"},"wordCount":3391,"commentCount":0,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg","keywords":["asp.net core","asp.net core kubernetes","asp.net core serverless","faas","function as a service","serverless"],"articleSection":["ASP.NET Core","Serverless"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/","url":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/","name":"ASP.NET Core Serisi 04: Kubernetes \u00dczerinde Serverless API Backend Tasarlama - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#primaryimage"},"image":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg","datePublished":"2018-04-26T18:11:07+00:00","dateModified":"2018-04-26T18:15:26+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#primaryimage","url":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2018\/03\/serverless-architecture.jpg","width":1024,"height":405},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/asp-net-core-series-04-building-serverless-api-backend-on-kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"ASP.NET Core Series 04: Building Serverless API Backend on Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1459","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=1459"}],"version-history":[{"count":59,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1459\/revisions"}],"predecessor-version":[{"id":2261,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/1459\/revisions\/2261"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media\/2193"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=1459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=1459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=1459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}