{"id":30521,"date":"2025-09-28T22:02:21","date_gmt":"2025-09-28T19:02:21","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/"},"modified":"2025-09-28T22:02:21","modified_gmt":"2025-09-28T19:02:21","slug":"aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/","title":{"rendered":"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?"},"content":{"rendered":"<p><body><\/p>\n<p>Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif bir Zindan Ustas\u0131 (DM) deneyimini AWS \u00fczerinde sunucusuz mimariyle nas\u0131l in\u015fa edebilirsiniz? Bu rehberde, bir &#8220;Sunucusuz Zindan Ustas\u0131 Agent&#8221; geli\u015ftirmenin ad\u0131m ad\u0131m t\u00fcm s\u00fcre\u00e7lerini ke\u015ffedece\u011fiz.<\/p>\n<p>Hayal edin: Bir fantastik rol yapma oyununa (RYO) ba\u015fl\u0131yorsunuz, ancak geleneksel oyunlardaki sabit senaryolar yerine, her karar\u0131n\u0131z\u0131n hikayeyi derinlemesine etkiledi\u011fi, dinamik olarak de\u011fi\u015fen bir d\u00fcnya sizi bekliyor. \u0130\u015fte &#8220;Sunucusuz Zindan Ustas\u0131 Agent&#8221; tam da bu noktada devreye giriyor. Geleneksel olarak bir insan DM&#8217;nin yapt\u0131\u011f\u0131, hikaye anlat\u0131m\u0131, karakterlerle etkile\u015fim, d\u00fcnya durumu y\u00f6netimi ve beklenmedik olaylar yaratma gibi karma\u015f\u0131k g\u00f6revleri otomatikle\u015ftiren bir yapay zeka sistemidir.<\/p>\n<p>Peki, bu neden bu kadar \u00f6nemli? \u00d6ncelikle, bu t\u00fcr bir agent, oyuncular\u0131n deneyimini ki\u015fiselle\u015ftirmenin ve oyunun tekrar oynanabilirli\u011fini inan\u0131lmaz derecede art\u0131rman\u0131n anahtar\u0131d\u0131r. Her oynay\u0131\u015f\u0131n\u0131zda farkl\u0131 bir macera ya\u015fayabilir, karakterinizin se\u00e7imlerinin ger\u00e7ekten bir a\u011f\u0131rl\u0131\u011f\u0131 oldu\u011funu hissedebilirsiniz. \u0130kincisi, bu agent&#8217;\u0131 sunucusuz bir mimari \u00fczerinde in\u015fa etmek, geli\u015ftiricilere m\u00fcthi\u015f avantajlar sunar. Geleneksel sunucu y\u00f6netimiyle u\u011fra\u015fmak yerine, geli\u015ftiriciler sadece kodlar\u0131na odaklanabilirler. Bu, altyap\u0131 maliyetlerinin d\u00fc\u015fmesini, \u00f6l\u00e7eklenebilirli\u011fin artmas\u0131n\u0131 ve bak\u0131m y\u00fck\u00fcn\u00fcn azalmas\u0131n\u0131 sa\u011flar. Oyununuz bir anda binlerce oyuncuya ula\u015fsa bile, AWS&#8217;nin sunucusuz hizmetleri talebi otomatik olarak kar\u015f\u0131layabilir, bu da beklenmedik trafik art\u0131\u015flar\u0131nda bile kesintisiz bir deneyim sunar.<\/p>\n<p>Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, ba\u011f\u0131ms\u0131z bir oyun geli\u015ftiricisinin s\u0131n\u0131rl\u0131 b\u00fct\u00e7eyle b\u00fcy\u00fck \u00f6l\u00e7ekli ve dinamik bir RYO deneyimi sunmak istedi\u011fini varsayal\u0131m. Geleneksel sunucular kurmak ve y\u00f6netmek, hem maliyetli hem de zaman al\u0131c\u0131d\u0131r. Ancak, sunucusuz bir DM Agent ile bu geli\u015ftirici, sunucu maliyetleri konusunda endi\u015felenmeden, hikaye yaratmaya ve oyun mekaniklerini geli\u015ftirmeye odaklanabilir. Oyunun pop\u00fclerli\u011fi artt\u0131k\u00e7a, AWS Lambda ve API Gateway gibi hizmetler sayesinde sistem otomatik olarak \u00f6l\u00e7eklenir ve geli\u015ftiricinin manuel m\u00fcdahalesine gerek kalmaz. B\u00f6ylece, k\u00fc\u00e7\u00fck bir ekip bile b\u00fcy\u00fck bir projeyi hayata ge\u00e7irebilir ve oyunculara her seferinde farkl\u0131 hissettiren zengin, adaptif bir hikaye sunabilir.<\/p>\n<p>\u00d6zetle, sunucusuz bir DM Agent, oyun geli\u015ftirme paradigmas\u0131n\u0131 de\u011fi\u015ftiren, maliyet etkin, son derece \u00f6l\u00e7eklenebilir ve dinamik oyun deneyimleri yaratma potansiyeli ta\u015f\u0131yan devrim niteli\u011finde bir yakla\u015f\u0131md\u0131r. Bu sayede, oyunculara sunulan i\u00e7erik sadece \u00f6nceden belirlenmi\u015f bir senaryo olmaktan \u00e7\u0131k\u0131p, ger\u00e7ek zamanl\u0131 olarak etkile\u015fimlerine g\u00f6re \u015fekillenen, ya\u015fayan bir d\u00fcnya haline gelir. Bu da modern oyunculuk beklentilerini fazlas\u0131yla kar\u015f\u0131layan, s\u00fcr\u00fckleyici bir deneyim vadeder.<\/p>\n<h2>Temel Kavramlar: AWS Sunucusuz Mimarisi ve Yapay Zeka Bile\u015fenleri Nelerdir?<\/h2>\n<p>Sunucusuz bir Zindan Ustas\u0131 Agent olu\u015fturmak i\u00e7in AWS&#8217;nin sundu\u011fu bir dizi g\u00fc\u00e7l\u00fc hizmetten yararlanaca\u011f\u0131z. Bu hizmetler, arka u\u00e7 operasyonlar\u0131n\u0131 y\u00f6netme, yapay zeka yetenekleri entegre etme ve veri depolama gibi farkl\u0131 ihtiya\u00e7lar\u0131m\u0131z\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015ft\u0131r. \u0130\u015fte projemizin temel ta\u015flar\u0131n\u0131 olu\u015fturan kilit AWS servisleri:<\/p>\n<ul>\n<li><strong>AWS Lambda:<\/strong> Sunucusuz mimarinin kalbi. Kodunuzu sunucu provizyonu veya y\u00f6netimi olmadan \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r. DM Agent&#8217;\u0131m\u0131z\u0131n oyun mant\u0131\u011f\u0131, kullan\u0131c\u0131 girdilerini i\u015fleme ve yan\u0131t olu\u015fturma gibi t\u00fcm arka u\u00e7 i\u015flemleri Lambda fonksiyonlar\u0131 \u00fczerinde \u00e7al\u0131\u015facak. Bu sayede sadece kullan\u0131lan bilgi i\u015flem kaynaklar\u0131 i\u00e7in \u00f6deme yap\u0131l\u0131r ve y\u00fcksek \u00f6l\u00e7eklenebilirlik garanti edilir.<\/li>\n<li><strong>Amazon API Gateway:<\/strong> Lambda fonksiyonlar\u0131m\u0131za d\u0131\u015f d\u00fcnyadan eri\u015fim sa\u011flaman\u0131n en g\u00fcvenli ve \u00f6l\u00e7eklenebilir yolu. Oyuncular\u0131n istemci uygulamalar\u0131ndan (web, mobil veya masa\u00fcst\u00fc) DM Agent&#8217;a yapt\u0131\u011f\u0131 t\u00fcm istekler bu a\u011f ge\u00e7idi \u00fczerinden y\u00f6nlendirilecek. Kimlik do\u011frulama, yetkilendirme ve istek k\u0131s\u0131tlama gibi \u00f6zellikleriyle de API g\u00fcvenli\u011fini ve performans\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>Amazon DynamoDB:<\/strong> H\u0131zl\u0131 ve esnek bir NoSQL veritaban\u0131 hizmeti. Oyun d\u00fcnyas\u0131n\u0131n durumu, oyuncu karakter bilgileri, envanter, mevcut g\u00f6revler ve DM Agent&#8217;\u0131n anl\u0131k haf\u0131zas\u0131 gibi kritik verileri depolamak i\u00e7in idealdir. Y\u00fcksek performans ve \u00f6l\u00e7eklenebilirlik, oyunun dinamik ve h\u0131zl\u0131 yan\u0131t vermesini sa\u011flar.<\/li>\n<li><strong>Amazon S3 (Simple Storage Service):<\/strong> Y\u00fcksek oranda dayan\u0131kl\u0131, \u00f6l\u00e7eklenebilir ve d\u00fc\u015f\u00fck maliyetli nesne depolama hizmeti. Oyun varl\u0131klar\u0131 (resimler, ses dosyalar\u0131, d\u00fcnya haritalar\u0131) veya Agent&#8217;\u0131n uzun s\u00fcreli haf\u0131zas\u0131 i\u00e7in b\u00fcy\u00fck metin bloklar\u0131 gibi statik i\u00e7erikleri depolamak i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>Amazon Bedrock:<\/strong> Generative AI (\u00dcretken Yapay Zeka) yeteneklerinin ana sa\u011flay\u0131c\u0131s\u0131. DM Agent&#8217;\u0131m\u0131z\u0131n en kritik bile\u015feni olacak. Dinamik hikaye anlat\u0131m\u0131, karakter diyaloglar\u0131 olu\u015fturma, senaryolar\u0131 tasarlama ve oyuncu eylemlerine g\u00f6re yeni i\u00e7erik \u00fcretme gibi g\u00f6revlerde Bedrock&#8217;taki b\u00fcy\u00fck dil modellerinden (LLM) faydalanaca\u011f\u0131z. \u00d6rne\u011fin, Anthropic Claude veya Amazon Titan modelleri, karma\u015f\u0131k ve ba\u011flamsal olarak uygun yan\u0131tlar \u00fcretmek i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>Amazon Polly:<\/strong> Metinden konu\u015fmaya (Text-to-Speech) d\u00f6n\u00fc\u015ft\u00fcrme hizmeti. Agent&#8217;\u0131m\u0131z\u0131n \u00fcretti\u011fi metin tabanl\u0131 yan\u0131tlar\u0131 ger\u00e7ek\u00e7i seslere d\u00f6n\u00fc\u015ft\u00fcrerek, oyunculara daha s\u00fcr\u00fckleyici bir sesli deneyim sunabiliriz. \u00d6zellikle sesli etkile\u015fimli oyunlar i\u00e7in vazge\u00e7ilmez bir bile\u015fendir.<\/li>\n<li><strong>Amazon Comprehend veya Amazon Lex (iste\u011fe ba\u011fl\u0131):<\/strong> Oyuncu girdilerini anlamak i\u00e7in kullan\u0131labilir. Comprehend, metin analizi, duygu analizi ve anahtar ifade \u00e7\u0131kar\u0131m\u0131 gibi g\u00f6revler i\u00e7in faydal\u0131d\u0131r. Lex ise do\u011fal dil anlama (NLU) ve konu\u015fma tan\u0131ma (ASR) \u00f6zellikleriyle, sesli komutlar\u0131 i\u015fleyip bunlar\u0131 yap\u0131land\u0131r\u0131lm\u0131\u015f verilere d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullan\u0131labilir. Bu sayede DM Agent, oyuncunun niyetini daha do\u011fru bir \u015fekilde anlayabilir.<\/li>\n<\/ul>\n<p>Bu hizmetlerin bir araya gelmesiyle, geleneksel sunucu y\u00f6netimiyle u\u011fra\u015fmadan, oyuncu deneyimini zenginle\u015ftiren, son derece esnek ve ak\u0131ll\u0131 bir Zindan Ustas\u0131 Agent&#8217;\u0131 olu\u015fturabiliriz. Her bir servis, kendi alan\u0131nda en iyi performans\u0131 ve \u00f6l\u00e7eklenebilirli\u011fi sunarak, geli\u015ftiricilerin sadece oyunun i\u00e7eri\u011fine ve yapay zeka mant\u0131\u011f\u0131na odaklanmas\u0131na olanak tan\u0131r. Bu mimari, d\u00fc\u015f\u00fck operasyonel maliyetlerle y\u00fcksek verimli bir oyun deneyimi sunman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h2>Mimarinin Tasar\u0131m\u0131: Sunucusuz DM Agent&#8217;\u0131 Nas\u0131l \u015eekillendiririz?<\/h2>\n<p>Sunucusuz Zindan Ustas\u0131 Agent&#8217;\u0131n\u0131n mimarisi, oyuncu isteklerini almak, bunlar\u0131 i\u015flemek, dinamik bir yan\u0131t olu\u015fturmak ve bu yan\u0131t\u0131 oyuncuya geri g\u00f6ndermek \u00fczerine kuruludur. Bu s\u00fcre\u00e7, birka\u00e7 temel AWS hizmetinin uyumlu bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 gerektirir. \u0130\u015fte bu bile\u015fenlerin nas\u0131l bir araya geldi\u011fini g\u00f6steren genel bir bak\u0131\u015f:<\/p>\n<p><strong>1. Oyuncu \u0130ste\u011fi:<\/strong> Her \u015fey oyuncunun DM Agent&#8217;\u0131na bir komut veya soru g\u00f6ndermesiyle ba\u015flar. Bu, genellikle bir istemci uygulamas\u0131 (web aray\u00fcz\u00fc, mobil uygulama veya oyun istemcisi) arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. \u00d6rne\u011fin, oyuncu &#8220;Ne yapmal\u0131y\u0131m?&#8221; veya &#8220;Oday\u0131 ara&#8221; gibi bir metin komutu g\u00f6nderebilir.<\/p>\n<p><strong>2. API Gateway:<\/strong> Oyuncudan gelen istek, Amazon API Gateway taraf\u0131ndan kar\u015f\u0131lan\u0131r. API Gateway, gelen HTTP isteklerini y\u00f6nlendirme, kimlik do\u011frulama (\u00f6rne\u011fin, JWT ile) ve istek do\u011frulama gibi g\u00f6revleri yerine getirir. Bu, sistemimizin d\u0131\u015f d\u00fcnyaya g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir aray\u00fcz sunmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>3. AWS Lambda (Giri\u015f \u0130\u015fleyici):<\/strong> API Gateway, iste\u011fi \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f bir AWS Lambda fonksiyonuna iletir. Bu Lambda fonksiyonu, oyuncunun girdisini al\u0131r ve ilk i\u015flemeyi yapar. Bu i\u015flemeye, metin analizi (Amazon Comprehend ile duygu veya anahtar ifade tespiti) veya sesli giri\u015f ise metne d\u00f6n\u00fc\u015ft\u00fcrme (Amazon Lex ile) dahil olabilir.<\/p>\n<p><strong>4. DynamoDB (Oyun Durumu Y\u00f6netimi):<\/strong> Lambda fonksiyonu, her oyuncu oturumu i\u00e7in ayr\u0131 bir ba\u011flam\u0131n (context) ve oyunun mevcut durumunun (player state, world state) izlenmesi i\u00e7in Amazon DynamoDB&#8217;ye ba\u015fvurur. DynamoDB, oyuncunun karakterinin envanteri, konumu, mevcut g\u00f6revleri, etkile\u015fimde oldu\u011fu NPC&#8217;ler ve d\u00fcnya hakk\u0131ndaki di\u011fer \u00f6nemli bilgileri h\u0131zl\u0131ca depolar ve eri\u015filebilir k\u0131lar. Bu, DM Agent&#8217;\u0131n\u0131n tutarl\u0131 ve ba\u011flamsal olarak alakal\u0131 yan\u0131tlar \u00fcretmesini sa\u011flar.<\/p>\n<p><strong>5. AWS Lambda (DM Karar Mekanizmas\u0131 &#8211; Bedrock Entegrasyonu):<\/strong> Ana Lambda fonksiyonu, oyuncu girdisi, mevcut oyun durumu ve ge\u00e7mi\u015f etkile\u015fimler gibi t\u00fcm ba\u011flamsal bilgileri bir araya getirerek Amazon Bedrock&#8217;a g\u00f6nderir. Bedrock, burada se\u00e7ilen b\u00fcy\u00fck dil modeli (\u00f6rne\u011fin, Anthropic Claude) arac\u0131l\u0131\u011f\u0131yla oyuncuya verilecek yan\u0131t\u0131, hikayenin gidi\u015fat\u0131n\u0131, yeni olaylar\u0131 veya NPC diyaloglar\u0131n\u0131 dinamik olarak \u00fcretir. Bu ad\u0131m, DM Agent&#8217;\u0131n\u0131n &#8220;yarat\u0131c\u0131&#8221; k\u0131sm\u0131n\u0131 olu\u015fturur ve oyunun her an\u0131n\u0131n benzersiz olmas\u0131n\u0131 sa\u011flar.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Bedrock&#8217;a g\u00f6nderilen prompt (istem), oyunun kurallar\u0131, tonu, karakterlerin ki\u015filikleri ve mevcut senaryo hakk\u0131nda detayl\u0131 y\u00f6nergeler i\u00e7ermelidir. Bu, tutarl\u0131 ve s\u00fcr\u00fckleyici bir deneyim i\u00e7in kritik \u00f6neme sahiptir.\n<\/div>\n<p><strong>6. DynamoDB (Durum G\u00fcncelleme):<\/strong> Bedrock&#8217;tan gelen yan\u0131t i\u015flendikten sonra, oyunun durumu (\u00f6rne\u011fin, oyuncunun yeni konumu, envanterindeki de\u011fi\u015fiklikler, yeni g\u00f6revler) tekrar DynamoDB&#8217;ye kaydedilir. Bu, bir sonraki etkile\u015fim i\u00e7in gerekli olan g\u00fcncel bilgiyi sa\u011flar.<\/p>\n<p><strong>7. AWS Lambda (\u00c7\u0131k\u0131\u015f \u0130\u015fleyici):<\/strong> Son olarak, yan\u0131t metni Lambda fonksiyonu taraf\u0131ndan i\u015flenir. E\u011fer sesli bir \u00e7\u0131kt\u0131 gerekiyorsa, Amazon Polly kullan\u0131larak bu metin konu\u015fmaya d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Polly, farkl\u0131 dillerde ve \u00e7e\u015fitli ses tonlar\u0131nda do\u011fal sesler \u00fcretebilir.<\/p>\n<p><strong>8. Oyuncuya Geri D\u00f6n\u00fc\u015f:<\/strong> Olu\u015fturulan metin veya sesli yan\u0131t, API Gateway \u00fczerinden tekrar istemci uygulamas\u0131na g\u00f6nderilir. Oyuncu, DM Agent&#8217;\u0131n\u0131n dinamik ve ki\u015fiselle\u015ftirilmi\u015f yan\u0131t\u0131n\u0131 al\u0131r ve maceras\u0131na devam eder.<\/p>\n<p>Bu mimari, her bir bile\u015fenin belirli bir g\u00f6revi yerine getirdi\u011fi, gev\u015fek ba\u011fl\u0131 (loosely coupled) bir yap\u0131d\u0131r. Bu sayede, herhangi bir bile\u015fende de\u011fi\u015fiklik yap\u0131lmas\u0131 veya \u00f6l\u00e7eklendirilmesi, sistemin geri kalan\u0131n\u0131 etkilemeden kolayca yap\u0131labilir. \u00d6l\u00e7eklenebilirlik, maliyet etkinli\u011fi ve h\u0131zl\u0131 geli\u015ftirme, bu sunucusuz yakla\u015f\u0131m\u0131n temel avantajlar\u0131d\u0131r.<\/p>\n<h3>Ad\u0131m Ad\u0131m Kurulum: AWS \u00dczerinde Temelleri Atmak<\/h3>\n<p>\u015eimdi bu teorik bilgileri prati\u011fe d\u00f6kelim ve AWS \u00fczerinde Sunucusuz Zindan Ustas\u0131 Agent&#8217;\u0131m\u0131z\u0131n temellerini atmaya ba\u015flayal\u0131m. Bu b\u00f6l\u00fcmde, gerekli AWS hizmetlerini nas\u0131l yap\u0131land\u0131raca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Unutmay\u0131n, bu ad\u0131mlar bir \u00f6n haz\u0131rl\u0131k niteli\u011findedir ve tam te\u015fekk\u00fcll\u00fc bir agent i\u00e7in daha fazla kod ve mant\u0131k gerekecektir.<\/p>\n<p><strong>1. AWS Hesab\u0131 ve IAM Yap\u0131land\u0131rmas\u0131:<\/strong><\/p>\n<p>\u0130lk olarak, bir AWS hesab\u0131n\u0131z\u0131n olmas\u0131 gerekiyor. E\u011fer yoksa, <a href=\"https:\/\/aws.amazon.com\/free\/\" target=\"_blank\">AWS Free Tier<\/a> ile \u00fccretsiz bir hesap olu\u015fturabilirsiniz. Ard\u0131ndan, g\u00fcvenlik i\u00e7in bir IAM (Identity and Access Management) kullan\u0131c\u0131s\u0131 olu\u015fturup bu kullan\u0131c\u0131ya gerekli izinleri atamal\u0131y\u0131z. Bu izinler, Lambda, API Gateway, DynamoDB ve Bedrock gibi kullanaca\u011f\u0131m\u0131z hizmetlere eri\u015fim sa\u011flamal\u0131d\u0131r.<\/p>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: IAM politikalar\u0131n\u0131 her zaman en az ayr\u0131cal\u0131k prensibi (least privilege) ile yap\u0131land\u0131r\u0131n. Yani, bir servise sadece ihtiyac\u0131 olan izinleri verin. Bu, g\u00fcvenlik risklerini minimize eder.\n<\/div>\n<pre><code>\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"logs:CreateLogGroup\",\n                \"logs:CreateLogStream\",\n                \"logs:PutLogEvents\"\n            ],\n            \"Resource\": \"arn:aws:logs:*:*:*\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"lambda:InvokeFunction\"\n            ],\n            \"Resource\": \"arn:aws:lambda:*:*:function:*\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"dynamodb:GetItem\",\n                \"dynamodb:PutItem\",\n                \"dynamodb:UpdateItem\",\n                \"dynamodb:DeleteItem\"\n            ],\n            \"Resource\": \"arn:aws:dynamodb:*:*:table\/*\"\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": \"bedrock:InvokeModel\",\n            \"Resource\": \"arn:aws:bedrock:*:*:model\/*\"\n        }\n    ]\n}\n<\/pre>\n<p><\/code><\/p>\n<p><strong>2. DynamoDB Tablosu Olu\u015fturma:<\/strong><\/p>\n<p>Oyun durumunu depolamak i\u00e7in bir DynamoDB tablosu olu\u015ftural\u0131m. Bu tablo, her oyuncu oturumu i\u00e7in benzersiz bir anahtar i\u00e7erecek ve oyun verilerini saklayacak.<\/p>\n<ul>\n<li>AWS Konsolu'na gidin, DynamoDB hizmetini aray\u0131n.<\/li>\n<li>\"Tables\" b\u00f6l\u00fcm\u00fcnden \"Create table\"a t\u0131klay\u0131n.<\/li>\n<li>Tablo Ad\u0131: <code>DungeonMasterSessions<\/code><\/li>\n<li>Partition key (Birincil B\u00f6l\u00fcmleme Anahtar\u0131): <code>sessionId<\/code> (String t\u00fcr\u00fcnde)<\/li>\n<li>Sort key (S\u0131ralama Anahtar\u0131): \u0130ste\u011fe ba\u011fl\u0131, \u015fimdilik bo\u015f b\u0131rakabiliriz.<\/li>\n<li>Varsay\u0131lan ayarlar\u0131 kullanarak tabloyu olu\u015fturun.<\/li>\n<\/ul>\n<p><strong>3. AWS Lambda Fonksiyonu Olu\u015fturma:<\/strong><\/p>\n<p>\u015eimdi DM Agent'\u0131m\u0131z\u0131n \u00e7ekirde\u011fi olacak Lambda fonksiyonunu olu\u015ftural\u0131m. Bu fonksiyon, API Gateway'den gelen istekleri i\u015fleyecek, DynamoDB'den durumu alacak, Bedrock ile etkile\u015fime girecek ve yan\u0131t\u0131 geri d\u00f6nd\u00fcrecektir.<\/p>\n<ul>\n<li>AWS Konsolu'nda Lambda hizmetine gidin.<\/li>\n<li>\"Create function\"a t\u0131klay\u0131n.<\/li>\n<li>\"Author from scratch\" se\u00e7ene\u011fini se\u00e7in.<\/li>\n<li>Fonksiyon Ad\u0131: <code>DungeonMasterAgentFunction<\/code><\/li>\n<li>Runtime: Node.js (veya Python gibi tercih etti\u011finiz bir dil)<\/li>\n<li>Execution role (Y\u00fcr\u00fctme rol\u00fc): Daha \u00f6nce olu\u015fturdu\u011funuz veya \"Create a new role with basic Lambda permissions\" se\u00e7ene\u011fini se\u00e7ip, sonradan DynamoDB ve Bedrock eri\u015fimini ekleyebilece\u011finiz bir rol se\u00e7in.<\/li>\n<li>Fonksiyonu olu\u015fturun.<\/li>\n<\/ul>\n<p>Fonksiyon kod edit\u00f6r\u00fcnde, basit bir test kodu ekleyelim:<\/p>\n<pre><code>\nexports.handler = async (event) => {\n    console.log(\"Gelen etkinlik:\", JSON.stringify(event, null, 2));\n\n    const playerInput = event.body ? JSON.parse(event.body).message : \"Merhaba, Zindan Ustas\u0131!\";\n    let responseMessage = \"\";\n\n    try {\n        \/\/ Burada DynamoDB'den oturum durumunu alacak, Bedrock ile etkile\u015fime ge\u00e7ecek\n        \/\/ ve oyun mant\u0131\u011f\u0131n\u0131 y\u00fcr\u00fctecek kodlar yer alacak.\n        \/\/ \u015eimdilik basit bir geri d\u00f6n\u00fc\u015f yapal\u0131m.\n        responseMessage = <code>DM Agent&#039;\u0131n\u0131zdan yan\u0131t: \"${playerInput}\" komutunuzu ald\u0131m. Macera devam ediyor!<\/code>;\n    } catch (error) {\n        console.error(\"Hata olu\u015ftu:\", error);\n        responseMessage = \"\u00dczg\u00fcn\u00fcm, bir sorun olu\u015ftu. Tekrar deneyin.\";\n    }\n\n    const response = {\n        statusCode: 200,\n        headers: {\n            \"Content-Type\": \"application\/json\",\n            \"Access-Control-Allow-Origin\": \"*\", \/\/ CORS i\u00e7in\n            \"Access-Control-Allow-Methods\": \"OPTIONS,POST,GET\",\n            \"Access-Control-Allow-Headers\": \"Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token\"\n        },\n        body: JSON.stringify({ message: responseMessage }),\n    };\n    return response;\n};\n<\/pre>\n<p><\/code><\/p>\n<p><strong>4. API Gateway Olu\u015fturma:<\/strong><\/p>\n<p>\u015eimdi Lambda fonksiyonumuzu d\u0131\u015far\u0131ya a\u00e7mak i\u00e7in bir REST API Gateway olu\u015ftural\u0131m.<\/p>\n<ul>\n<li>AWS Konsolu'nda API Gateway hizmetine gidin.<\/li>\n<li>\"Build\" (REST API alt\u0131nda) se\u00e7ene\u011fini se\u00e7in.<\/li>\n<li>\"New API\" se\u00e7ene\u011fini se\u00e7in, bir isim verin (\u00f6rn. <code>DungeonMasterAPI<\/code>) ve \"Edge optimized\" olarak b\u0131rak\u0131n.<\/li>\n<li>API'yi olu\u015fturduktan sonra, \"Actions\" men\u00fcs\u00fcnden \"Create Resource\"u se\u00e7in. Yol olarak <code>\/dm<\/code> verin.<\/li>\n<li>Yeni olu\u015fturdu\u011funuz <code>\/dm<\/code> kayna\u011f\u0131n\u0131 se\u00e7in ve \"Actions\" men\u00fcs\u00fcnden \"Create Method\"u se\u00e7in. <code>POST<\/code> metodunu se\u00e7in.<\/li>\n<li>Entegrasyon tipi olarak \"Lambda Function\"\u0131 se\u00e7in, \"Use Lambda Proxy integration\" kutucu\u011funu i\u015faretleyin.<\/li>\n<li>\"Lambda Function\" alan\u0131na daha \u00f6nce olu\u015fturdu\u011funuz <code>DungeonMasterAgentFunction<\/code> fonksiyon ad\u0131n\u0131 yazmaya ba\u015flay\u0131n ve \u00e7\u0131kan \u00f6nerilerden se\u00e7in.<\/li>\n<li>Kaydedin. API Gateway, Lambda fonksiyonuna gerekli izinleri otomatik olarak ekleyecektir.<\/li>\n<li>Son olarak, \"Actions\" men\u00fcs\u00fcnden \"Deploy API\" se\u00e7ene\u011fini se\u00e7in. Yeni bir \"Deployment stage\" olu\u015fturun (\u00f6rn. <code>prod<\/code>) ve deploy edin. Bu size API'nizin \u00e7a\u011fr\u0131labilece\u011fi bir URL sa\u011flayacakt\u0131r.<\/li>\n<\/ul>\n<p>Art\u0131k temel altyap\u0131n\u0131z haz\u0131r! Bu API URL'sine POST iste\u011fi g\u00f6ndererek Lambda fonksiyonunuzu tetikleyebilir ve basit bir yan\u0131t alabilirsiniz. \u0130lerleyen a\u015famalarda, bu yap\u0131n\u0131n i\u00e7ine DynamoDB ve Bedrock entegrasyonlar\u0131n\u0131 yerle\u015ftirece\u011fiz.<\/p>\n<h3>Oyun Mant\u0131\u011f\u0131 ve Dinamik Anlat\u0131m Nas\u0131l Y\u00f6netilir?<\/h3>\n<p>Sunucusuz Zindan Ustas\u0131 Agent'\u0131m\u0131z\u0131n kalbi, dinamik ve ba\u011flamsal olarak uygun anlat\u0131lar olu\u015fturma yetene\u011fidir. Bu yetenek, \u00f6ncelikle Amazon Bedrock'taki g\u00fc\u00e7l\u00fc \u00fcretken yapay zeka modelleri ve oturum durumunu y\u00f6netmek i\u00e7in Amazon DynamoDB'nin stratejik kullan\u0131m\u0131yla sa\u011flan\u0131r. \u015eimdi bu \u00f6nemli ad\u0131m\u0131 detayland\u0131ral\u0131m.<\/p>\n<p><strong>1. Oturum Durumu Y\u00f6netimi (DynamoDB ile):<\/strong><\/p>\n<p>Bir rol yapma oyununda, DM'nin oyuncunun ne yapt\u0131\u011f\u0131n\u0131, nerede oldu\u011funu, envanterinde ne oldu\u011funu ve ge\u00e7mi\u015fte neler ya\u015fand\u0131\u011f\u0131n\u0131 hat\u0131rlamas\u0131 kritik \u00f6neme sahiptir. Sunucusuz bir ortamda, bu \"haf\u0131zay\u0131\" y\u00f6netmek i\u00e7in DynamoDB kullan\u0131r\u0131z. Her oyuncu oturumu (veya karakteri) i\u00e7in DynamoDB'de benzersiz bir kay\u0131t (item) tutar\u0131z.<\/p>\n<p>Bu kayd\u0131n i\u00e7inde \u015funlar bulunabilir:<\/p>\n<ul>\n<li><code>sessionId<\/code>: Her oyuncu oturumu i\u00e7in benzersiz bir ID.<\/li>\n<li><code>playerPosition<\/code>: Oyuncunun mevcut konumu (\u00f6rn. <code>{ map: \"Forgotten Forest\", coordinates: \"E3\" }<\/code>).<\/li>\n<li><code>playerInventory<\/code>: Oyuncunun e\u015fyalar\u0131 (\u00f6rn. <code>[\"short sword\", \"healing potion\"]<\/code>).<\/li>\n<li><code>questsActive<\/code>: Aktif g\u00f6revler ve durumlar\u0131.<\/li>\n<li><code>worldState<\/code>: D\u00fcnyadaki \u00f6nemli de\u011fi\u015fiklikler veya NPC'lerin durumu.<\/li>\n<li><code>conversationHistory<\/code>: DM ile oyuncu aras\u0131ndaki son birka\u00e7 diyalog (ba\u011flam i\u00e7in).<\/li>\n<li><code>lastAction<\/code>: Oyuncunun son eylemi.<\/li>\n<\/ul>\n<p>Her oyuncu iste\u011fi geldi\u011finde Lambda fonksiyonumuz \u00f6nce bu <code>sessionId<\/code> ile DynamoDB'den ilgili oturum durumunu \u00e7eker. Yan\u0131t olu\u015ftuktan ve oyun durumu g\u00fcncellendikten sonra, g\u00fcncel durumu tekrar DynamoDB'ye kaydederiz.<\/p>\n<p><strong>2. Bedrock ile Dinamik Anlat\u0131 \u00dcretimi:<\/strong><\/p>\n<p>\u0130\u015fte en heyecan verici k\u0131s\u0131m: Bedrock'un g\u00fcc\u00fcn\u00fc kullanarak yarat\u0131c\u0131 hikayeler ve yan\u0131tlar olu\u015fturmak. Lambda fonksiyonumuz, oyuncu girdisini ve DynamoDB'den al\u0131nan g\u00fcncel oturum durumunu bir araya getirerek, Bedrock'taki bir dil modeline (\u00f6rne\u011fin Anthropic Claude 3 veya Amazon Titan Text) bir \"prompt\" g\u00f6nderir.<\/p>\n<p>Prompt, modelin ne yapmas\u0131 gerekti\u011fini a\u00e7\u0131k\u00e7a belirtmelidir. \u0130yi bir prompt \u015funlar\u0131 i\u00e7erebilir:<\/p>\n<ul>\n<li><strong>Rol Tan\u0131m\u0131:<\/strong> \"Sen bir fantastik RYO'da tecr\u00fcbeli ve s\u00fcr\u00fckleyici bir Zindan Ustas\u0131's\u0131n.\"<\/li>\n<li><strong>Oyunun Tonu:<\/strong> \"Hikaye karanl\u0131k fantezi tonunda, biraz mizah ve bolca tehlike i\u00e7eriyor.\"<\/li>\n<li><strong>Mevcut Durum:<\/strong> \"Oyuncu \u015fu an Forgotten Forest'\u0131n do\u011fu kenar\u0131nda, envanterinde k\u0131sa bir k\u0131l\u0131\u00e7 ve \u015fifa iksiri var. En son bir Goblin kamp\u0131n\u0131 temizledi.\"<\/li>\n<li><strong>Oyuncunun Eylemi:<\/strong> \"Oyuncu 'Kuzeye do\u011fru y\u00fcr\u00fcmek istiyorum.' dedi.\"<\/li>\n<li><strong>Beklenti:<\/strong> \"Bu eyleme g\u00f6re, bir sonraki sahneyi, kar\u015f\u0131la\u015f\u0131lan zorluklar\u0131 veya yeni bir NPC'yi detayl\u0131 ve s\u00fcr\u00fckleyici bir \u015fekilde anlat. Yeni bir g\u00f6rev ba\u015flatabilirsin. Yan\u0131t\u0131n 150 kelimeyi ge\u00e7mesin.\"<\/li>\n<\/ul>\n<p>\u0130\u015fte bir \u00f6rnek Lambda kod par\u00e7ac\u0131\u011f\u0131 (Node.js) Bedrock'u nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 g\u00f6steriyor:<\/p>\n<pre><code>\nconst { BedrockRuntimeClient, InvokeModelCommand } = require(\"@aws-sdk\/client-bedrock-runtime\");\nconst { DynamoDBClient } = require(\"@aws-sdk\/client-dynamodb\");\nconst { GetCommand, PutCommand } = require(\"@aws-sdk\/lib-dynamodb\");\n\nconst bedrockClient = new BedrockRuntimeClient({ region: \"us-east-1\" }); \/\/ Bedrock b\u00f6lgesini ayarlay\u0131n\nconst ddbDocClient = new DynamoDBClient({ region: \"us-east-1\" }); \/\/ DynamoDB b\u00f6lgesini ayarlay\u0131n\n\nexports.handler = async (event) => {\n    const sessionId = \"oyuncu123\"; \/\/ Ger\u00e7ek uygulamada event.requestContext.authorizer.claims.sub gibi bir yerden al\u0131n\u0131r\n    const playerInput = event.body ? JSON.parse(event.body).message : \"\";\n\n    let sessionData;\n    try {\n        const getParams = {\n            TableName: \"DungeonMasterSessions\",\n            Key: { sessionId: sessionId },\n        };\n        const { Item } = await ddbDocClient.send(new GetCommand(getParams));\n        sessionData = Item || { \n            sessionId: sessionId, \n            playerPosition: { map: \"Ba\u015flang\u0131\u00e7 \u015eehri\", coordinates: \"A1\" }, \n            playerInventory: [], \n            conversationHistory: [] \n        };\n    } catch (error) {\n        console.error(\"DynamoDB'den oturum verisi al\u0131n\u0131rken hata:\", error);\n        \/\/ Hata durumunda varsay\u0131lan bir oturum verisi olu\u015ftur\n        sessionData = { \n            sessionId: sessionId, \n            playerPosition: { map: \"Ba\u015flang\u0131\u00e7 \u015eehri\", coordinates: \"A1\" }, \n            playerInventory: [], \n            conversationHistory: [] \n        };\n    }\n\n    \/\/ Ge\u00e7mi\u015f konu\u015fmay\u0131 ve mevcut durumu prompt'a ekle\n    const promptHistory = sessionData.conversationHistory.slice(-5).join(\"\\n\"); \/\/ Son 5 mesaj\n    const currentContext = <code>Mevcut Konum: ${sessionData.playerPosition.map}, ${sessionData.playerPosition.coordinates}. Envanter: ${sessionData.playerInventory.join(\", \")}.<\/code>;\n\n    const bedrockPrompt = <code>Sen bir fantastik RYO&#039;da tecr\u00fcbeli ve s\u00fcr\u00fckleyici bir Zindan Ustas\u0131&#039;s\u0131n.\n        Oyunun tonu karanl\u0131k fantezi, biraz mizah ve bolca tehlike i\u00e7eriyor.\n        ${currentContext}\n        Ge\u00e7mi\u015f konu\u015fma:\n        ${promptHistory}\n        Oyuncu diyor ki: \"${playerInput}\"\n\n        Bu eyleme g\u00f6re, bir sonraki sahneyi, kar\u015f\u0131la\u015f\u0131lan zorluklar\u0131 veya yeni bir NPC&#039;yi detayl\u0131 ve s\u00fcr\u00fckleyici bir \u015fekilde anlat. Yeni bir g\u00f6rev ba\u015flatabilir veya mevcut bir g\u00f6revi g\u00fcncelleyebilirsin. Yan\u0131t\u0131n 200 kelimeyi ge\u00e7mesin. Hikayeyi devam ettir.<\/code>;\n\n    let dmResponse = \"\u00dczg\u00fcn\u00fcm, \u015fu an yan\u0131t veremiyorum.\";\n    try {\n        const invokeParams = {\n            modelId: \"anthropic.claude-3-sonnet-20240229-v1:0\", \/\/ Veya Amazon Titan gibi ba\u015fka bir model\n            contentType: \"application\/json\",\n            accept: \"application\/json\",\n            body: JSON.stringify({\n                prompt: <code>Human: ${bedrockPrompt}\\n\\nAssistant:<\/code>,\n                max_tokens_to_sample: 500,\n                temperature: 0.7,\n                top_p: 0.9,\n            }),\n        };\n\n        const command = new InvokeModelCommand(invokeParams);\n        const apiResponse = await bedrockClient.send(command);\n        const responseBody = JSON.parse(Buffer.from(apiResponse.body).toString(\"utf8\"));\n        dmResponse = responseBody.completion; \/\/ Claude i\u00e7in\n        \/\/ Titan i\u00e7in: dmResponse = responseBody.results[0].outputText;\n\n        \/\/ Konu\u015fma ge\u00e7mi\u015fini g\u00fcncelle\n        sessionData.conversationHistory.push(<code>Oyuncu: ${playerInput}<\/code>);\n        sessionData.conversationHistory.push(<code>DM: ${dmResponse}<\/code>);\n\n        \/\/ Oturum verisini g\u00fcncelle\n        const putParams = {\n            TableName: \"DungeonMasterSessions\",\n            Item: sessionData,\n        };\n        await ddbDocClient.send(new PutCommand(putParams));\n\n    } catch (error) {\n        console.error(\"Bedrock veya DynamoDB i\u015flemi s\u0131ras\u0131nda hata:\", error);\n        \/\/ Hata durumunda varsay\u0131lan bir yan\u0131t\n        dmResponse = \"Zindan Ustas\u0131 zihinsel bir blokaj ya\u015fad\u0131. L\u00fctfen tekrar deneyin.\";\n    }\n\n    const response = {\n        statusCode: 200,\n        headers: {\n            \"Content-Type\": \"application\/json\",\n            \"Access-Control-Allow-Origin\": \"*\",\n        },\n        body: JSON.stringify({ message: dmResponse }),\n    };\n    return response;\n};\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7as\u0131, oyuncu girdisini al\u0131yor, DynamoDB'den oturum verisini \u00e7ekiyor, bu bilgileri bir prompt olu\u015fturmak i\u00e7in kullan\u0131yor, Bedrock'u \u00e7a\u011f\u0131r\u0131yor ve al\u0131nan yan\u0131t\u0131 tekrar DynamoDB'ye kaydediyor. Bu d\u00f6ng\u00fc, DM Agent'\u0131m\u0131z\u0131n her etkile\u015fimde dinamik ve ba\u011flamsal olarak tutarl\u0131 bir hikaye sunmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Unutulmamal\u0131d\u0131r ki, bu kod sadece bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Karma\u015f\u0131k oyun mekanikleri (d\u00f6v\u00fc\u015f, envanter y\u00f6netimi, NPC etkile\u015fimleri) ve daha sofistike durum g\u00fcncellemeleri, Lambda fonksiyonunuzda ek mant\u0131k gerektirecektir. Ancak temel yap\u0131, bu \u015fekildedir.<\/p>\n<h2>Geli\u015fmi\u015f \u00d6zellikler ve Performans \u0130yile\u015ftirmeleri Nelerdir?<\/h2>\n<p>Sunucusuz Zindan Ustas\u0131 Agent'\u0131m\u0131z\u0131 olu\u015ftururken temel i\u015flevselli\u011fi sa\u011flad\u0131k, ancak ger\u00e7ek d\u00fcnya uygulamalar\u0131 i\u00e7in performans\u0131 art\u0131rmak, maliyetleri optimize etmek ve sistemi daha sa\u011flam hale getirmek \u00f6nemlidir. \u0130\u015fte bu hedeflere ula\u015fmak i\u00e7in uygulayabilece\u011fimiz baz\u0131 geli\u015fmi\u015f teknikler ve ipu\u00e7lar\u0131:<\/p>\n<p><strong>1. \u00d6nbellekleme (Caching):<\/strong><\/p>\n<p>Her istekte DynamoDB'den ayn\u0131 statik veriyi tekrar tekrar \u00e7ekmek veya Bedrock'tan benzer yan\u0131tlar\u0131 istemek gereksiz maliyet ve gecikme yaratabilir. Bu durumu \u00f6nlemek i\u00e7in \u00f6nbellekleme stratejileri uygulayabiliriz:<\/p>\n<ul>\n<li><strong>Lambda Katmanlar\u0131 (Layers) ile Statik Veri:<\/strong> S\u0131k de\u011fi\u015fmeyen oyun kurallar\u0131, harita metinleri veya NPC arketipleri gibi b\u00fcy\u00fck metin dosyalar\u0131n\u0131 Lambda katmanlar\u0131na dahil edebiliriz. Bu, Lambda fonksiyonunun her \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda bunlar\u0131 diskten okumas\u0131n\u0131 h\u0131zland\u0131r\u0131r.<\/li>\n<li><strong>Amazon ElastiCache (Redis\/Memcached):<\/strong> Oyuncu oturum durumu gibi s\u0131k eri\u015filen dinamik verileri, DynamoDB'ye gitmeden \u00f6nce ElastiCache'te \u00f6nbellekleyebiliriz. Bu, DynamoDB okuma kapasitesi birimlerini (RCU) d\u00fc\u015f\u00fcrerek maliyeti azalt\u0131r ve yan\u0131t s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.<\/li>\n<li><strong>API Gateway Caching:<\/strong> API Gateway, belirli istekler i\u00e7in yan\u0131tlar\u0131 kendi b\u00fcnyesinde \u00f6nbelle\u011fe alabilir. E\u011fer DM Agent'\u0131n baz\u0131 yan\u0131tlar\u0131 (\u00f6rne\u011fin, \"Oyuncuya ho\u015f geldiniz\" mesaj\u0131 gibi genel mesajlar) s\u0131k s\u0131k ayn\u0131 kal\u0131yorsa, bu \u00f6zellik kullan\u0131labilir.<\/li>\n<\/ul>\n<p><strong>2. Hata Y\u00f6netimi ve G\u00f6zlemlenebilirlik:<\/strong><\/p>\n<p>Canl\u0131 bir sistemde hatalar ka\u00e7\u0131n\u0131lmazd\u0131r. Hatalar\u0131 h\u0131zl\u0131ca tespit edip gidermek i\u00e7in g\u00fc\u00e7l\u00fc g\u00f6zlemlenebilirlik ara\u00e7lar\u0131na ihtiyac\u0131m\u0131z var:<\/p>\n<ul>\n<li><strong>Amazon CloudWatch:<\/strong> Lambda fonksiyonlar\u0131m\u0131z\u0131n loglar\u0131n\u0131, metriklerini (\u00e7a\u011fr\u0131 say\u0131s\u0131, hata oran\u0131, gecikme) ve alarmlar\u0131n\u0131 izlemek i\u00e7in CloudWatch'u etkin bir \u015fekilde kullanmal\u0131y\u0131z. Anormal davran\u0131\u015flar\u0131 veya y\u00fcksek hata oranlar\u0131n\u0131 bildiren alarmlar kurmak, proaktif m\u00fcdahale sa\u011flar.<\/li>\n<li><strong>AWS X-Ray:<\/strong> \u0130steklerin sistemimizdeki farkl\u0131 servisler aras\u0131nda nas\u0131l hareket etti\u011fini g\u00f6rselle\u015ftirmek i\u00e7in X-Ray kullanmal\u0131y\u0131z. Bu, performans darbo\u011fazlar\u0131n\u0131 veya hatal\u0131 entegrasyonlar\u0131 tespit etmede \u00e7ok yard\u0131mc\u0131 olur. X-Ray izlemeyi Lambda ve API Gateway i\u00e7in etkinle\u015ftirmek, u\u00e7tan uca g\u00f6r\u00fcn\u00fcrl\u00fck sa\u011flar.<\/li>\n<li><strong>Dead Letter Queues (DLQ):<\/strong> Lambda fonksiyonlar\u0131 i\u00e7in bir DLQ (\u00f6rne\u011fin bir SQS kuyru\u011fu) yap\u0131land\u0131rabiliriz. Bir fonksiyon i\u015flenemeyen bir hatayla kar\u015f\u0131la\u015ft\u0131\u011f\u0131nda, istek otomatik olarak bu kuyru\u011fa g\u00f6nderilir ve daha sonra analiz veya tekrar i\u015fleme i\u00e7in kullan\u0131labilir.<\/li>\n<\/ul>\n<p><strong>3. Maliyet Optimizasyonu:<\/strong><\/p>\n<p>Sunucusuz mimarinin en b\u00fcy\u00fck avantajlar\u0131ndan biri maliyet etkinli\u011fi olsa da, b\u00fcy\u00fck \u00f6l\u00e7ekte dikkatli olunmazsa maliyetler y\u00fckselebilir:<\/p>\n<ul>\n<li><strong>Lambda Bellek ve CPU Ayarlar\u0131:<\/strong> Lambda fonksiyonlar\u0131n\u0131za gere\u011finden fazla bellek ay\u0131rmay\u0131n. Daha fazla bellek, daha fazla CPU anlam\u0131na gelir ve bu da maliyeti art\u0131r\u0131r. Fonksiyonlar\u0131n\u0131z\u0131n performans\u0131n\u0131 test edin ve en uygun bellek ayar\u0131n\u0131 bulun.<\/li>\n<li><strong>Bedrock Token Kullan\u0131m\u0131:<\/strong> Bedrock gibi \u00fcretken yapay zeka hizmetleri token bazl\u0131 \u00fccretlendirilir. Prompt'lar\u0131n\u0131z\u0131 ve yan\u0131tlar\u0131n\u0131z\u0131 m\u00fcmk\u00fcn oldu\u011funca k\u0131sa ve \u00f6z tutmaya \u00e7al\u0131\u015f\u0131n. Gereksiz detaylar\u0131 veya yinelenen bilgileri g\u00f6ndermekten ka\u00e7\u0131n\u0131n.<\/li>\n<li><strong>DynamoDB Kapasite Modu:<\/strong> DynamoDB i\u00e7in \"On-demand\" kapasite modunu kullanmak, \u00f6zellikle \u00f6ng\u00f6r\u00fclemeyen veya dalgal\u0131 trafik i\u00e7in maliyetleri optimize edebilir. \u00d6ng\u00f6r\u00fclebilir trafik i\u00e7in \"Provisioned\" modu daha uygun olabilir.<\/li>\n<\/ul>\n<div class=\"uzman-ipucu\">\n  Uzman \u0130pucu: Bedrock prompt'lar\u0131n\u0131 optimize etmek i\u00e7in, modelden k\u0131sa ve net yan\u0131tlar istemeyi deneyin. \u00d6rne\u011fin, \"Tek bir c\u00fcmlede \u00f6zetle\" veya \"Sadece isimleri listele\" gibi talimatlar, token kullan\u0131m\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azaltabilir.\n<\/div>\n<p><strong>4. Mobil Uyumlu \u0130stemci Uygulamas\u0131 \u0130\u00e7in HTML\/CSS Notlar\u0131:<\/strong><\/p>\n<p>DM Agent'\u0131m\u0131z\u0131n kendisi do\u011frudan bir kullan\u0131c\u0131 aray\u00fcz\u00fc sunmasa da, oyuncular\u0131n onunla etkile\u015fimde bulunaca\u011f\u0131 bir istemci uygulamas\u0131 (genellikle bir web uygulamas\u0131) mobil uyumlu olmal\u0131d\u0131r. \u0130\u015fte bir web istemcisi i\u00e7in temel bir mobil uyumlu HTML ve CSS (media query) \u00f6rne\u011fi:<\/p>\n<pre><code>\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Sunucusuz DM Agent Aray\u00fcz\u00fc<\/title>\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 20px;\n            background-color: #1a1a1a;\n            color: #f0f0f0;\n        }\n        .container {\n            max-width: 800px;\n            margin: 0 auto;\n            background-color: #2a2a2a;\n            padding: 20px;\n            border-radius: 8px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);\n        }\n        #chat-area {\n            height: 400px;\n            overflow-y: scroll;\n            border: 1px solid #444;\n            padding: 10px;\n            margin-bottom: 20px;\n            border-radius: 4px;\n            background-color: #333;\n        }\n        .message {\n            margin-bottom: 10px;\n            padding: 8px;\n            border-radius: 4px;\n        }\n        .player-message {\n            background-color: #007bff;\n            color: white;\n            text-align: right;\n            margin-left: 20%;\n        }\n        .dm-message {\n            background-color: #6c757d;\n            color: white;\n            text-align: left;\n            margin-right: 20%;\n        }\n        #input-area {\n            display: flex;\n            gap: 10px;\n        }\n        #user-input {\n            flex-grow: 1;\n            padding: 10px;\n            border-radius: 4px;\n            border: 1px solid #444;\n            background-color: #444;\n            color: #f0f0f0;\n        }\n        #send-button {\n            padding: 10px 20px;\n            background-color: #28a745;\n            color: white;\n            border: none;\n            border-radius: 4px;\n            cursor: pointer;\n        }\n        #send-button:hover {\n            background-color: #218838;\n        }\n\n        \/* Mobil uyumluluk i\u00e7in Media Query *\/\n        @media (max-width: 768px) {\n            body {\n                padding: 10px;\n            }\n            .container {\n                margin: 0;\n                border-radius: 0;\n                box-shadow: none;\n            }\n            #chat-area {\n                height: 300px;\n            }\n            .player-message, .dm-message {\n                margin-left: 0;\n                margin-right: 0;\n                width: 100%; \/* Tam geni\u015flik *\/\n            }\n            #input-area {\n                flex-direction: column; \/* Mobil cihazlarda alt alta s\u0131rala *\/\n            }\n            #user-input {\n                width: 100%;\n            }\n            #send-button {\n                width: 100%;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <h2>Sunucusuz Zindan Ustas\u0131<\/h2>\n        <div id=\"chat-area\">\n            <div class=\"message dm-message\">Merhaba macerac\u0131! Yola \u00e7\u0131kmaya haz\u0131r m\u0131s\u0131n?<\/div>\n        <\/div>\n        <div id=\"input-area\">\n            <input type=\"text\" id=\"user-input\" placeholder=\"Komutunuzu girin...\">\n            <button id=\"send-button\">G\u00f6nder<\/button>\n        <\/div>\n    <\/div>\n    <script>\n        \/\/ Bu k\u0131s\u0131m, API Gateway'nize AJAX iste\u011fi g\u00f6nderecek JavaScript kodunu i\u00e7erecektir.\n        \/\/ \u00d6rne\u011fin:\n        \/\/ document.getElementById('send-button').addEventListener('click', async () => {\n        \/\/     const input = document.getElementById('user-input').value;\n        \/\/     const response = await fetch('YOUR_API_GATEWAY_URL', {\n        \/\/         method: 'POST',\n        \/\/         headers: { 'Content-Type': 'application\/json' },\n        \/\/         body: JSON.stringify({ message: input })\n        \/\/     });\n        \/\/     const data = await response.json();\n        \/\/     \/\/ Gelen mesaj\u0131 chat-area'ya ekle\n        \/\/ });\n    <\/script>\n<\/body>\n<\/html>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu CSS medya sorgusu, taray\u0131c\u0131 geni\u015fli\u011fi 768 pikselin alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde belirli stilleri uygular. \u00d6rne\u011fin, mesaj balonlar\u0131 tam geni\u015fli\u011fe yay\u0131l\u0131r ve giri\u015f alan\u0131 alt alta hizalan\u0131r. Bu, mobil cihazlarda daha iyi bir kullan\u0131c\u0131 deneyimi sa\u011flar.<\/p>\n<p>Bu geli\u015fmi\u015f \u00f6zellikler ve optimizasyon teknikleri, DM Agent'\u0131n\u0131z\u0131n sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda verimli, dayan\u0131kl\u0131 ve maliyet etkin olmas\u0131n\u0131 sa\u011flar. Sunucusuz mimarinin sundu\u011fu esneklik ve ara\u00e7 seti sayesinde, bu iyile\u015ftirmeleri kademeli olarak uygulayabilir ve sisteminizi s\u00fcrekli olarak geli\u015ftirebilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, AWS \u00fczerinde sunucusuz bir Zindan Ustas\u0131 Agent olu\u015fturman\u0131n heyecan verici d\u00fcnyas\u0131na dald\u0131k. Geleneksel oyun deneyimlerini d\u00f6n\u00fc\u015ft\u00fcrme potansiyeli ta\u015f\u0131yan bu yakla\u015f\u0131m, oyunculara ki\u015fiselle\u015ftirilmi\u015f, dinamik ve s\u00fcr\u00fckleyici maceralar sunarken, geli\u015ftiricilere de maliyet etkinli\u011fi ve y\u00fcksek \u00f6l\u00e7eklenebilirlik avantajlar\u0131 sa\u011fl\u0131yor. AWS Lambda, API Gateway, DynamoDB ve Amazon Bedrock gibi g\u00fc\u00e7l\u00fc hizmetlerin birle\u015fimiyle, sadece hayal g\u00fcc\u00fcm\u00fczle s\u0131n\u0131rl\u0131, ak\u0131ll\u0131 ve adaptif oyun sistemleri in\u015fa edebilece\u011fimizi g\u00f6rd\u00fck.<\/p>\n<p>Ba\u015flang\u0131\u00e7taki mimari tasar\u0131m\u0131ndan, ad\u0131m ad\u0131m kurulum rehberine ve oyun mant\u0131\u011f\u0131n\u0131n derinlemesine incelenmesine kadar bir\u00e7ok konuyu ele ald\u0131k. \u00d6zellikle Amazon Bedrock'un \u00fcretken yapay zeka yetenekleriyle dinamik hikaye anlat\u0131m\u0131n\u0131n nas\u0131l m\u00fcmk\u00fcn oldu\u011funu ve Amazon DynamoDB'nin oturum durumunu nas\u0131l y\u00f6netti\u011fini detayland\u0131rd\u0131k. Son olarak, \u00f6nbellekleme, hata y\u00f6netimi ve maliyet optimizasyonu gibi geli\u015fmi\u015f konulara de\u011finerek, sisteminizi daha sa\u011flam ve verimli hale getirme yollar\u0131n\u0131 inceledik. Mobil uyumlu istemci uygulamalar\u0131 i\u00e7in HTML\/CSS ipu\u00e7lar\u0131n\u0131 da unutmad\u0131k.<\/p>\n<p>Sunucusuz DM Agent'lar, sadece oyun sekt\u00f6r\u00fcnde de\u011fil, e\u011fitim, sim\u00fclasyon ve etkile\u015fimli hikaye anlat\u0131m\u0131 gibi bir\u00e7ok alanda da devrim yaratma potansiyeline sahiptir. Gelecekte, daha geli\u015fmi\u015f yapay zeka modelleri ve art\u0131r\u0131lm\u0131\u015f ger\u00e7eklik (AR) entegrasyonlar\u0131 ile bu agent'lar \u00e7ok daha zengin ve ger\u00e7ek\u00e7i deneyimler sunabilir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p><strong>1. Sunucusuz bir DM Agent geli\u015ftirmenin ba\u015fl\u0131ca avantajlar\u0131 nelerdir?<\/strong><\/p>\n<p>Sunucusuz DM Agent'lar, maliyet etkinli\u011fi (yaln\u0131zca kullan\u0131lan kaynaklar i\u00e7in \u00f6deme), otomatik \u00f6l\u00e7eklenebilirlik (ani trafik art\u0131\u015flar\u0131na kolayca uyum), d\u00fc\u015f\u00fck y\u00f6netim y\u00fck\u00fc (altyap\u0131 y\u00f6netimi yok) ve y\u00fcksek dayan\u0131kl\u0131l\u0131k sunar. Bu avantajlar, \u00f6zellikle ba\u011f\u0131ms\u0131z geli\u015ftiriciler ve startup'lar i\u00e7in b\u00fcy\u00fck bir fark yarat\u0131r.<\/p>\n<p><strong>2. Amazon Bedrock d\u0131\u015f\u0131ndaki \u00fcretken yapay zeka modellerini kullanabilir miyim?<\/strong><\/p>\n<p>Evet, teorik olarak kullanabilirsiniz. Ancak Bedrock, AWS ekosistemiyle derinlemesine entegre oldu\u011fu ve kullan\u0131m\u0131 kolay bir aray\u00fcz sundu\u011fu i\u00e7in tercih edilmektedir. Farkl\u0131 bir modeli kullanmak isterseniz, o modelin API'sine do\u011frudan HTTP istekleri g\u00f6ndermeniz veya o modelin AWS d\u0131\u015f\u0131 bir entegrasyonu varsa onu kullanman\u0131z gerekebilir. Bu durum, mimarinizin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131rabilir.<\/p>\n<p><strong>3. Sunucusuz DM Agent'\u0131m\u0131n maliyeti ne kadar olur?<\/strong><\/p>\n<p>Maliyet, b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kullan\u0131m miktar\u0131na (Lambda \u00e7a\u011fr\u0131lar\u0131, DynamoDB okuma\/yazmalar\u0131, Bedrock token kullan\u0131m\u0131) ba\u011fl\u0131d\u0131r. AWS'nin \u00fccretsiz kullan\u0131m katman\u0131 (Free Tier) ba\u015flang\u0131\u00e7 i\u00e7in olduk\u00e7a c\u00f6mert olsa da, yo\u011fun kullan\u0131mda maliyetler olu\u015facakt\u0131r. Genellikle, sunucusuz mimari geleneksel sunuculara g\u00f6re daha maliyet etkindir \u00e7\u00fcnk\u00fc bo\u015fta \u00e7al\u0131\u015fan sunucu kaynaklar\u0131 i\u00e7in \u00f6deme yapmazs\u0131n\u0131z. Maliyetleri takip etmek i\u00e7in AWS Cost Explorer'\u0131 kullanman\u0131z \u00f6nerilir.<\/p>\n<p><strong>4. Oyuncu g\u00fcvenli\u011fi ve veri gizlili\u011fi nas\u0131l sa\u011flan\u0131r?<\/strong><\/p>\n<p>AWS, g\u00fcvenlik i\u00e7in bir\u00e7ok yerle\u015fik ara\u00e7 sunar. API Gateway \u00fczerinden kimlik do\u011frulama (IAM, Cognito, JWT) ve yetkilendirme kullanarak eri\u015fimi k\u0131s\u0131tlayabilirsiniz. DynamoDB'deki hassas verileri \u015fifrelemek ve Lambda fonksiyonlar\u0131n\u0131za en az ayr\u0131cal\u0131k ilkesiyle IAM rolleri atamak \u00f6nemlidir. Ayr\u0131ca, t\u00fcm veri ak\u0131\u015f\u0131nda \u015fifreleme (HTTPS) kullanmak temel bir g\u00fcvenlik \u00f6nlemidir. Kullan\u0131c\u0131 verilerinin i\u015flenmesi s\u0131ras\u0131nda GDPR veya KVKK gibi yasal d\u00fczenlemelere uymak da \u00f6nemlidir.<\/p>\n<p><strong>5. Bu mimariyle ne t\u00fcr oyunlar geli\u015ftirilebilir?<\/strong><\/p>\n<p>Bu mimari, \u00f6zellikle metin tabanl\u0131 veya sesli etkile\u015fimli rol yapma oyunlar\u0131, macera oyunlar\u0131, bulmaca oyunlar\u0131, sanal hikaye anlat\u0131m\u0131 deneyimleri ve dinamik NPC diyaloglar\u0131 gerektiren di\u011fer oyun t\u00fcrleri i\u00e7in idealdir. Y\u00fcksek grafikli, ger\u00e7ek zamanl\u0131 \u00e7ok oyunculu (MMO) oyunlar i\u00e7in do\u011frudan uygun olmasa da, bu t\u00fcr oyunlarda arka plandaki hikaye ve d\u00fcnya y\u00f6netimi bile\u015fenleri i\u00e7in kullan\u0131labilir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif&hellip;","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":[1406],"tags":[],"class_list":{"0":"post-30521","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","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>AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?<\/title>\n<meta name=\"description\" content=\"Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif bir Zindan Ustas\u0131 (DM) deneyimini AWS \u00fczerinde sunucusuz mimariyle nas\u0131l in\u015fa edebilirsiniz? Bu rehberde, bir &quot;Sunucusuz Zindan Ustas\u0131 Agent&quot; geli\u015ftirmenin ad\u0131m ad\u0131m t\u00fcm s\u00fcre\u00e7lerini ke\u015ffedece\u011fiz.\" \/>\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\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?\" \/>\n<meta property=\"og:description\" content=\"Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif bir Zindan Ustas\u0131 (DM) deneyimini AWS \u00fczerinde sunucusuz mimariyle nas\u0131l in\u015fa edebilirsiniz? Bu rehberde, bir &quot;Sunucusuz Zindan Ustas\u0131 Agent&quot; geli\u015ftirmenin ad\u0131m ad\u0131m t\u00fcm s\u00fcre\u00e7lerini ke\u015ffedece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-28T19:02:21+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?\",\"datePublished\":\"2025-09-28T19:02:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/\"},\"wordCount\":4244,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"AWS\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/\",\"name\":\"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-28T19:02:21+00:00\",\"description\":\"Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif bir Zindan Ustas\u0131 (DM) deneyimini AWS \u00fczerinde sunucusuz mimariyle nas\u0131l in\u015fa edebilirsiniz? Bu rehberde, bir \\\"Sunucusuz Zindan Ustas\u0131 Agent\\\" geli\u015ftirmenin ad\u0131m ad\u0131m t\u00fcm s\u00fcre\u00e7lerini ke\u015ffedece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?\"}]},{\"@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":"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?","description":"Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif bir Zindan Ustas\u0131 (DM) deneyimini AWS \u00fczerinde sunucusuz mimariyle nas\u0131l in\u015fa edebilirsiniz? Bu rehberde, bir \"Sunucusuz Zindan Ustas\u0131 Agent\" geli\u015ftirmenin ad\u0131m ad\u0131m t\u00fcm s\u00fcre\u00e7lerini ke\u015ffedece\u011fiz.","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\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/","og_locale":"tr_TR","og_type":"article","og_title":"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?","og_description":"Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif bir Zindan Ustas\u0131 (DM) deneyimini AWS \u00fczerinde sunucusuz mimariyle nas\u0131l in\u015fa edebilirsiniz? Bu rehberde, bir \"Sunucusuz Zindan Ustas\u0131 Agent\" geli\u015ftirmenin ad\u0131m ad\u0131m t\u00fcm s\u00fcre\u00e7lerini ke\u015ffedece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-28T19:02:21+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?","datePublished":"2025-09-28T19:02:21+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/"},"wordCount":4244,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["AWS"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/","url":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/","name":"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-28T19:02:21+00:00","description":"Oyun d\u00fcnyas\u0131n\u0131n gelece\u011fi, yapay zeka ve sunucusuz teknolojilerle \u015fekilleniyor. Peki, oyunculara e\u015fsiz bir macera sunan, dinamik ve interaktif bir Zindan Ustas\u0131 (DM) deneyimini AWS \u00fczerinde sunucusuz mimariyle nas\u0131l in\u015fa edebilirsiniz? Bu rehberde, bir \"Sunucusuz Zindan Ustas\u0131 Agent\" geli\u015ftirmenin ad\u0131m ad\u0131m t\u00fcm s\u00fcre\u00e7lerini ke\u015ffedece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ile-sunucusuz-zindan-ustasi-agent-nasil-olusturulur\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AWS ile Sunucusuz Zindan Ustas\u0131 Agent Nas\u0131l Olu\u015fturulur?"}]},{"@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\/30521","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=30521"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30521\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}