﻿
{"id":27475,"date":"2025-01-22T22:21:58","date_gmt":"2025-01-22T22:21:58","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=27475"},"modified":"2025-01-22T22:21:58","modified_gmt":"2025-01-22T22:21:58","slug":"nette-s3-eventleriyle-aws-lambdayi-tetikleyelim","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/nette-s3-eventleriyle-aws-lambdayi-tetikleyelim\/","title":{"rendered":".NET&#8217;te S3 Event&#8217;leriyle AWS Lambda&#8217;y\u0131 Tetikleyelim"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, AWS Lambda&#8217;y\u0131 S3 event&#8217;leri e\u015fli\u011finde nas\u0131l tetikleyebilece\u011fimizi inceliyor olaca\u011f\u0131z. Tabi bunu yaparken \u00f6nceden klavyeye alm\u0131\u015f oldu\u011fumuz <a href=\"https:\/\/www.gencayyildiz.com\/blog\/net-7-aws-lambda-ile-serverless-computing\/\" target=\"_blank\">AWS Lambda \u0130le Serverless Computing<\/a> ve <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-aws-s3-ile-dosya-islemleri-gerceklestirme-upload-download-delete-files\/\" target=\"_blank\">AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme<\/a> ba\u015fl\u0131kl\u0131 makalelerimizden de istifade edecek ve bunlardan event-driven yakla\u015f\u0131ma sahip bir sistem olu\u015fturmak i\u00e7in nas\u0131l entegrasyonun yap\u0131labilece\u011fini, ger\u00e7ek hayattan bir senaryo \u00fczerinden de\u011ferlendirmede bulunaca\u011f\u0131z. O halde buyurun ba\u015flayal\u0131m&#8230;<\/p>\n<h3>Senaryo<\/h3>\n<p>\u00d6ncelikle senaryomuzun tahayy\u00fcl\u00fcn\u00fc ger\u00e7ekle\u015ftirerek ba\u015flayal\u0131m&#8230; <\/p>\n<div style=\"color: #e83e8c;text-align:center;\">Diyelim ki, bir Asp.NET Core web uygulamam\u0131z var ve kullan\u0131c\u0131lar taraf\u0131ndan daha \u00f6nce hi\u00e7 olmad\u0131\u011f\u0131 kadar resim y\u00fckleme eylemi ger\u00e7ekle\u015ftirilmektedir&#8230; Arka planda ise y\u00fcklenen her resim i\u00e7in depolama maliyetini optimize edebilmek maksad\u0131yla belli boyutland\u0131rma i\u015flemleri yap\u0131lmakta ve bir yerden sonra bu i\u015flemler uygulama a\u00e7\u0131s\u0131ndan bir darbo\u011faz olu\u015fturdu\u011fu i\u00e7in, bu resim i\u015flemeyi verimli bir \u015fekilde y\u00f6netme zorunlulu\u011fu ortaya \u00e7\u0131kmaktad\u0131r&#8230; \u0130\u015fte tam bu noktada bu g\u00f6rev i\u00e7in otomatik olarak \u00f6l\u00e7eklenen bir Serverless Lambda(AWS Lambda) asenkron olarak devreye girmekte ve y\u00fcklenecek resimleri S3&#8217;e g\u00f6ndererek bir yandan da resim i\u015fleme sorumlulu\u011fuyla ilgilenmektedir. Tabi burada AWS Lambda i\u015flevleri, S3 event&#8217;leri taraf\u0131ndan trigger edilmekte ve b\u00f6ylece zahmetsizce resimler \u00fczerinde gerekli i\u015flemler ger\u00e7ekle\u015ftirilmektedir.\n<\/div>\n<p>Umar\u0131m \u00e7\u00f6zmeye \u00e7al\u0131\u015faca\u011f\u0131m\u0131z sorunu tam olarak anlatabilmi\u015fimdir&#8230; Bu sorun, \u00f6zellikle y\u00fcksek trafikli uygulamalar i\u00e7in ge\u00e7erlidir. Keza, S3 event&#8217;leri e\u015fli\u011finde AWS Lambda entegrasyonunu izah edebilmek i\u00e7in de olduk\u00e7a ideal bir senaryo gibi g\u00f6z\u00fckmektedir.<\/p>\n<h5>Ne in\u015fa edece\u011fiz?<\/h5>\n<p>Senaryomuz gere\u011fi in\u015fa edece\u011fimiz uygulaman\u0131n yap\u0131s\u0131ndan da bahsetmekte fayda g\u00f6rmekteyim. Bir resim\/image dosyas\u0131n\u0131 herhangi bir Amazon S3 bucket&#8217;\u0131na y\u00fckleyecek uygulama geli\u015ftirece\u011fiz. Bu ama\u00e7 do\u011frultusunda kullan\u0131c\u0131dan ald\u0131\u011f\u0131 resim dosyas\u0131n\u0131 S3 lokasyonuna y\u00fckleyecek olan minimal api teknolojisiyle geli\u015ftirilmi\u015f bir ortam sa\u011flayacak ve devam\u0131nda resim y\u00fcklendi\u011finde de S3 event notification sistemini i\u015fleyecek ve yeni y\u00fcklenen resmi getirip boyutland\u0131rma \u00e7al\u0131\u015fmas\u0131n\u0131 ger\u00e7ekle\u015ftirecek olan bir AWS Lambda uygulamas\u0131 geli\u015ftirilecektir. Ee haliyle notification k\u0131sm\u0131n\u0131n sa\u011fl\u0131kl\u0131 \u00e7al\u0131\u015fabilmesi i\u00e7in \u00f6ncelikle AWS Lambda ve S3 bucket k\u0131s\u0131mlar\u0131n\u0131 \u00f6nceden yap\u0131land\u0131rm\u0131\u015f olmam\u0131z gerekecektir. T\u00fcm bunlar\u0131n d\u0131\u015f\u0131nda resim i\u015fleme s\u00fcrecinde pop\u00fcler olan <a href=\"https:\/\/github.com\/SixLabors\/ImageSharp\" target=\"_blank\">ImageSharp<\/a> paketinden istifade edece\u011fiz.<\/p>\n<p>Evet, haz\u0131rsak e\u011fer hadi ba\u015flayal\u0131m&#8230;<\/p>\n<h3>Amazon S3 Bucket Olu\u015fturma<\/h3>\n<p>\u0130lk olarak \u00e7al\u0131\u015fmalar\u0131m\u0131za a\u015fa\u011f\u0131daki g\u00f6rseldeki gibi resimleri depolayaca\u011f\u0131m\u0131z <em>example-image-storage<\/em> ad\u0131nda bir S3 bucket olu\u015fturarak ba\u015flayabiliriz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-1.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"1142\" height=\"556\" class=\"aligncenter size-full wp-image-27481\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-1.png 1142w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-1-300x146.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-1-1024x499.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-1-768x374.png 768w\" sizes=\"auto, (max-width: 1142px) 100vw, 1142px\" \/><\/a><\/p>\n<h3>Resim Y\u00fckleme API&#8217;sini Olu\u015fturma<\/h3>\n<p>Ard\u0131ndan resimleri bu S3 bucket&#8217;a y\u00fckleyecek olan minimal api projesini olu\u015fturabiliriz. Bunun i\u00e7in ben <em>AWS.Image.Example.API<\/em> ad\u0131nda bir Asp.NET Core projesi olu\u015fturuyorum. Ve akabinde bu projede S3 i\u015flemleri i\u00e7in kullanaca\u011f\u0131m\u0131z a\u015fa\u011f\u0131daki k\u00fct\u00fcphanelerin y\u00fcklenmesini sa\u011fl\u0131yorum;<br \/>\n<code>Install-Package AWSSDK.S3<\/code><br \/>\n<code>Install-Package AWSSDK.Extensions.NETCore.Setup<\/code><br \/>\nVe devam\u0131nda ise a\u015fa\u011f\u0131daki gibi resim y\u00fckleme i\u015fleminin endpoint&#8217;ini olu\u015fturuyorum;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Amazon.S3;\r\nusing Amazon.S3.Model;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddDefaultAWSOptions(builder.Configuration.GetAWSOptions());\r\nbuilder.Services.AddAWSService&lt;IAmazonS3&gt;();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapPost(&quot;\/image-upload&quot;, async (IFormFile file, IAmazonS3 amazonS3) =&gt;\r\n{\r\n    if (!file.ContentType.StartsWith(&quot;image\/&quot;))\r\n        return Results.BadRequest(&quot;Dosya ge\u00e7ersizdir. Yaln\u0131z resim dosyalar\u0131 desteklenmektedir.&quot;);\r\n\r\n    PutObjectRequest request = new()\r\n    {\r\n        BucketName = &quot;example-image-storage&quot;,\r\n        Key = $&quot;images\/{Path.GetFileName(file.FileName)}&quot;,\r\n        InputStream = file.OpenReadStream()\r\n    };\r\n\r\n    request.Metadata.Add(&quot;Content-Type&quot;, file.ContentType);\r\n    await amazonS3.PutObjectAsync(request);\r\n    return Results.Ok($&quot;Resim ba\u015far\u0131yla y\u00fcklenmi\u015ftir. | {Path.GetFileName(file.FileName)}&quot;);\r\n}).DisableAntiforgery();\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<p>Yapt\u0131\u011f\u0131m\u0131z bu \u00e7al\u0131\u015fmay\u0131 test edersek e\u011fer;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-2.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"1539\" height=\"431\" class=\"aligncenter size-full wp-image-27484\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-2.png 1539w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-2-300x84.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-2-1024x287.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-2-768x215.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-2-1536x430.png 1536w\" sizes=\"auto, (max-width: 1539px) 100vw, 1539px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere endpoint&#8217;imiz ba\u015far\u0131yla \u00e7al\u0131\u015fmaktad\u0131r. S3 bucket&#8217;\u0131 da kontrol edelim;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-3.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"508\" height=\"367\" class=\"aligncenter size-full wp-image-27485\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-3.png 508w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-3-300x217.png 300w\" sizes=\"auto, (max-width: 508px) 100vw, 508px\" \/><\/a><\/p>\n<h3>Resim Boyutland\u0131rma Lambda&#8217;s\u0131n\u0131n Olu\u015fturulmas\u0131<\/h3>\n<p>Resimleri istenen S3 bucket&#8217;\u0131na y\u00fckleyecek bir API olu\u015fturdu\u011fumuza g\u00f6re art\u0131k gereksinimimiz a\u00e7\u0131s\u0131ndan resim boyutland\u0131rma servisini olu\u015fturabiliriz. Bunun i\u00e7in ayn\u0131 solution alt\u0131nda, <em>&#8216;Sizing.Example&#8217;<\/em> ad\u0131nda yeni bir <a href=\"https:\/\/www.gencayyildiz.com\/blog\/net-7-aws-lambda-ile-serverless-computing\/\" target=\"_blank\">AWS Lambda Project<\/a> olu\u015ftural\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-4.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"829\" height=\"545\" class=\"aligncenter size-full wp-image-27486\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-4.png 829w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-4-300x197.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-4-768x505.png 768w\" sizes=\"auto, (max-width: 829px) 100vw, 829px\" \/><\/a>Olu\u015fturulan bu lambda&#8217;ya ImageSharp k\u00fct\u00fcphanesini y\u00fckleyelim ve i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi \u015fekillendirelim;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\npublic class Function\r\n{\r\n    IAmazonS3 S3Client { get; set; }\r\n\r\n    public Function()\r\n    {\r\n        S3Client = new AmazonS3Client();\r\n    }\r\n\r\n    public Function(IAmazonS3 s3Client)\r\n    {\r\n        this.S3Client = s3Client;\r\n    }\r\n\r\n    public async Task FunctionHandler(S3Event evnt, ILambdaContext context)\r\n    {\r\n        var eventRecords = evnt.Records ?? new List&lt;S3Event.S3EventNotificationRecord&gt;();\r\n        foreach (var record in eventRecords)\r\n        {\r\n            var s3Event = record.S3;\r\n            if (s3Event == null)\r\n            {\r\n                continue;\r\n            }\r\n\r\n            try\r\n            {\r\n                var bucketName = s3Event.Bucket.Name;\r\n                var key = s3Event.Object.Key;\r\n                var response = await S3Client.GetObjectAsync(bucketName, key);\r\n                context.Logger.LogLine($&quot;{key} orjinal resim boyutu : {response.ContentLength}&quot;);\r\n\r\n                using (var image = Image.Load(response.ResponseStream))\r\n                {\r\n                    int maxWidth = 500, maxHeight = 500;\r\n                    image.Mutate(x =&gt; x.Resize(new ResizeOptions\r\n                    {\r\n                        Mode = ResizeMode.Max,\r\n                        Size = new Size(maxWidth, maxHeight)\r\n                    }));\r\n\r\n                    using (MemoryStream stream = new MemoryStream())\r\n                    {\r\n                        image.Save(stream, new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder());\r\n                        context.Logger.LogLine($&quot;{key} boyutland\u0131r\u0131lm\u0131\u015f resim boyutu : {stream.Length}&quot;);\r\n                        var resizedIamgesPath = $&quot;resized-images\/{key.Replace(&quot;images\/&quot;, &quot;&quot;)}&quot;;\r\n                        var uploadRequest = new PutObjectRequest\r\n                        {\r\n                            BucketName = bucketName,\r\n                            Key = resizedIamgesPath,\r\n                            InputStream = stream\r\n                        };\r\n                        await this.S3Client.PutObjectAsync(uploadRequest);\r\n                        context.Logger.LogLine($&quot;Resim yeniden boyutland\u0131r\u0131lm\u0131\u015ft\u0131r.&quot;);\r\n                    }\r\n                }\r\n                \/\/Orjinal resmi silelim\r\n                await this.S3Client.DeleteObjectAsync(bucketName, s3Event.Object.Key);\r\n                context.Logger.LogLine($&quot;Orjinal resim silinmi\u015ftir. {s3Event.Object.Key}&quot;);\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                context.Logger.LogError(e.Message);\r\n                context.Logger.LogError(e.StackTrace);\r\n                throw;\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki kod blo\u011funu incelersek e\u011fer AWS S3 \u00fczerindeki belirtti\u011fimiz bucket&#8217;a y\u00fcklenen resimleri yeniden boyutland\u0131rma i\u015flemi y\u00fcr\u00fct\u00fclmektedir. Burada baz\u0131 kodlar\u0131n i\u015flevselli\u011finden bahsetmemizin faydal\u0131 olaca\u011f\u0131 kanaatindeyim. Misal olarak; <code style=\"color:purple;\">evnt.Records<\/code>, S3Event nesnesindeki t\u00fcm event kay\u0131tlar\u0131n\u0131 getirmektedir. Yani tetikleyici olaylar\u0131n listesidir diyebiliriz. <code style=\"color:purple;\">record.S3<\/code> ise her bir <code>S3EventNotificationRecord<\/code> i\u00e7indeki o olaya ait S3 bilgilerini temsil etmektedir. \u00d6rne\u011fin, hangi bucket&#8217;a hangi dosyan\u0131n y\u00fcklendi\u011fi gibi bilgiler bu nesne \u00fczerinden al\u0131n\u0131r. Son olarak <code style=\"color:purple;\">s3Event.Object.Key<\/code> komutunu izah edersek e\u011fer, bu da dosyan\u0131n S3 i\u00e7indeki yolunu temsil etmektedir. \u0130\u015fte bu bilgiler e\u015fli\u011finde bizler S3 bucket&#8217;a y\u00fcklenen resim dosyas\u0131 \u00fczerinde gerekli i\u015flemleri ger\u00e7ekle\u015ftiriyor ve orjinal dosyay\u0131 silerek, boyutland\u0131r\u0131lm\u0131\u015f haliyle s\u00fcreci tamaml\u0131yoruz.<\/p>\n<p>Evet, art\u0131k lambda function&#8217;\u0131m\u0131z\u0131 olu\u015fturdu\u011fumuza g\u00f6re AWS&#8217;ye publish edebiliriz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-6.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"821\" height=\"611\" class=\"aligncenter size-full wp-image-27490\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-6.png 821w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-6-300x223.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-6-768x572.png 768w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere <em>SizingExample<\/em> isminde bir lambda function olu\u015fturuyoruz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-5.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"827\" height=\"614\" class=\"aligncenter size-full wp-image-27488\" \/><\/a>Bu a\u015famada rol olarak <em>AWSLambdaExecute<\/em>&#8216;u se\u00e7menizi tavsiye ederim. B\u00f6ylece Cloudwatch&#8217;a log atabilmeniz i\u00e7in temel izinleri elde etmi\u015f olacaks\u0131n\u0131z.<\/p>\n<p>Ve nihai olarak bu \u015fekilde lambda&#8217;y\u0131 publish edelim&#8230;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-7.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"374\" height=\"138\" class=\"aligncenter size-full wp-image-27491\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-7.png 374w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-7-300x111.png 300w\" sizes=\"auto, (max-width: 374px) 100vw, 374px\" \/><\/a><\/p>\n<h3>S3 Eri\u015fimi \u0130\u00e7in Lambda \u0130zinlerinin G\u00fcncellenmesi<\/h3>\n<p>Geli\u015ftirdi\u011fimiz lambda taraf\u0131ndan S3 servisine eri\u015fip gerekli resim i\u015flemlerinin ger\u00e7ekle\u015ftirilebilmesi i\u00e7in do\u011fal olarak bir tak\u0131m izinlere ihtiyac\u0131m\u0131z olacakt\u0131r. Bu izinlerin d\u00fczenlenebilmesi i\u00e7in lambda servisi \u00fczerinden olu\u015fturdu\u011fumuz <em>SizingExample<\/em> isimli lambda&#8217;y\u0131 a\u00e7al\u0131m ve a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi lambda rol\u00fcne t\u0131klayarak eri\u015fim politikalar\u0131n\u0131 d\u00fczenleyelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-8.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-8.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"875\" height=\"823\" class=\"aligncenter size-full wp-image-27492\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-8.png 875w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-8-300x282.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-8-768x722.png 768w\" sizes=\"auto, (max-width: 875px) 100vw, 875px\" \/><\/a>Ard\u0131ndan <em>Permissions policies<\/em> k\u0131sm\u0131ndan &#8216;Add policies&#8217; -> &#8216;Attach policies&#8217; diyerek lambda&#8217;ya yeni eri\u015fim izni tan\u0131mlayal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-9.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-9.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"1877\" height=\"588\" class=\"aligncenter size-full wp-image-27494\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-9.png 1877w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-9-300x94.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-9-1024x321.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-9-768x241.png 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-9-1536x481.png 1536w\" sizes=\"auto, (max-width: 1877px) 100vw, 1877px\" \/><\/a>Burada <code>AmazonS3FullAccess<\/code> se\u00e7erek yola devam edebiliriz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-10.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"298\" height=\"250\" class=\"aligncenter size-full wp-image-27495\" \/><\/a>Evet, art\u0131k lambda taraf\u0131ndan S3 eri\u015fimi verildi\u011fine g\u00f6re AWS Lambda&#8217;y\u0131 S3 Event&#8217;leriyle tetikleyebiliriz.<\/p>\n<h3>AWS Lambda&#8217;y\u0131 S3 Event&#8217;leriyle Tetikleme<\/h3>\n<p>Art\u0131k her \u015fey yerli yerinde oldu\u011funa g\u00f6re, yapbozun son par\u00e7as\u0131n\u0131 yerle\u015ftirebilir ve S3 bucket&#8217;\u0131 alt\u0131ndaki <em>&#8216;images&#8217;<\/em> klas\u00f6r\u00fcne yeni bir resim y\u00fcklendi\u011fi taktirde lambda&#8217;m\u0131z\u0131 tetikleyebiliriz.<\/p>\n<p>Bunun i\u00e7in de yine lambda \u00fczerinden a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi &#8216;Configuration&#8217; -> &#8216;Triggers&#8217; sekmesine gelerek yeni bir trigger eklememiz gerekmektedir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-11.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"1165\" height=\"818\" class=\"aligncenter size-full wp-image-27496\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-11.png 1165w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-11-300x211.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-11-1024x719.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-11-768x539.png 768w\" sizes=\"auto, (max-width: 1165px) 100vw, 1165px\" \/><\/a>Trigger&#8217;la ilgili ayarlar\u0131 a\u015fa\u011f\u0131daki g\u00f6rseldeki gibi yap\u0131land\u0131ral\u0131m;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-12.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"1203\" height=\"780\" class=\"aligncenter size-full wp-image-27497\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-12.png 1203w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-12-300x195.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-12-1024x664.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-12-768x498.png 768w\" sizes=\"auto, (max-width: 1203px) 100vw, 1203px\" \/><\/a>Ve trigger&#8217;\u0131 olu\u015ftural\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-13.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"357\" height=\"272\" class=\"aligncenter size-full wp-image-27498\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-13.png 357w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-13-300x229.png 300w\" sizes=\"auto, (max-width: 357px) 100vw, 357px\" \/><\/a>\u0130\u015fte bu kadar&#8230; Bu yapt\u0131\u011f\u0131m\u0131z i\u015flem neticesinde S3 bucket&#8217;ta ki &#8216;\/images&#8217; yoluna bir resim y\u00fcklendi\u011fi taktirde bu trigger sayesinde, S3Event meta verisi e\u015fli\u011finde lambda tetiklenecektir. Vee gerekli resim boyutland\u0131rma i\u015flemini lambda halledecektir.<\/p>\n<h4>Test Edelim&#8230;<\/h4>\n<p>\u015eimdi S3 bucket&#8217;a olu\u015fturdu\u011fumuz API arac\u0131l\u0131\u011f\u0131yla resim dosyas\u0131n\u0131 g\u00f6nderelim ve s\u00fcreci CloudWatch loglar\u0131ndan takip edelim;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-14.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-14.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"1273\" height=\"221\" class=\"aligncenter size-full wp-image-27499\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-14.png 1273w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-14-300x52.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-14-1024x178.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-14-768x133.png 768w\" sizes=\"auto, (max-width: 1273px) 100vw, 1273px\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere resim orjinal haliyle y\u00fckleniyor, yeniden boyutland\u0131r\u0131l\u0131yor ve orjinali silinerek yeni hali <em>&#8216;resized-images\/&#8217;<\/em> path&#8217;ine koyuluyor.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-15.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-15.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"565\" height=\"367\" class=\"aligncenter size-full wp-image-27500\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-15.png 565w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-15-300x195.png 300w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><\/p>\n<h3>Hata Durumlar\u0131nda \u0130se&#8230;<\/h3>\n<p>E\u011fer ki yap\u0131lan bu i\u015flem s\u00fcrecinde bir ba\u015far\u0131s\u0131zl\u0131k durumu s\u00f6z konusu olursa AWS Lambda maksimum 6 saat i\u00e7erisinde 2 kez deneme ger\u00e7ekle\u015ftirecektir. E\u011fer ki bu denemelerden bir netice al\u0131namazsa o dosyaya kar\u015f\u0131 olu\u015fturulan event kaybolacakt\u0131r. Bu duruma dair t\u00fcm yap\u0131land\u0131rmalar\u0131 a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibi lambda&#8217;n\u0131n &#8216;Configuration&#8217; -> &#8216;Asynchronous invocation&#8217; k\u0131sm\u0131ndan yapabilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-16.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-16.png\" alt=\".NET&#039;te S3 Event&#039;leriyle AWS Lambda&#039;y\u0131 Tetikleyelim\" width=\"726\" height=\"864\" class=\"aligncenter size-full wp-image-27501\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-16.png 726w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/01\/NETte-S3-Eventleriyle-AWS-Lambdayi-Tetikleyelim-16-252x300.png 252w\" sizes=\"auto, (max-width: 726px) 100vw, 726px\" \/><\/a>Bu durumu engelleyebilmek i\u00e7in Dead Letter Queue (DLQ) olu\u015fturarak \u00f6nlem alabilir ve yeniden denemeden sonra ba\u015far\u0131s\u0131z olan t\u00fcm event&#8217;leri belirtilen DLQ&#8217;ya ta\u015f\u0131yarak, sonradan bu kuyruk \u00fczerinden resimleri i\u015fleyebilirsiniz.<\/p>\n<p>Nihai olarak;<br \/>\nB\u00f6ylece S3 bucket&#8217;a y\u00fcklenen bir dosya \u00fczerinden AWS Lambda&#8217;n\u0131n nas\u0131l tetiklenebilece\u011fini(trigger), dosya i\u015fleme mant\u0131\u011f\u0131n\u0131 ana uygulamadan ay\u0131rarak nas\u0131l uygulanabilece\u011fini ve genel sistem performans\u0131n\u0131 iyile\u015ftirmenin temiz bir yolunu hep beraber tecr\u00fcbe etmi\u015f bulunuyoruz.<\/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 \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki github adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/AWS.Image.Example.API\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/AWS.Image.Example.API<\/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, AWS Lambda&#8217;y\u0131 S3 event&#8217;leri e\u015fli\u011finde nas\u0131l tetikleyebilece\u011fimizi inceliyor olaca\u011f\u0131z. Tabi bunu yaparken \u00f6nceden klavyeye alm\u0131\u015f oldu\u011fumuz AWS Lambda \u0130le Serverless Computing ve AWS S3 \u0130le Dosya \u0130\u015flemleri Ger\u00e7ekle\u015ftirme ba\u015fl\u0131kl\u0131 makalelerimizden de&#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":27502,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5206,5085,2739,4692,4730],"tags":[4691,4739,5208,5106,5107,5207],"class_list":["post-27475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-net-9","category-net-core","category-amazon-s3","category-aws","tag-amazon-s3","tag-aws-lambda","tag-aws-lambda-trigger","tag-dead-letter-queue","tag-dlq","tag-s3-event"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27475","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=27475"}],"version-history":[{"count":8,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27475\/revisions"}],"predecessor-version":[{"id":27503,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27475\/revisions\/27503"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/27502"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=27475"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=27475"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=27475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}