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.
İç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.
Bu ekranda AWS hesabına e-posta veya alias ile giriş yapma adımını görüyoruz.
Bu ekranda AWS giriş güvenlik kontrolünü tamamlama adımını görüyoruz.
Bu ekranda AWS hesabı parolasını girme adımını görüyoruz.
Bu ekranda AWS Management Console ana sayfasını görüntüleme adımını görüyoruz.
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.
Bu ekranda EC2 launch instance akışını başlatma adımını görüyoruz.
Bu ekranda Kullanılabilir Amazon Machine Image seçeneklerini inceleme adımını görüyoruz.
Bu ekranda EC2 instance için Linux AMI seçme adımını görüyoruz.
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.
Bu ekranda EC2 instance detaylarını yapılandırma adımını görüyoruz.
Bu ekranda EC2 instance storage ayarlarını yapılandırma adımını görüyoruz.
Bu ekranda EC2 instance için isteğe bağlı tag ekleme adımını görüyoruz.
İ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.
Bu ekranda İlk EC2 security group kuralını inceleme adımını görüyoruz.
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.
Bu ekranda EC2 key pair seçme penceresini açma adımını görüyoruz.
Bu ekranda EC2 key pair adını belirleme veya seçme adımını görüyoruz.
Bu ekranda EC2 private key pair dosyasını indirme adımını görüyoruz.
Bu ekranda EC2 private key dosyasını yerel bilgisayara kaydetme adımını görüyoruz.
Bu ekranda İndirilen PEM key dosyasını masaüstünde doğrulama adımını görüyoruz.
Key pair hazır olduğunda instance’ı başlatın ve running durumuna gelmesini bekleyin.
Bu ekranda EC2 instance launch status ekranı adımını görüyoruz.
Bu ekranda EC2 instance oluşturma işleminin başarıyla tamamlanması adımını görüyoruz.
Bu ekranda Yeni oluşturulan EC2 instance’ı instances listesinde görüntüleme adımını görüyoruz.
Bu ekranda EC2 instance’ın çalışır durumda olduğunu doğrulama adımını görüyoruz.
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.
Bu ekranda Seçili EC2 security group için inbound rules görüntüleme adımını görüyoruz.
Bu ekranda Security group detaylarını ve inbound rules listesini inceleme adımını görüyoruz.
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.
Bu ekranda API portu için inbound rule ekleme adımını görüyoruz.
Bu ekranda Inbound rule için kaynak aralığını seçme adımını görüyoruz.
Bu ekranda EC2 security group inbound rules kaydetme adımını görüyoruz.
Bu ekranda EC2 security group inbound rules başarıyla güncellendi bildirimi adımını görüyoruz.
Bu ekranda Yeni inbound rule satırının listede göründüğünü doğrulama adımını görüyoruz.
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.
Bu ekranda EC2 public IP ve public DNS bilgilerini görüntüleme adımını görüyoruz.
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.
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.
Bu ekranda EC2 Linux sunucusunda paket metadata güncelleme adımını görüyoruz.
Bu ekranda EC2 üzerinde Docker kurulumu için paket hazırlığı adımını görüyoruz.
Bu ekranda EC2 üzerinde Docker bağımlılıklarını yükleme adımını görüyoruz.
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.
Bu ekranda EC2 sunucusunda Docker kurulumunu kontrol etme adımını görüyoruz.
Bu ekranda Docker komutlarını ve sunucu durumunu doğrulama adımını görüyoruz.
Bu ekranda API image’ı için EC2 Docker ortamını hazırlama adımını görüyoruz.
Bu ekranda EC2 üzerinde ek Docker kontrolleri yapma adımını görüyoruz.
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.
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.
Bu ekranda ASP.NET Core solution veya project dosyasını seçme adımını görüyoruz.
Bu ekranda ASP.NET Core Web API projesini Visual Studio’da görüntüleme adımını görüyoruz.
Bu ekranda ASP.NET Core projesine Docker desteği ekleme adımını görüyoruz.
Bu ekranda Docker hedef işletim sistemi olarak Linux seçme adımını görüyoruz.
Bu ekranda Visual Studio’da oluşturulan Dockerfile dosyasını inceleme adımını görüyoruz.
Proje dizininde bir terminal açın. Docker build, tag, login ve push komutları bu konumdan çalıştırılacaktır.
Bu ekranda ASP.NET Core proje klasöründen terminal açma adımını görüyoruz.
Bu ekranda Docker komutları için PowerShell açma adımını görüyoruz.
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.
Bu ekranda Docker Hub repositories sayfasını açma adımını görüyoruz.
Bu ekranda Web API image’ı için Docker Hub repository oluşturma adımını görüyoruz.
Bu ekranda Oluşturulan Docker Hub repository detaylarını görüntüleme adımını görüyoruz.
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.
Bu ekranda Docker image’a Docker Hub repository için tag verme adımını görüyoruz.
Bu ekranda PowerShell’de Docker image build veya push çıktısı adımını görüyoruz.
Bu ekranda Docker image’ı Docker Hub’a gönderme adımını görüyoruz.
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.
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.
Bu ekranda Çalışan Docker container ve port mapping bilgisini kontrol etme adımını görüyoruz.
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.
Ö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.
Yorumlar