İçeriğe geç
Eren Gaygusuz
Geri dön

ASP.NET Core Web API'yi AWS EC2 Üzerinde Yayınlama

Bu yazıda bir ASP.NET Core Web API projesini AWS EC2 üzerindeki Linux sanal makinede yayınlıyorum. Uygulama Docker ile paketleniyor, Docker Hub’a gönderiliyor, EC2 sunucusunda çekiliyor ve public adres üzerinden test ediliyor.

Akış oldukça pratik: önce EC2 instance hazırlanıyor, gerekli inbound portları açılıyor, sunucuya bağlanılıp Docker kuruluyor, Web API image’ı oluşturuluyor ve son aşamada container doğru port mapping ile çalıştırılıyor.

ASP.NET Core Web API'nin yerel geliştirme ortamından Docker ve AWS EC2'ye dağıtım akışı

İçindekiler

İçindekileri aç

EC2 Instance Hazırlığı

AWS Console üzerinden API’yi barındıracak Linux EC2 instance’ı oluşturun. Bu aşamada seçilen makine imajı, instance tipi, disk ayarı ve key pair bilgisi hem sunucu erişimini hem de sonraki dağıtım adımlarını etkiler.

AWS Management Console ekranını açma

Bu ekranda AWS hesabına e-posta veya alias ile giriş yapma adımını görüyoruz.

AWS hesabına e-posta veya alias ile giriş yapma

Bu ekranda AWS giriş güvenlik kontrolünü tamamlama adımını görüyoruz.

AWS giriş güvenlik kontrolünü tamamlama

Bu ekranda AWS hesabı parolasını girme adımını görüyoruz.

AWS hesabı parolasını girme

Bu ekranda AWS Management Console ana sayfasını görüntüleme adımını görüyoruz.

AWS Management Console ana sayfasını görüntüleme

EC2 servisini açıp yeni instance başlatma akışına girin. Bu örnekte uygulama Docker container içinde çalışacağı için Linux tabanlı bir imaj yeterlidir.

EC2 instances sayfasını açma

Bu ekranda EC2 launch instance akışını başlatma adımını görüyoruz.

EC2 launch instance akışını başlatma

Bu ekranda Kullanılabilir Amazon Machine Image seçeneklerini inceleme adımını görüyoruz.

Kullanılabilir Amazon Machine Image seçeneklerini inceleme

Bu ekranda EC2 instance için Linux AMI seçme adımını görüyoruz.

EC2 instance için Linux AMI seçme

Beklenen ihtiyaca göre instance tipini seçin. Öğrenme veya test amaçlı kullanımda düşük maliyetli ya da free tier uyumlu bir seçenek genellikle yeterlidir. Ardından network, storage ve tag ayarlarını kontrol edin.

EC2 instance type seçimi

Bu ekranda EC2 instance detaylarını yapılandırma adımını görüyoruz.

EC2 instance detaylarını yapılandırma

Bu ekranda EC2 instance storage ayarlarını yapılandırma adımını görüyoruz.

EC2 instance storage ayarlarını yapılandırma

Bu ekranda EC2 instance için isteğe bağlı tag ekleme adımını görüyoruz.

EC2 instance için isteğe bağlı tag ekleme

İlk security group kurallarını instance oluştururken belirleyebilirsiniz. SSH erişimi için port 22 gerekir. Web API’nin dışarı açılacağı portu bu aşamada veya daha sonra security group ekranından ekleyebilirsiniz.

Launch sırasında EC2 security group yapılandırması

Bu ekranda İlk EC2 security group kuralını inceleme adımını görüyoruz.

İlk EC2 security group kuralını inceleme

Instance ayarlarını son kez kontrol edin. AWS key pair istediğinde yeni bir anahtar oluşturun veya mevcut anahtarı seçin ve private key dosyasını indirin. Bu dosya SSH bağlantısı için gereklidir, bu yüzden güvenli bir yerde tutulmalıdır.

EC2 instance launch ayarlarını gözden geçirme

Bu ekranda EC2 key pair seçme penceresini açma adımını görüyoruz.

EC2 key pair seçme penceresini açma

Bu ekranda EC2 key pair adını belirleme veya seçme adımını görüyoruz.

EC2 key pair adını belirleme veya seçme

Bu ekranda EC2 private key pair dosyasını indirme adımını görüyoruz.

EC2 private key pair dosyasını indirme

Bu ekranda EC2 private key dosyasını yerel bilgisayara kaydetme adımını görüyoruz.

EC2 private key dosyasını yerel bilgisayara kaydetme

Bu ekranda İndirilen PEM key dosyasını masaüstünde doğrulama adımını görüyoruz.

İndirilen PEM key dosyasını masaüstünde doğrulama

Key pair hazır olduğunda instance’ı başlatın ve running durumuna gelmesini bekleyin.

Key pair seçildikten sonra EC2 launch işlemini onaylama

Bu ekranda EC2 instance launch status ekranı adımını görüyoruz.

EC2 instance launch status ekranı

Bu ekranda EC2 instance oluşturma işleminin başarıyla tamamlanması adımını görüyoruz.

EC2 instance oluşturma işleminin başarıyla tamamlanması

Bu ekranda Yeni oluşturulan EC2 instance’ı instances listesinde görüntüleme adımını görüyoruz.

Yeni oluşturulan EC2 instance'ı instances listesinde görüntüleme

Bu ekranda EC2 instance’ın çalışır durumda olduğunu doğrulama adımını görüyoruz.

EC2 instance'ın çalışır durumda olduğunu doğrulama

Gerekli Portları Açma

Instance üzerinde SSH ve API endpoint’i için inbound trafiğe izin verilmelidir. Bu örnekte Web API bir HTTP portu üzerinden dışarı açıldığı için ilgili portun security group içinde tanımlanması gerekir.

EC2 security groups listesini açma

Bu ekranda Seçili EC2 security group için inbound rules görüntüleme adımını görüyoruz.

Seçili EC2 security group için inbound rules görüntüleme

Bu ekranda Security group detaylarını ve inbound rules listesini inceleme adımını görüyoruz.

Security group detaylarını ve inbound rules listesini inceleme

Inbound rule düzenleme ekranını açın ve API container için kullanılacak portu ekleyin. Kişisel testlerde geniş bir kaynak aralığı kullanılabilir; canlı ortamda ise erişim mümkün olduğunca dar tutulmalıdır.

EC2 security group inbound rules düzenleme

Bu ekranda API portu için inbound rule ekleme adımını görüyoruz.

API portu için inbound rule ekleme

Bu ekranda Inbound rule için kaynak aralığını seçme adımını görüyoruz.

Inbound rule için kaynak aralığını seçme

Bu ekranda EC2 security group inbound rules kaydetme adımını görüyoruz.

EC2 security group inbound rules kaydetme

Bu ekranda EC2 security group inbound rules başarıyla güncellendi bildirimi adımını görüyoruz.

EC2 security group inbound rules başarıyla güncellendi bildirimi

Bu ekranda Yeni inbound rule satırının listede göründüğünü doğrulama adımını görüyoruz.

Yeni inbound rule satırının listede göründüğünü doğrulama

Instance detaylarına dönün ve public IP ya da public DNS bilgisini alın. Bu adres hem SSH bağlantısında hem de daha sonra API testinde kullanılacaktır.

EC2 instances sayfasına geri dönme

Bu ekranda EC2 public IP ve public DNS bilgilerini görüntüleme adımını görüyoruz.

EC2 public IP ve public DNS bilgilerini görüntüleme

EC2’ye Bağlanma ve Docker Kurma

İndirilen PEM dosyasını kullanarak SSH ile EC2 instance’a bağlanın. Bağlantıdan sonra paket depolarını güncelleyin ve Docker kurulumu için gerekli paketleri yükleyin.

Slaytlardaki SSH komutu PEM key dosyası ve EC2 public DNS adresiyle çalışıyor. Bu değerleri kendi instance’ınızdaki key ve host bilgisiyle değiştirmeniz gerekir:

ssh -i minimal-api-key-pair.pem ec2-user@ec2-54-93-109-88.eu-central-1.compute.amazonaws.com

Bu ekranda Terminal üzerinden SSH ile EC2 instance’a bağlanma adımını görüyoruz.

Terminal üzerinden SSH ile EC2 instance'a bağlanma

Bağlantı başarılı olduktan sonra Amazon Linux sunucusundaki paketleri güncelleyin:

sudo yum update

Bu ekranda SSH bağlantısından sonra ilk paket komutlarını çalıştırma adımını görüyoruz.

SSH bağlantısından sonra ilk paket komutlarını çalıştırma

Bu ekranda EC2 Linux sunucusunda paket metadata güncelleme adımını görüyoruz.

EC2 Linux sunucusunda paket metadata güncelleme

Bu ekranda EC2 üzerinde Docker kurulumu için paket hazırlığı adımını görüyoruz.

EC2 üzerinde Docker kurulumu için paket hazırlığı

Bu ekranda EC2 üzerinde Docker bağımlılıklarını yükleme adımını görüyoruz.

EC2 üzerinde Docker bağımlılıklarını yükleme

Docker kurulduktan sonra gerekiyorsa servisi enable edip başlatın. API dağıtımına geçmeden önce basit status, version veya image/container komutlarıyla Docker’ın çalıştığını doğrulamak faydalıdır.

Bu örnekteki Amazon Linux 2 kurulumunda Docker yum ile kuruluyor ve ardından servis başlatılıyor:

sudo yum install docker -y
sudo service docker start

Docker komutlarını her seferinde sudo yazmadan çalıştırmak için EC2 kullanıcısını Docker grubuna ekleyip SSH oturumunu yeniden açabilirsiniz:

sudo usermod -a -G docker ec2-user
docker container ls

Orijinal terminal akışında izin hatasından sonra hızlı bir socket izin komutu da denenmiş:

sudo chmod 666 /var/run/docker.sock

Bu kısa test için çalışabilir, fakat production için iyi bir varsayılan değildir; Docker socket erişimini gereğinden fazla açar. Daha güvenli yaklaşım Docker grubunu kullanmak, oturumu yeniden açmak veya Docker komutlarını sudo ile çalıştırmaktır.

EC2 üzerinde Docker servisi ve kullanıcı izinlerini yapılandırma

Bu ekranda EC2 sunucusunda Docker kurulumunu kontrol etme adımını görüyoruz.

EC2 sunucusunda Docker kurulumunu kontrol etme

Bu ekranda Docker komutlarını ve sunucu durumunu doğrulama adımını görüyoruz.

Docker komutlarını ve sunucu durumunu doğrulama

Bu ekranda API image’ı için EC2 Docker ortamını hazırlama adımını görüyoruz.

API image'ı için EC2 Docker ortamını hazırlama

Bu ekranda EC2 üzerinde ek Docker kontrolleri yapma adımını görüyoruz.

EC2 üzerinde ek Docker kontrolleri yapma

Image private ise veya Docker Hub authentication sunucu tarafında hazır olsun istiyorsanız EC2 terminalinden giriş yapın:

docker login

Bu ekranda EC2 üzerinde gerekli paket kurulumunu tamamlama adımını görüyoruz.

EC2 üzerinde gerekli paket kurulumunu tamamlama

Web API’yi Dockerize Etme

ASP.NET Core Web API projesini Visual Studio’da açın ve projeye Docker desteği ekleyin. Hedef işletim sistemi olarak Linux seçildiğinde, Linux EC2 sunucusu için uygun Dockerfile oluşturulur.

ASP.NET Core Web API projesi için Visual Studio'yu açma

Bu ekranda ASP.NET Core solution veya project dosyasını seçme adımını görüyoruz.

ASP.NET Core solution veya project dosyasını seçme

Bu ekranda ASP.NET Core Web API projesini Visual Studio’da görüntüleme adımını görüyoruz.

ASP.NET Core Web API projesini Visual Studio'da görüntüleme

Bu ekranda ASP.NET Core projesine Docker desteği ekleme adımını görüyoruz.

ASP.NET Core projesine Docker desteği ekleme

Bu ekranda Docker hedef işletim sistemi olarak Linux seçme adımını görüyoruz.

Docker hedef işletim sistemi olarak Linux seçme

Bu ekranda Visual Studio’da oluşturulan Dockerfile dosyasını inceleme adımını görüyoruz.

Visual Studio'da oluşturulan Dockerfile dosyasını inceleme

Proje dizininde bir terminal açın. Docker build, tag, login ve push komutları bu konumdan çalıştırılacaktır.

Proje klasörünü açmadan önce Windows masaüstüne dönme

Bu ekranda ASP.NET Core proje klasöründen terminal açma adımını görüyoruz.

ASP.NET Core proje klasöründen terminal açma

Bu ekranda Docker komutları için PowerShell açma adımını görüyoruz.

Docker komutları için PowerShell açma

Image’ı Docker Hub’a Gönderme

Docker image’ı yerelde build edin, Docker Hub repository’sini oluşturun veya açın, ardından image’a repository adıyla tag verip push edin. EC2 üzerinde pull edeceğiniz image adı burada kullandığınız repository yolu ile aynı olmalıdır.

Proje klasöründen, Visual Studio’nun oluşturduğu Dockerfile ile image’ı build edin:

docker build -t minimal-api -f Dockerfile .

Bu ekranda PowerShell’de Docker build veya login komutları çalıştırma adımını görüyoruz.

PowerShell'de Docker build veya login komutları çalıştırma

Bu ekranda Docker Hub repositories sayfasını açma adımını görüyoruz.

Docker Hub repositories sayfasını açma

Bu ekranda Web API image’ı için Docker Hub repository oluşturma adımını görüyoruz.

Web API image'ı için Docker Hub repository oluşturma

Bu ekranda Oluşturulan Docker Hub repository detaylarını görüntüleme adımını görüyoruz.

Oluşturulan Docker Hub repository detaylarını görüntüleme

Docker Hub repository hazır olduktan sonra local image’a repository yolu ile tag verip push edin. Ekran görüntüsünde eyesoftereng/minimal-api:v0.0.1 kullanılmış; kendi ortamınızda Docker Hub kullanıcı adını ve repository adını değiştirmelisiniz:

docker tag minimal-api eyesoftereng/minimal-api:v0.0.1
docker push eyesoftereng/minimal-api:v0.0.1

Bu ekranda ASP.NET Core Web API Docker image’ını yerelde build etme adımını görüyoruz.

ASP.NET Core Web API Docker image'ını yerelde build etme

Bu ekranda Docker image’a Docker Hub repository için tag verme adımını görüyoruz.

Docker image'a Docker Hub repository için tag verme

Bu ekranda PowerShell’de Docker image build veya push çıktısı adımını görüyoruz.

PowerShell'de Docker image build veya push çıktısı

Bu ekranda Docker image’ı Docker Hub’a gönderme adımını görüyoruz.

Docker image'ı Docker Hub'a gönderme

Container’ı EC2 Üzerinde Çalıştırma

EC2 terminaline geri dönüp Docker Hub’daki image’ı pull edin ve container olarak çalıştırın. Buradaki kritik nokta port mapping’dir: security group içinde izin verdiğiniz host port, ASP.NET Core uygulamasının container içindeki portuna yönlendirilmelidir.

EC2 instance üzerinde, local makineden push ettiğiniz aynı image tag’ini çekin:

docker pull eyesoftereng/minimal-api:v0.0.1

Bu ekranda Docker Hub image’ını EC2 instance üzerinde pull etme adımını görüyoruz.

Docker Hub image'ını EC2 instance üzerinde pull etme

Ardından container’ı çalıştırın. Orijinal örnekte host tarafındaki 8282 portu, container içindeki 80 portuna yönlendiriliyor:

docker run -p 8282:80 eyesoftereng/minimal-api:v0.0.1

Container’ın arka planda çalışmasını istiyorsanız detached mode kullanabilirsiniz:

docker run -d --name minimal-api -p 8282:80 eyesoftereng/minimal-api:v0.0.1

Bu ekranda ASP.NET Core Web API container’ını EC2 üzerinde çalıştırma adımını görüyoruz.

ASP.NET Core Web API container'ını EC2 üzerinde çalıştırma

Bu ekranda Çalışan Docker container ve port mapping bilgisini kontrol etme adımını görüyoruz.

Çalışan Docker container ve port mapping bilgisini kontrol etme

Son olarak EC2 public IP veya public DNS adresini ve ayarlanan portu kullanarak API’yi tarayıcıdan ya da bir API istemcisinden test edin.

http://<ec2-public-ip>:8282

Bu ekranda Yayınlanan ASP.NET Core Web API’yi tarayıcıdan test etme adımını görüyoruz.

Yayınlanan ASP.NET Core Web API'yi tarayıcıdan test etme

Özet

Bu kurulumla ASP.NET Core Web API, AWS EC2 üzerinde Docker container içinde çalışır. Docker uygulama paketini taşınabilir hale getirir, Docker Hub image dağıtımı için basit bir merkez sağlar, EC2 security group ise dışarıdan hangi portlara erişileceğini kontrol eder.


Bu yazıyı paylaş:

Yorumlar


Önceki Yazı
AWS EC2 ile Sanal Makine Oluşturma ve Kullanma
Sonraki Yazı
IAM Kullanıcı Bilgileriyle WinSCP Üzerinden AWS S3 Dosyalarını İndirme