﻿
{"id":26999,"date":"2024-05-26T11:32:28","date_gmt":"2024-05-26T11:32:28","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=26999"},"modified":"2024-05-26T11:34:32","modified_gmt":"2024-05-26T11:34:32","slug":"asp-net-core-web-api-uygulamasini-amazon-ec2de-host-etme","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-web-api-uygulamasini-amazon-ec2de-host-etme\/","title":{"rendered":"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2&#8217;de Host Etme"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Amazon EC2(Elastic Compute Cloud), Amazon Web Service&#8217;leri taraf\u0131ndan sunulan y\u00fcksek oranda \u00f6l\u00e7eklenebilir ve esnek bir cloud servisidir. Bu servis \u00fczerinde kendi uygulamalar\u0131m\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rabilece\u011fimiz, uygulaman\u0131n bellek veya CPU gibi gereksinimlerine uygun \u00e7e\u015fitli t\u00fcrler \u00fczerinden se\u00e7im yapabilecek olan instance ad\u0131nda sanal sunucular kiralanabilmekte ve ihtiya\u00e7 do\u011frultusunda da scale-up ya da scale-down \u00f6l\u00e7eklendirme yakla\u015f\u0131mlar\u0131 uygulanabilmektedir. Bizler, bu i\u00e7eri\u011fimizde bir Asp.NET Core Web API uygulamas\u0131n\u0131 Amazon EC2&#8217;de host etme s\u00fcrecini ad\u0131m ad\u0131m inceleyecek ve b\u00f6ylece DevOps ile ilgili \u00e7e\u015fitli uygulamalar\u0131n anla\u015f\u0131lmas\u0131na yard\u0131mc\u0131 olacak pek \u00e7ok etkili kavram\u0131 ele al\u0131yor olaca\u011f\u0131z.<\/p>\n<blockquote><p><em>AWS, bir y\u0131l boyunca orta \u00f6l\u00e7ekli uygulamalar\u0131 host edebilmek i\u00e7in her ay 750 saate kadar Linux ve Windows instance&#8217;\u0131n\u0131 \u00fccretsiz olarak sunmaktad\u0131r.<\/em><\/p><\/blockquote>\n<p><em style=\"color:green;\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/info.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/info.png\" alt=\"\" width=\"32\" height=\"32\" class=\"alignleft size-full wp-image-23142\" \/><\/a>EC2 ismindeki 2, Amazon&#8217;un ikinci nesil bulut bili\u015fim hizmetini ifade etmektedir. Bu hizmet, ilk nesil sabit ve esnek olamayan \u00e7\u00f6z\u00fcmlerden farkl\u0131 olarak; dinamik ve elastik bir yap\u0131da tasarlanm\u0131\u015ft\u0131r ve kullan\u0131c\u0131lara daha fazla esneklik, \u00f6l\u00e7eklenebilirlik ve maliyet optimizasyonu sa\u011flamaktad\u0131r. Bu nedenle 2 say\u0131s\u0131, EC2&#8217;nin teknolojik geli\u015fimini ve sundu\u011fu yenilikleri vurgulamak i\u00e7in kullan\u0131lm\u0131\u015ft\u0131r.<\/em><\/p>\n<h4>Uygulamay\u0131 Geli\u015ftirelim<\/h4>\n<p>\u00d6ncelikle bir Asp.NET Core Web API uygulamas\u0131 geli\u015ftirerek i\u00e7eri\u011fimize giri\u015f yapal\u0131m. Bizlerin geli\u015ftirece\u011fi uygulama basit bir \u00fcr\u00fcn y\u00f6netim sistemi olacakt\u0131r. \u015eimdi ad\u0131m ad\u0131m bu uygulamay\u0131 geli\u015ftirmeye odaklanal\u0131m;<\/p>\n<ul>\n<li><em>Ad\u0131m 1 <span style=\"font-size:12px;color:green;\">(Product Entity&#8217;sini Olu\u015ftural\u0131m)<\/span><\/em>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public record Product(Guid Id)\r\n    {\r\n        public string Name { get; set; }\r\n        public string? Description { get; set; }\r\n        public decimal Price { get; set; }\r\n    }\r\n<\/pre>\n<\/div>\n<\/li>\n<li><em>Ad\u0131m 2 <span style=\"font-size:12px;color:green;\">(Veritaban\u0131 &#038; Migration \u0130\u015flemlerini Yapal\u0131m)<\/span><\/em><br \/>\nVeritaban\u0131 olarak PostgreSQL&#8217;i tercih ediyorum. Tabi ki de sizler, uygulamay\u0131 \u00f6zelle\u015ftirebilece\u011finiz gibi veritaban\u0131n\u0131 da kendinize \u00f6zel se\u00e7ebilirsiniz.<\/p>\n<p>\u00d6ncelikle a\u015fa\u011f\u0131daki gibi bir DbContext nesnesi olu\u015ftural\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class ApplicationDbContext : DbContext\r\n    {\r\n        public ApplicationDbContext(DbContextOptions options) : base(options)\r\n        {\r\n        }\r\n\r\n        public DbSet&lt;Product&gt; Products { get; set; }\r\n    }\r\n<\/pre>\n<\/div>\n<p>Ve &#8216;Program.cs&#8217; dosyas\u0131nda a\u015fa\u011f\u0131daki gibi veritaban\u0131 tan\u0131mlamas\u0131nda bulunal\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nbuilder.Services.AddDbContext&lt;ApplicationDbContext&gt;(options =&gt; options.UseNpgsql(builder.Configuration.GetConnectionString(&quot;PostgreSQL&quot;)));\r\n<\/pre>\n<\/div>\n<p>Ard\u0131ndan <em>Package Manager Console<\/em> \u00fczerinden <code>add-migration mig_1<\/code> talimat\u0131 e\u015flinde bir migration olu\u015ftural\u0131m. \u015eimdi bu migration&#8217;\u0131 ister <code>update-database<\/code> komutuyla migrate edebilirsiniz, isterseniz de a\u015fa\u011f\u0131daki gibi dinamik bir yakla\u015f\u0131m sergileyebilirsiniz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddDbContext&lt;ApplicationDbContext&gt;(options =&gt; options.UseNpgsql(builder.Configuration.GetConnectionString(&quot;PostgreSQL&quot;)));\r\n\r\nvar app = builder.Build();\r\n\r\n#region Dynamic Migration\r\nusing IServiceScope scope = app.Services.CreateScope();\r\nApplicationDbContext dbContext = scope.ServiceProvider.GetRequiredService&lt;ApplicationDbContext&gt;();\r\nif (dbContext.Database.GetPendingMigrations().Any())\r\n    await dbContext.Database.MigrateAsync();\r\n#endregion\r\n\r\n.\r\n.\r\n.\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<\/li>\n<li><em>Ad\u0131m 3 <span style=\"font-size:12px;color:green;\">(Operasyonel Endpoint&#8217;leri Olu\u015ftural\u0131m)<\/span><\/em><br \/>\nTemel \u00fcr\u00fcn i\u015flemlerini y\u00fcr\u00fctecek operasyonlara sahip endpoint&#8217;leri a\u015fa\u011f\u0131daki gibi minimal api olarak olu\u015ftural\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\n\r\napp.MapGet(&quot;\/products&quot;, async (ApplicationDbContext dbContext) =&gt;\r\n{\r\n    return await dbContext.Products.ToListAsync();\r\n});\r\n\r\napp.MapGet(&quot;\/products\/{id}&quot;, async (ApplicationDbContext dbContext, string id) =&gt;\r\n{\r\n    Product? product = await dbContext.Products.FindAsync(id);\r\n    if (product is null)\r\n        return Results.NotFound();\r\n    return Results.Ok(product);\r\n});\r\n\r\napp.MapPost(&quot;\/products&quot;, async (ApplicationDbContext dbContext, CreateProductVM createProductVM) =&gt;\r\n{\r\n    Product product = new(Guid.NewGuid())\r\n    {\r\n        Name = createProductVM.Name,\r\n        Description = createProductVM.Description,\r\n        Price = createProductVM.Price\r\n    };\r\n\r\n    await dbContext.Products.AddAsync(product);\r\n    await dbContext.SaveChangesAsync();\r\n});\r\n<\/pre>\n<\/div>\n<\/li>\n<\/ul>\n<p>\u0130\u015fte bu kadar&#8230; Bu ad\u0131mlar s\u00fcrecinde kullan\u0131lan viewmodel gibi teferruatlara ve istifade edilen k\u00fct\u00fcphanelere i\u00e7eri\u011fimizin sonunda payla\u015fm\u0131\u015f oldu\u011fumuz github adresinden g\u00f6z atabilirsiniz. Makalenin hacmini art\u0131k yersiz \u015fi\u015firmemek i\u00e7in bu detaylar\u0131 sizlere b\u0131rak\u0131yorum.<\/p>\n<h4>Dockerizing<\/h4>\n<p>Ayr\u0131ca .NET&#8217;te gelen <a href=\"https:\/\/www.gencayyildiz.com\/blog\/nette-built-in-container-destegi-net-uygulamalarini-dockerfile-dosyasi-olmaksizin-dockerize-etme\/\" rel=\"noopener\" target=\"_blank\">built-in container<\/a> deste\u011finden de istifade edelim istiyorum. Bunun i\u00e7in a\u015fa\u011f\u0131daki tan\u0131mlar\u0131 uygulaman\u0131n &#8216;.csproj&#8217; dosyas\u0131ndaki ilgili alana ekleyelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\t&lt;PropertyGroup&gt;\r\n\t\t.\r\n\t\t.\r\n\t\t.\r\n\r\n\t\t&lt;ContainerImageName&gt;products-api&lt;\/ContainerImageName&gt;\r\n\t\t&lt;ContainerImageTags&gt;latest&lt;\/ContainerImageTags&gt;\r\n\t\t&lt;PublishProfile&gt;DefaultContainer&lt;\/PublishProfile&gt;\r\n\t\t&lt;RuntimeIdentifier&gt;linux-x64&lt;\/RuntimeIdentifier&gt;\r\n\t&lt;\/PropertyGroup&gt;\r\n<\/pre>\n<\/div>\n<p>Bu yap\u0131land\u0131rmadan sonra uygulaman\u0131n Docker image&#8217;\u0131n\u0131 olu\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki talimat\u0131n verilmesi yeterli olacakt\u0131r.<\/p>\n<div style=\"text-align:center;\"><code>dotnet publish -c Release --self-contained<\/code><\/div>\n<p>\u0130\u00e7eri\u011fimizin devam\u0131nda Amazon EC2 instance&#8217;\u0131nda da ayn\u0131 i\u015flemleri ger\u00e7ekle\u015ftirecek ve orada da bir Docker image&#8217;\u0131 olu\u015fturaca\u011f\u0131z. \u015eimdi Docker Compose ile bu olu\u015fturdu\u011fumuz uygulamay\u0131 PostgreSQL ile aya\u011fa kald\u0131racak bir talimat dizisi olu\u015fturarak devam edelim.<\/p>\n<h4>PostgreSQL Container&#8217;\u0131 \u0130le Docker Compose<\/h4>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nversion: '3.8'\r\nservices:\r\n    api:\r\n        container_name: product-api\r\n        image: products-api:latest\r\n        environment:\r\n            - ASPNETCORE_ENVIRONMENT=docker\r\n            - ASPNETCORE_URLS=http:\/\/+:80\r\n        ports:\r\n            - 80:80\r\n        depends_on:\r\n            postgres:\r\n                condition: service_healthy\r\n    postgres:\r\n        container_name: postgres\r\n        image: postgres:15-alpine\r\n        environment:\r\n          - POSTGRES_USER=postgres\r\n          - POSTGRES_PASSWORD=123456\r\n        ports:\r\n          - 5432:5432\r\n        volumes:\r\n          - postgres-data:\/data\/db\r\n        healthcheck:\r\n          test: &#x5B;&quot;CMD-SHELL&quot;, &quot;pg_isready -U postgres&quot;]\r\n          interval: 10s\r\n          timeout: 5s\r\n          retries: 5\r\nvolumes:\r\n  postgres-data:\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki docker compose i\u00e7eri\u011fine g\u00f6z atarsan\u0131z e\u011fer iki adet servisin yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6receksiniz. \u0130lki, biraz \u00f6nce olu\u015fturdu\u011fumuz <em>product-api<\/em> isimli built-in container&#8217;d\u0131r. Bu ilk etapta local docker instance&#8217;\u0131ndan \u00e7ekilecektir. \u0130\u00e7eri\u011fimizin devam\u0131nda Amazon EC2 instance&#8217;lar\u0131nda da \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rece\u011fiz. \u0130kinci servis ise PostgreSQL yap\u0131land\u0131rmas\u0131n\u0131 bar\u0131nd\u0131rmaktad\u0131r.<\/p>\n<h4>appsettings.docker.json<\/h4>\n<p>Bu i\u015flem tamamland\u0131ktan sonra uygulamam\u0131z i\u00e7in docker&#8217;a uygun yap\u0131land\u0131rmay\u0131 bar\u0131nd\u0131racak <em>appsettings.docker.json<\/em> dosyas\u0131n\u0131 ekleyerek devam edelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;ConnectionStrings&quot;: {\r\n    &quot;PostgreSQL&quot;: &quot;Host=postgres;Port=5432;Database=ProductDB;Username=postgres;Password=123456;Include Error Detail=true&quot;\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>B\u00f6ylece <code>ASPNETCORE_ENVIRONMENT<\/code> de\u011feri docker olarak ayarland\u0131\u011f\u0131 taktirde uygulama bu dosya \u00fczerinden yap\u0131land\u0131r\u0131lacakt\u0131r.<\/p>\n<p>\u015eimdi ise s\u0131ra EC2 container&#8217;\u0131 olu\u015fturmaya gelmi\u015ftir.<\/p>\n<h4>Amazon EC2 Linux Instance Olu\u015fturma<\/h4>\n<p>Art\u0131k her\u015fey haz\u0131r oldu\u011funa g\u00f6re bir Amazon EC2 Linux instance&#8217;\u0131n\u0131 aya\u011fa kald\u0131rabiliriz. Bunun i\u00e7in AWS Management Console \u00fczerinden EC2&#8217;yi aratal\u0131m.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"709\" height=\"219\" class=\"aligncenter size-full wp-image-27006\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme.png 709w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-300x93.png 300w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/a>Ard\u0131ndan a\u00e7\u0131lan sayfada &#8216;Launch instance&#8217; butonuna t\u0131klayal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-1.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"551\" height=\"535\" class=\"aligncenter size-full wp-image-27007\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-1.png 551w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-1-300x291.png 300w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/a>Ve ard\u0131ndan ilgili instance&#8217;\u0131 a\u015fa\u011f\u0131daki gibi yap\u0131land\u0131ral\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-2.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"778\" height=\"714\" class=\"aligncenter size-full wp-image-27008\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-2.png 778w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-2-300x275.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-2-768x705.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-3.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"702\" height=\"873\" class=\"aligncenter size-full wp-image-27009\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-3.png 702w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-3-241x300.png 241w\" sizes=\"auto, (max-width: 702px) 100vw, 702px\" \/><\/a>Burada <em>Key pair<\/em> alan\u0131nda &#8216;Create new key pair&#8217; diyerek a\u015fa\u011f\u0131daki gibi yeni bir tane olu\u015ftural\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-4.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"527\" height=\"553\" class=\"aligncenter size-full wp-image-27010\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-4.png 527w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-4-286x300.png 286w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/a>Burada key pair name olarak &#8216;admin&#8217; de\u011ferini veriyoruz. Ayr\u0131ca dosya bi\u00e7imi olarak .ppk&#8217;y\u0131 se\u00e7iyoruz. &#8216;Create key pair&#8217; butonuna t\u0131klad\u0131\u011f\u0131m\u0131zda admin.ppk ad\u0131nda bir dosya indirilecektir. Bu daha sonradan taraf\u0131m\u0131zca Amazon EC2 instance&#8217;\u0131na uzaktan ba\u011flanmak i\u00e7in kullan\u0131laca\u011f\u0131ndan dolay\u0131 bu dosyan\u0131n g\u00fcvenli bir \u015fekilde tutuldu\u011fundan emin olunmal\u0131d\u0131r.<\/p>\n<p>Devam\u0131nda ise instance yap\u0131land\u0131rmas\u0131n\u0131 a\u015fa\u011f\u0131daki gibi yap\u0131p, ard\u0131ndan &#8216;Launch instance&#8217; butonuna t\u0131klayal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-5.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"940\" height=\"790\" class=\"aligncenter size-full wp-image-27011\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-5.png 940w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-5-300x252.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-5-768x645.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-6.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"529\" height=\"188\" class=\"aligncenter size-full wp-image-27012\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-6.png 529w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-6-300x107.png 300w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/a>Evet, t\u00fcm bu i\u015flemlerden sonraki ad\u0131m\u0131m\u0131z ise makinemizden bu EC2 instance&#8217;\u0131na ba\u011flanmakt\u0131r. Bizler bunun i\u00e7in PuTTY&#8217;i kullan\u0131yor olaca\u011f\u0131z. O halde buyurun devam edelim.<\/p>\n<h4>PuTTY \u0130le EC2 Instance&#8217;\u0131na SSH<\/h4>\n<p>\u00d6ncelikle bilmeyenler i\u00e7in <strong><em>PuTTY ne la?<\/em><\/strong> sorusunu cevapland\u0131rarak devam edelim.<\/p>\n<blockquote><p><em>PuTTY, \u00e7e\u015fitli a\u011f protokolleri i\u00e7in bir client yaz\u0131l\u0131m\u0131d\u0131r ve \u00f6zellikle SSH(Secure Shell), Telnet, rlogin ve seri port ba\u011flant\u0131lar\u0131 gibi protokoller i\u00e7in kullan\u0131lmaktad\u0131r.<\/em><\/p><\/blockquote>\n<p>PuTTY&#8217;i kullanabilmek i\u00e7in <a href=\"https:\/\/www.putty.org\" rel=\"noopener\" target=\"_blank\">https:\/\/www.putty.org<\/a> adresinden indirilip, kurulmas\u0131 gerekmektedir.<\/p>\n<p>PuTTY&#8217;i kurduktan sonra a\u00e7al\u0131m ve &#8216;Connection&#8217; -> &#8216;SSH&#8217; -> &#8216;Auth&#8217; -> &#8216;Credentials&#8217; sekmesinden PPK dosyas\u0131n\u0131 y\u00fckleyerek gerekli kimlik bilgileri yap\u0131land\u0131rmas\u0131nda bulunal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-7.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"440\" height=\"429\" class=\"aligncenter size-full wp-image-27014\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-7.png 440w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-7-300x293.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/a>Devam\u0131nda ise &#8216;Session&#8217; sekmesinden host bilgisini yazal\u0131m ve &#8216;Open&#8217; diyerek ba\u011flant\u0131y\u0131 ba\u015flatal\u0131m.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-8.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-8.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"1486\" height=\"637\" class=\"aligncenter size-full wp-image-27015\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-8.png 1486w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-8-300x129.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-8-1024x439.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-8-768x329.png 768w\" sizes=\"auto, (max-width: 1486px) 100vw, 1486px\" \/><\/a>Bu i\u015flemden sonra a\u015fa\u011f\u0131daki gibi &#8216;login as&#8217; k\u0131sm\u0131 gelecektir.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-9.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-9.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"200\" height=\"65\" class=\"aligncenter size-full wp-image-27017\" \/><\/a>Burada &#8216;ec2-user&#8217; de\u011ferini yazal\u0131m ve enter diyelim.<\/p>\n<p>Vee g\u00f6z\u00fcm\u00fcz ayd\u0131n \ud83d\ude42 Art\u0131k Linux Instance&#8217;\u0131na giri\u015f yapm\u0131\u015f bulunuyoruz&#8230;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-10.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"538\" height=\"259\" class=\"aligncenter size-full wp-image-27018\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-10.png 538w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-10-300x144.png 300w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/a>\u015eimdi bu instance&#8217;a Git, Docker, .NET Runtime vs. gibi ihtiyac\u0131m\u0131z olan t\u00fcm ortam kurulumlar\u0131n\u0131 ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<p>Bunun i\u00e7in \u00f6ncelikle <code style=\"font-size:12px;\">sudo su<\/code> talimat\u0131 e\u015fli\u011finde super user&#8217;a ge\u00e7i\u015f yapal\u0131m.<\/p>\n<p>Ard\u0131ndan <code style=\"font-size:12px\">yum install git<\/code> talimat\u0131yla git&#8217;in kurulumunu ba\u015flatal\u0131m.<\/p>\n<p><code style=\"font-size:12px\">yum install docker<\/code><br \/>\n<code style=\"font-size:12px\">sudo systemctl start docker.service<\/code><br \/>\n<code style=\"font-size:12px\">docker ps<\/code> talimatlar\u0131 e\u015fli\u011finde Docker&#8217;\u0131 kural\u0131m.<\/p>\n<p><code style=\"font-size:12px\">sudo yum install aspnetcore-runtime-7.0<\/code><br \/>\n<code style=\"font-size:12px\">sudo yum install dotnet-sdk-7.0<\/code><br \/>\n<code style=\"font-size:12px\">dotnet tool install --global dotnet-ef --version 7.0.19<\/code><br \/>\n<code style=\"font-size:12px\">. \/etc\/profile.d\/dotnet-cli-tools-bin-path.sh<\/code><br \/>\n<code style=\"font-size:12px\">dotnet sdk check<\/code> talimatlar\u0131 e\u015fli\u011finde de .NET 7 runtime&#8217;\u0131 ve SDK&#8217;yi kural\u0131m.<\/p>\n<blockquote><p><em>Burada e\u011fer ki y\u00fcklenen paketlerde bir hata, eri\u015fememe ya da tan\u0131mama durumu s\u00f6z konusu olursa, Microsoft paket deposunu a\u015fa\u011f\u0131daki talimatla eklemeli;<br \/>\n<code style=\"font-size:12px\">sudo rpm -Uvh https:\/\/packages.microsoft.com\/config\/centos\/7\/packages-microsoft-prod.rpm<\/code><br \/>\nve ard\u0131ndan depo listesini <code style=\"font-size:12px\">sudo yum update<\/code> talimat\u0131yla g\u00fcncellemelisiniz.<br \/>\n<\/em><\/p><\/blockquote>\n<p>Devam\u0131nda ise docker-compose dosyas\u0131n\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in a\u015fa\u011f\u0131daki talimatlar e\u015fli\u011finde gerekli ara\u00e7lar\u0131 y\u00fckleyelim.<br \/>\n<code style=\"font-size:12px\">sudo curl -L https:\/\/github.com\/docker\/compose\/releases\/latest\/download\/docker-compose-$(uname -s)-$(uname -m) -o \/usr\/local\/bin\/docker-compose<\/code><br \/>\n<code style=\"font-size:12px\">sudo chmod +x \/usr\/local\/bin\/docker-compose<\/code><br \/>\n<code style=\"font-size:12px\">docker-compose version<\/code><\/p>\n<p>Evet, \u015fu ana kadar gerekli olan t\u00fcm ara\u00e7lar y\u00fcklenmi\u015ftir. \u015eimdi s\u0131rada Github repository&#8217;sini instance volume i\u00e7erisine klonlamak var. Bunun i\u00e7in yukar\u0131daki sat\u0131rlarda geli\u015ftirdi\u011fimiz \u00fcr\u00fcn y\u00f6netim sistemi uygulamas\u0131n\u0131 github&#8217;da yeni bir repository olu\u015fturarak depolayal\u0131m. <span style=\"font-size:12px;\">(bknz: <a href=\"https:\/\/github.com\/gncyyldz\/Amazon.EC2.Hosting.Example\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/Amazon.EC2.Hosting.Example<\/a>)<\/span> Ard\u0131ndan a\u015fa\u011f\u0131daki talimatlar e\u015fli\u011finde hem uygulamay\u0131 github&#8217;dan \u00e7ekelim hem de docker image&#8217;\u0131n\u0131 olu\u015ftural\u0131m.<br \/>\n<code style=\"font-size:12px\">mkdir repos<\/code><br \/>\n<code style=\"font-size:12px\">cd repos<\/code><br \/>\n<code style=\"font-size:12px\">git clone https:\/\/github.com\/gncyyldz\/Amazon.EC2.Hosting.Example<\/code><br \/>\n<code style=\"font-size:12px\">cd Amazon.EC2.Hosting.Example<\/code><br \/>\n<code style=\"font-size:12px\">dotnet publish -c Release --self-contained<\/code><br \/>\n<code style=\"font-size:12px\">docker images<\/code><br \/>\nBurada yapt\u0131\u011f\u0131m\u0131z \u00e7al\u0131\u015fmay\u0131 \u00f6zetlememiz gerekirse e\u011fer; \u00f6ncelikle &#8216;repos&#8217; ad\u0131nda bir klas\u00f6r olu\u015fturduk ve ard\u0131ndan repository&#8217;mizi bu klas\u00f6re kopyalad\u0131k. Klonlama tamamland\u0131ktan sonra proje klas\u00f6r\u00fcne giderek uygulamay\u0131 publish ettik. Hat\u0131rlarsan\u0131z e\u011fer \u00f6nceki sat\u0131rlarda .csproj dosyas\u0131nda uygulama yay\u0131nland\u0131\u011f\u0131nda docker image&#8217;\u0131n\u0131 olu\u015fturacak spesifikasyonlarda bulunmu\u015ftuk. Haliyle bu i\u015flem neticesinde gerekli docker image&#8217;\u0131n\u0131 olu\u015fturmu\u015f olduk.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-11.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"645\" height=\"298\" class=\"aligncenter size-full wp-image-27020\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-11.png 645w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-11-300x139.png 300w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/a>Bu a\u015famadan sonra art\u0131k uygulama i\u00e7erisindeki docker-compose dosyas\u0131n\u0131<br \/>\n<code style=\"font-size:12px\">docker-compose up -d<\/code> talimat\u0131yla \u00e7al\u0131\u015ft\u0131rabiliriz. Tabi bunun i\u00e7in uygulaman\u0131n dizinine tam gelindi\u011finden emin olmal\u0131y\u0131z&#8230;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-12.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"590\" height=\"294\" class=\"aligncenter size-full wp-image-27021\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-12.png 590w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-12-300x149.png 300w\" sizes=\"auto, (max-width: 590px) 100vw, 590px\" \/><\/a><\/p>\n<h4>Uygulamay\u0131 Herkes Taraf\u0131ndan Eri\u015fime A\u00e7\u0131k Hale Getirme<\/h4>\n<p>Bu a\u015famadan sonra art\u0131k yap\u0131lmas\u0131 gereken uygulaman\u0131n herkes taraf\u0131ndan eri\u015fime a\u00e7\u0131k hale getirilmesidir. Bunun i\u00e7in a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi AWS Management Console \u00fczerinden EC2 instance&#8217;\u0131na gelelim ve &#8216;Security&#8217; \u00fczerinden 80 portuna gelecek olan trafi\u011fe izin verelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme.gif\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2&#039;de Host Etme\" width=\"800\" height=\"383\" class=\"aligncenter size-full wp-image-27023\" \/><\/a><\/p>\n<blockquote><p><em style=\"color:orange;\">Dikkat!<\/p>\n<p>Github&#8217;dan uygulamay\u0131 klonlama a\u015famas\u0131nda a\u015fa\u011f\u0131dakine benzer hata al\u0131yorsan\u0131z e\u011fer;<\/p>\n<div style=\"color:red;font-size:12px;text-align:center;\">unable to access &#8216;https:\/\/github.com\/gncyyldz\/Amazon.EC2.Hosting.Example\/&#8217;: Failed to connect to github.com port 443 after 131206 ms: Couldn&#8217;t connect to server<\/div>\n<p>\u0130lgili EC2 instance&#8217;\u0131n\u0131n security groups alan\u0131ndan &#8216;Outbound rules&#8217; sekmesine gelerek gelen t\u00fcm trafi\u011fe a\u015fa\u011f\u0131daki gibi rule tan\u0131m\u0131nda bulunulmas\u0131 gerekmektedir!<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-13.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"1250\" height=\"182\" class=\"aligncenter size-full wp-image-27026\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-13.png 1250w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-13-300x44.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-13-1024x149.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-13-768x112.png 768w\" sizes=\"auto, (max-width: 1250px) 100vw, 1250px\" \/><\/a><br \/>\n<\/em><\/p><\/blockquote>\n<h4>Test Etme<\/h4>\n<p>Art\u0131k yapt\u0131\u011f\u0131m\u0131z bu \u00e7al\u0131\u015fmay\u0131 test edebiliriz. Bunun i\u00e7in EC2 instance&#8217;\u0131n\u0131n public adresini kopyalayal\u0131m ve Postman \u00fczerinden endpoint&#8217;lere testlerimizi ger\u00e7ekle\u015ftirelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-14.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-14.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"473\" height=\"56\" class=\"aligncenter size-full wp-image-27027\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-14.png 473w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-14-300x36.png 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-15.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-15.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"1060\" height=\"237\" class=\"aligncenter size-full wp-image-27028\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-15.png 1060w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-15-300x67.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-15-1024x229.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-15-768x172.png 768w\" sizes=\"auto, (max-width: 1060px) 100vw, 1060px\" \/><\/a><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-16.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-16.png\" alt=\"Asp.NET Core Web API Uygulamas\u0131n\u0131 Amazon EC2\u2019de Host Etme\" width=\"1036\" height=\"396\" class=\"aligncenter size-full wp-image-27029\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-16.png 1036w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-16-300x115.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-16-1024x391.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2024\/05\/Asp.NET-Core-Web-API-Uygulamasini-Amazon-EC2de-Host-Etme-16-768x294.png 768w\" sizes=\"auto, (max-width: 1036px) 100vw, 1036px\" \/><\/a>Burada \u00f6zellikle dikkat edilmesi gereken nokta \u015fudur ki, request ataca\u011f\u0131n\u0131z public adresin https de\u011fil http protokol\u00fcne sahip olmas\u0131na \u00f6zen g\u00f6sterilmelidir. Aksi taktirde istek neticesinde connect ECONNREFUSED hatas\u0131 al\u0131rs\u0131n\u0131z.<\/p>\n<p>Nihai olarak;<br \/>\nBu i\u00e7eri\u011fimizde Asp.NET Core Web API mimarisinde geli\u015ftirdi\u011fimiz bir uygulamay\u0131 Amazon EC2 Linux instance&#8217;\u0131nda host etmi\u015f ve bunun i\u00e7in gerekli olan yap\u0131land\u0131rmalar\u0131 ele alm\u0131\u015f bulunuyor ve bunlar\u0131n yan\u0131nda .NET 7&#8217;de gelmi\u015f olan built-in container deste\u011fini de tecr\u00fcbe etmi\u015f oluyoruz.<\/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 projeye a\u015fa\u011f\u0131daki github adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/Amazon.EC2.Hosting.Example\/\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/Amazon.EC2.Hosting.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, Amazon EC2(Elastic Compute Cloud), Amazon Web Service&#8217;leri taraf\u0131ndan sunulan y\u00fcksek oranda \u00f6l\u00e7eklenebilir ve esnek bir cloud servisidir. Bu servis \u00fczerinde kendi uygulamalar\u0131m\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rabilece\u011fimiz, uygulaman\u0131n bellek veya CPU gibi gereksinimlerine uygun \u00e7e\u015fitli t\u00fcrler \u00fczerinden&#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":27033,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5059,4730],"tags":[5054,5055,5060,5056,5058,5057],"class_list":["post-26999","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-amazon-ec2","category-aws","tag-amazon-ec2","tag-amazon-ec2-hosting","tag-elastic-compute-cloud","tag-putty","tag-putty-nedir","tag-ssh"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26999","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=26999"}],"version-history":[{"count":13,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26999\/revisions"}],"predecessor-version":[{"id":27035,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26999\/revisions\/27035"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/27033"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=26999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=26999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=26999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}