﻿
{"id":25935,"date":"2022-12-08T23:24:58","date_gmt":"2022-12-08T23:24:58","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=25935"},"modified":"2022-12-08T23:24:58","modified_gmt":"2022-12-08T23:24:58","slug":"asp-net-coreda-aws-dynamodb-ile-basit-crud-islemleri","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-coreda-aws-dynamodb-ile-basit-crud-islemleri\/","title":{"rendered":"Asp.NET Core&#8217;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Asp.NET Core Web API mimarisi ile AWS <em>DynamoDB<\/em>&#8216;de basit d\u00fczeyde CRUD i\u015flemlerinin nas\u0131l yap\u0131laca\u011f\u0131na dair bir incelemede bulunuyor olaca\u011f\u0131z. O halde vakit kaybetmeksizin buyrun ba\u015flayal\u0131m&#8230;<\/p>\n<h4>AWS DynamoDB Nedir?<\/h4>\n<p>AWS DynamoDB, Amazon Web Services taraf\u0131ndan sunulan, highly available olan NoSQL tabanl\u0131 bir veritaban\u0131 hizmetidir. AWS&#8217;nin <em>Serverless Application Model<\/em>&#8216;i i\u00e7in olduk\u00e7a kullan\u0131\u015fl\u0131 bir yap\u0131ya sahip olan DynamoDB otomatik olarak \u00f6l\u00e7eklendirilebildi\u011fi(auto-scalable) i\u00e7in saniyede milyonlarca iste\u011fi i\u015fleyebilecek ve TB&#8217;larca veriyi depolayabilecek bir kapasiteye sahiptir. Ayr\u0131ca veri sorgulama s\u00fcre\u00e7lerinde gecikme pay\u0131 \u015fa\u015f\u0131rt\u0131c\u0131 derecede olduk\u00e7a k\u00fc\u00e7\u00fckt\u00fcr. T\u00fcm bunlar\u0131n yan\u0131nda g\u00fcvenlik i\u00e7in, AWS kaynaklar\u0131na eri\u015fimi g\u00fcvenli bir \u015fekilde kontrol etmemize yard\u0131mc\u0131 olan <em>IAM(Identity and Access Management)<\/em> servisi ile di\u011fer AWS servislerinde oldu\u011fu gibi do\u011fal entegrasyona sahiptir.<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-300x129.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"300\" height=\"129\" class=\"alignleft size-medium wp-image-25945\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-300x129.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri.png 435w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Amazon, DynamoDB \u00fczerinde ayl\u0131k olarak 25 GB&#8217;l\u0131k \u00fccretsiz bir alan sa\u011flamaktad\u0131r. Ayr\u0131ca 200 milyona kadar read\/write i\u015flemlerine de izin vermektedir. Bu, DynamoDB&#8217;yi \u00f6\u011frenmek maksatl\u0131 tatbik etmek ve hatta k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli yaz\u0131l\u0131mlarda da istifade edebilmek i\u00e7in olduk\u00e7a yeterli bir imkand\u0131r diye d\u00fc\u015f\u00fcn\u00fcyorum. <\/p>\n<blockquote><p><em>AWS platformuna <a href=\"https:\/\/aws.amazon.com\/tr\/free\" rel=\"noopener\" target=\"_blank\">aws.amazon.com\/tr\/free<\/a> adresinden \u00fccretsiz \u00fcye olabilirsiniz.<\/em><\/p><\/blockquote>\n<h5>DynamoDB Teminolojisi<\/h5>\n<ul>\n<li><strong><em>Table<\/em><\/strong><br \/>\nDi\u011fer veritaban\u0131 sistemlerine benzer \u015fekilde DynamoDB&#8217;de verilerini table&#8217;lar da depolamaktad\u0131r. Bir ba\u015fka deyi\u015fle table&#8217;lar veri collection&#8217;lar\u0131 olarak kullan\u0131lmaktad\u0131rlar.<\/li>\n<li><strong><em>Items<\/em><\/strong><br \/>\nTable&#8217;lar da ki her bir veri item olarak nitelendirilmektedir. Di\u011fer ili\u015fkisel veritabanlar\u0131ndaki sat\u0131rlara yahut NoSQL yap\u0131lanmalardaki document&#8217;lara kar\u015f\u0131l\u0131k gelmektedir. Item&#8217;lar da depolama s\u0131n\u0131r\u0131 s\u00f6z konusu de\u011fildir.\n<\/li>\n<li><strong><em>Attributes<\/em><\/strong><br \/>\nHer item, bir veya birden fazla attribute&#8217;tan meydana gelmektedir. Attribute&#8217;lar temel veri \u00f6\u011feleridir. \u0130li\u015fkisel veritabanlar\u0131ndaki kolonlar\u0131n, normal NoSQL yap\u0131lanmas\u0131ndaki field&#8217;lar\u0131n muadilleridir.\n<\/li>\n<\/ul>\n<h4>Ba\u015flarken<\/h4>\n<p>Art\u0131k DynamoDB&#8217;yi incelemek i\u00e7in yava\u015ftan kazmay\u0131 vurabiliriz. Tabi bunun i\u00e7in \u00f6ncelikle makale s\u00fcresince yapaca\u011f\u0131m\u0131z i\u015flemleri ba\u015fta \u00f6nbilgi olmas\u0131 maksad\u0131yla bildirmekte fayda g\u00f6rmekteyim. Bu i\u00e7eri\u011fimizde AWS CLI arac\u0131l\u0131\u011f\u0131yla belirli yap\u0131land\u0131rmalara dayal\u0131 DynamoDB veritaban\u0131 olu\u015fturacak ve bir entity \u00fczerinden temel CRUD operasyonlar\u0131n\u0131 y\u00fcr\u00fcterek, irdelememizi ger\u00e7ekle\u015ftiriyor olaca\u011f\u0131z. <\/p>\n<h4>AWS Console \u0130le DynamoDB&#8217;de Tablo Olu\u015fturma<\/h4>\n<p>Her \u015feyden \u00f6nce DynamoDB&#8217;de bir tablo olu\u015fturarak ba\u015flayal\u0131m. Bunun i\u00e7in console \u00fczerinden a\u015fa\u011f\u0131daki g\u00f6rseldeki gibi DynamoDB&#8217;yi arat\u0131n\u0131z ve ilgili servise t\u0131klayarak, gidiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-1.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"548\" height=\"263\" class=\"aligncenter size-full wp-image-25950\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-1.png 548w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-1-300x144.png 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/a>Devam\u0131nda ise a\u00e7\u0131lan sayfadan turuncu &#8216;Create Table&#8217; butonuna t\u0131klayarak tablo olu\u015fturma sayfas\u0131na gidiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-2.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"1264\" height=\"336\" class=\"aligncenter size-full wp-image-25951\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-2.png 1264w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-2-300x80.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-2-1024x272.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-2-768x204.png 768w\" sizes=\"auto, (max-width: 1264px) 100vw, 1264px\" \/><\/a>Son olarak a\u00e7\u0131lan sayfada olu\u015fturulacak tablo ile ilgili bilgileri giriniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-3.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"800\" height=\"619\" class=\"aligncenter size-full wp-image-25954\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-3.png 800w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-3-300x232.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-3-768x594.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a>Burada dikkat ederseniz tabloya \u00f6rnek maksatl\u0131 &#8217;employees&#8217;, primary key kolonuna ise &#8216;id&#8217; isimlerini vermi\u015f bulunuyoruz. &#8216;id&#8217; kolonunun, say\u0131sal olup olmayaca\u011f\u0131n\u0131 kendinize g\u00f6re \u00f6zelle\u015ftirebilir ve duruma g\u00f6re belirleyebilirsiniz. \u015eimdilik tabloyu olu\u015fturmak i\u00e7in bu temel ayarlar k\u00e2fidir. <\/p>\n<p>Ekstradan bir i\u015fleme gerek kalmaks\u0131z\u0131n sayfan\u0131n en alt\u0131na geliniz ve &#8216;Create Table&#8217; butonuna t\u0131klayarak, tabloyu \u00fcretiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-4.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"1827\" height=\"329\" class=\"aligncenter size-full wp-image-25955\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-4.png 1827w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-4-300x54.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-4-1024x184.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-4-768x138.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-4-1536x277.png 1536w\" sizes=\"auto, (max-width: 1827px) 100vw, 1827px\" \/><\/a><\/p>\n<h4>AWS IAM Arac\u0131l\u0131\u011f\u0131yla Kullan\u0131c\u0131 Olu\u015fturma ve Access Key Generate Etme<\/h4>\n<p>\u015eimdi DynamoDB&#8217;de olu\u015fturulan bu tabloyu ASP.NET Core uygulamalar\u0131nda nas\u0131l kullanabilece\u011fimizi incelemeye ba\u015flayal\u0131m. Tabi ilk olarak AWS DynamoDB&#8217;ye eri\u015fim i\u00e7in AWS IAM&#8217;de yetkilendirilmi\u015f bir kullan\u0131c\u0131 tan\u0131mlamas\u0131 yap\u0131lmas\u0131 gerekmektedir.<\/p>\n<blockquote><p><em style=\"color:green;\">IAM(Identity and Access Management), AWS kaynaklar\u0131na eri\u015fimi g\u00fcvenli bir \u015fekilde kontrol etmemize yard\u0131mc\u0131 olan bir servistir. A\u00e7\u0131lan oturumlar\u0131, kaynaklar\u0131 kullanmak i\u00e7in yetkilendirilen kullan\u0131c\u0131lar\u0131 vs. denetlememizi sa\u011flamaktad\u0131r.<\/em><\/p><\/blockquote>\n<p>Bunun i\u00e7in AWS Console \u00fczerinden <em>IAM<\/em> servisine gidiniz ve bir kullan\u0131c\u0131 olu\u015fturunuz. E\u011fer konuya dair pek bilginiz yoksa \u00f6nceden <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-aws-s3-ile-dosya-islemleri-gerceklestirme-upload-download-delete-files\/\" rel=\"noopener\" target=\"_blank\">AWS S3<\/a> konusunda klavyeye alm\u0131\u015f oldu\u011fum makaleden konuyla alakal\u0131 b\u00f6l\u00fcm\u00fc okuyarak detayl\u0131 bilgi edinebilirsiniz.<\/p>\n<p>Burada olu\u015fturulacak kullan\u0131c\u0131 i\u00e7in tek dikkat edilmesi gereken husus policy&#8217;sinin &#8216;DynamoDB&#8217; olacak \u015fekilde ayarlanmas\u0131d\u0131r.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-5.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"541\" height=\"238\" class=\"aligncenter size-full wp-image-25965\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-5.png 541w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-5-300x132.png 300w\" sizes=\"auto, (max-width: 541px) 100vw, 541px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-6.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"335\" height=\"116\" class=\"aligncenter size-full wp-image-25967\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-6.png 335w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-6-300x104.png 300w\" sizes=\"auto, (max-width: 335px) 100vw, 335px\" \/><\/a>Kullan\u0131c\u0131y\u0131 olu\u015fturduktan sonra men\u00fc \u00fczerinden tekrar &#8216;Users&#8217; sayfas\u0131na, oradan da ilgili kullan\u0131c\u0131ya t\u0131klay\u0131n\u0131z ve a\u00e7\u0131lan sayfada &#8216;Security credentials&#8217; sekmesine gelerek oradan da a\u015fa\u011f\u0131daki &#8216;Create access key&#8217; butonuna t\u0131klayarak DynamoDB&#8217;ye eri\u015fim i\u00e7in gerekli olan access key&#8217;i olu\u015fturup, kaydediniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri.gif\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"800\" height=\"314\" class=\"aligncenter size-full wp-image-25969\" \/><\/a>Edinilen bu access key ve secret key bilgilerine rahat ve g\u00fcvenilir eri\u015fim sergileyebilmek i\u00e7in AWS CLI ile local bilgisayar\u0131m\u0131za a\u015fa\u011f\u0131daki gibi depolayal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-7.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"635\" height=\"134\" class=\"aligncenter size-full wp-image-25971\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-7.png 635w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-7-300x63.png 300w\" sizes=\"auto, (max-width: 635px) 100vw, 635px\" \/><\/a>Dikkat ederseniz &#8216;dynamodb-profile&#8217; ismine kar\u015f\u0131l\u0131k credential bilgilerimiz AWS CLI arac\u0131l\u0131\u011f\u0131yla local&#8217;imize kaydedilmi\u015ftir. Ayr\u0131ca se\u00e7ilen region&#8217;\u0131n AWS b\u00f6lgenize uygun oldu\u011funa dikkat etmenizde fayda vard\u0131r. Aksi taktirde tabloyu farkl\u0131 bir b\u00f6lgede olu\u015fturduysan\u0131z muhtemel eri\u015fim s\u0131k\u0131nt\u0131s\u0131 ya\u015fayaca\u011f\u0131n\u0131zdan dolay\u0131 sa\u011fl\u0131kl\u0131 bir \u015fekilde kullanamayabilirsiniz.<\/p>\n<h4>Asp.NET Core Uygulamas\u0131yla DynamoDB&#8217;yi Kullanma<\/h4>\n<p>Yukar\u0131da yapt\u0131\u011f\u0131m\u0131z t\u00fcm \u00e7al\u0131\u015fmalar ve altyap\u0131lar neticesinde art\u0131k Asp.NET Core uygulamas\u0131 \u00fczerinden DynamoDB&#8217;yi nas\u0131l kullanabilece\u011fimizi teknik olarak incelemeye ge\u00e7ebiliriz. Bunun i\u00e7in bo\u015f bir Asp.NET Core Web API uygulamas\u0131 olu\u015fturunuz ve direkt uygulaman\u0131n &#8216;appsettings.json&#8217; dosyas\u0131nda biraz \u00f6nce edindi\u011fimiz ve AWS CLI ile local&#8217;e kaydetti\u011fimiz access key ve secret key bilgilerini a\u015fa\u011f\u0131daki gibi i\u015fleyiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;Logging&quot;: {\r\n    &quot;LogLevel&quot;: {\r\n      &quot;Default&quot;: &quot;Information&quot;,\r\n      &quot;Microsoft.AspNetCore&quot;: &quot;Warning&quot;\r\n    }\r\n  },\r\n  &quot;AllowedHosts&quot;: &quot;*&quot;,\r\n  &quot;AWS&quot;: {\r\n    &quot;Profile&quot;: &quot;dynamodb-profile&quot;,\r\n    &quot;Region&quot;: &quot;ap-south-1&quot;\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Ard\u0131ndan DynamoDB&#8217;ye ba\u011flanabilmek ve gerekli sorgulama s\u00fcrecini ba\u015flatabilmek i\u00e7in Nuget&#8217;ten <a href=\"https:\/\/www.nuget.org\/packages\/AWSSDK.DynamoDBv2\" rel=\"noopener\" target=\"_blank\">AWSSDK.DynamoDBv2<\/a> ve <a href=\"https:\/\/www.nuget.org\/packages\/AWSSDK.Extensions.NETCore.Setup\" rel=\"noopener\" target=\"_blank\">AWSSDK.Extensions.NETCore.Setup<\/a> k\u00fct\u00fcphanelerini uygulamaya y\u00fckleyiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-8.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-8.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"456\" height=\"117\" class=\"aligncenter size-full wp-image-25976\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-8.png 456w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-8-300x77.png 300w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/a>Bu i\u015flemlerden sonra art\u0131k olu\u015fturdu\u011fumuz &#8217;employees&#8217; tablosunda tutulacak verileri modelleyecek olan bir entity olu\u015fturunuz. Bu entity&#8217;nin yap\u0131s\u0131 ve mahiyeti i\u015fin ihtiyac\u0131na ve sizlerin taktirine kalm\u0131\u015ft\u0131r. Ben bu \u00f6rneklendirmede a\u015fa\u011f\u0131daki kadar\u0131yla yetiniyor olaca\u011f\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;DynamoDBTable(&quot;employees&quot;)]\r\n    public class Employee\r\n    {\r\n        &#x5B;DynamoDBHashKey(&quot;id&quot;)]\r\n        public int? Id { get; set; }\r\n\r\n        &#x5B;DynamoDBProperty(&quot;name&quot;)]\r\n        public string? Name { get; set; }\r\n\r\n        &#x5B;DynamoDBProperty(&quot;surname&quot;)]\r\n        public string? Surname { get; set; }\r\n\r\n        &#x5B;DynamoDBProperty(&quot;birth_date&quot;)]\r\n        public DateTime? BirthDate { get; set; }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer &#8216;Employee&#8217; isminde olu\u015fturdu\u011fumuz bu entity s\u0131n\u0131f\u0131n\u0131 DynamoDB&#8217;de ki &#8217;employees&#8217; tablosuyla <code>DynamoDBTable<\/code> attribute&#8217;u arac\u0131l\u0131\u011f\u0131yla e\u015flemekteyiz. Ayr\u0131ca primary key olacak olan &#8216;Id&#8217; property&#8217;sini ise <code>DynamoDBHashKey<\/code> attribute&#8217;u ile i\u015faretleyerek belirtmekteyiz.<\/p>\n<p>\u015eimdi ise yap\u0131lan bu konfig\u00fcrasyonlar\u0131 ve DynamoDB context&#8217;ini Asp.NET Core pipeline&#8217;\u0131na dahil ederek devam edelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nbuilder.Services.AddSwaggerGen();\r\n\r\nbuilder.Services.AddDefaultAWSOptions(builder.Configuration.GetAWSOptions());\r\nbuilder.Services.AddAWSService&lt;IAmazonDynamoDB&gt;();\r\nbuilder.Services.AddScoped&lt;IDynamoDBContext, DynamoDBContext&gt;();\r\n\r\nvar app = builder.Build();\r\n.\r\n.\r\n.\r\n<\/pre>\n<\/div>\n<p>Dikkat ederseniz <strong>6.<\/strong> sat\u0131rda <code>AddDefaultAWSOptions<\/code> metodu ile &#8216;appsettings.json&#8217; dosyas\u0131ndaki yap\u0131land\u0131rmalar\u0131, <strong>7.<\/strong> sat\u0131rda <code>IAmazonDynamoDB<\/code> interface&#8217;i ile Amazon DynamoDB servisini ve <strong>8.<\/strong> sat\u0131rda IoC&#8217;ye <code>IDynamoDBContext<\/code> aray\u00fcz\u00fcne kar\u015f\u0131l\u0131k <code>DynamoDBContext<\/code> nesnesini ekleyerek servisleri uygulamaya register ediyoruz.<\/p>\n<p>S\u0131rada ise DynamoDB ile CRUD i\u015flemlerini fiilen ger\u00e7ekle\u015ftirebilmek i\u00e7in controller olu\u015fturma vard\u0131r. Bunun i\u00e7in a\u015fa\u011f\u0131daki gibi &#8216;EmployeesController&#8217;\u0131 olu\u015fturunuz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;Route(&quot;api\/&#x5B;controller]&quot;)]\r\n    &#x5B;ApiController]\r\n    public class EmployeesController : ControllerBase\r\n    {\r\n        readonly IDynamoDBContext _dynamoDBContext;\r\n\r\n        public EmployeesController(IDynamoDBContext dynamoDBContext)\r\n        {\r\n            _dynamoDBContext = dynamoDBContext;\r\n        }\r\n\r\n        &#x5B;HttpGet]\r\n        public async Task&lt;IActionResult&gt; Get()\r\n        {\r\n            List&lt;Employee&gt; employees = await _dynamoDBContext.ScanAsync&lt;Employee&gt;(default).GetRemainingAsync();\r\n            return Ok(employees);\r\n        }\r\n\r\n        &#x5B;HttpGet(&quot;{id}&quot;)]\r\n        public async Task&lt;IActionResult&gt; Get(int id)\r\n        {\r\n            Employee employee = await _dynamoDBContext.LoadAsync&lt;Employee&gt;(id);\r\n            return Ok(employee);\r\n        }\r\n\r\n        &#x5B;HttpPost]\r\n        public async Task&lt;IActionResult&gt; Post(Employee employeeRequest)\r\n        {\r\n            Employee employee = await _dynamoDBContext.LoadAsync&lt;Employee&gt;(employeeRequest.Id);\r\n            if (employee != null)\r\n                return BadRequest($&quot;Employee with Id {employeeRequest.Id} already exists.&quot;);\r\n            await _dynamoDBContext.SaveAsync(employeeRequest);\r\n\r\n            return CreatedAtAction(nameof(EmployeesController.Post), new { employeeRequest.Id }, employeeRequest);\r\n        }\r\n\r\n        &#x5B;HttpPut]\r\n        public async Task&lt;IActionResult&gt; Put(Employee employeeRequest)\r\n        {\r\n            Employee employee = await _dynamoDBContext.LoadAsync&lt;Employee&gt;(employeeRequest.Id);\r\n            if (employee == null)\r\n                return NotFound();\r\n            await _dynamoDBContext.SaveAsync(employeeRequest);\r\n\r\n            return Ok();\r\n        }\r\n\r\n        &#x5B;HttpDelete(&quot;{id}&quot;)]\r\n        public async Task&lt;IActionResult&gt; Delete(int id)\r\n        {\r\n            Employee employee = await _dynamoDBContext.LoadAsync&lt;Employee&gt;(id);\r\n            if (employee == null)\r\n                return NotFound();\r\n            await _dynamoDBContext.DeleteAsync(employee);\r\n\r\n            return NoContent();\r\n        }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz &#8217;employees&#8217; tablosuna veri ekleyecek ve ard\u0131ndan eklenmi\u015f olan bu verileri topluca yahut id bazl\u0131 sorgulayabilecek, g\u00fcncelleyebilecek ve silebilecek t\u00fcm operasyonlar ger\u00e7ekle\u015ftirilmektedir.<\/p>\n<p>\u0130\u015fte bu kadar \ud83d\ude42 Basit d\u00fczeyde uygulaman\u0131n geli\u015ftirilmesi olduk\u00e7a kolay, \u00f6yle de\u011fil mi \ud83d\ude42 \u015eimdi gelin yapt\u0131\u011f\u0131m\u0131z bu \u00e7al\u0131\u015fmay\u0131 test edelim.<\/p>\n<h4>Test Edelim<\/h4>\n<p>Uygulamay\u0131 aya\u011fa kald\u0131rd\u0131\u011f\u0131m\u0131zda bizleri direkt Swagger kar\u015f\u0131layacakt\u0131r. Ekleme, silme ve g\u00fcncelleme i\u015flemlerini yapt\u0131\u011f\u0131n\u0131z taktirde (umuyorum ki \ud83d\ude42 )kusursuz \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6receksiniz. Burada t\u00fcm aksiyonlar\u0131 test ederek i\u00e7eri\u011fi \u015fi\u015firmektense, numune olmas\u0131 a\u00e7\u0131s\u0131ndan sadece &#8216;Get&#8217; i\u015flem neticesini incelemek ve DynamoDB&#8217;de de ilgili tabloyu fiziksel olarak g\u00f6zlemlemekle yetinmenin kafi olaca\u011f\u0131 kanaatindeyim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-9.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-9.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"1138\" height=\"947\" class=\"aligncenter size-full wp-image-25978\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-9.png 1138w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-9-300x250.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-9-1024x852.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-9-768x639.png 768w\" sizes=\"auto, (max-width: 1138px) 100vw, 1138px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-10.png\" alt=\"Asp.NET Core&#039;da AWS DynamoDB \u0130le Basit CRUD \u0130\u015flemleri\" width=\"750\" height=\"336\" class=\"aligncenter size-full wp-image-25979\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-10.png 750w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2022\/12\/Asp.NET-Coreda-AWS-DynamoDB-Ile-Basit-CRUD-Islemleri-10-300x134.png 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>Nihai olarak;<br \/>\nBu i\u00e7eri\u011fimizde, Asp.NET Core uygulamalar\u0131nda DynamoDB ile CRUD i\u015flemlerinin nas\u0131l ger\u00e7ekle\u015ftirilece\u011fini en temel d\u00fczeyde AWS CLI yap\u0131land\u0131rmalar\u0131n\u0131 ve <em>IAM(Identity and Access Management)<\/em> \u00e7al\u0131\u015fmalar\u0131n\u0131 da tekrardan tatbik ederek ele alm\u0131\u015f bulunuyoruz. Okuyarak e\u015flik etti\u011finiz i\u00e7in te\u015fekk\u00fcr ederim&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek uygulamay\u0131 a\u015fa\u011f\u0131daki github adresinden edinebilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/AWS.DynamoDB.Example\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/AWS.DynamoDB.Example<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde Asp.NET Core Web API mimarisi ile AWS DynamoDB&#8216;de basit d\u00fczeyde CRUD i\u015flemlerinin nas\u0131l yap\u0131laca\u011f\u0131na dair bir incelemede bulunuyor olaca\u011f\u0131z. O halde vakit kaybetmeksizin buyrun ba\u015flayal\u0131m&#8230; AWS DynamoDB Nedir? AWS DynamoDB, Amazon&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":25981,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4446,4730],"tags":[4731,4732,4734,4735,4733,4737,4738,4736],"class_list":["post-25935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-6","category-aws","tag-aws","tag-aws-dynamodb","tag-aws-iam","tag-awssdk-dynamodbv2","tag-dynamodb","tag-dynamodbhashkey","tag-dynamodbproperty","tag-dynamodbtable"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=25935"}],"version-history":[{"count":31,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25935\/revisions"}],"predecessor-version":[{"id":25982,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/25935\/revisions\/25982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/25981"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=25935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=25935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=25935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}