[ ECS — VIII] Application Load Balancer ile ECS Fargate Service Oluşturma

Tahacan Atak
5 min readJun 25, 2021

--

Application Load Balancer, application katmanında (HTTP/HTTPS) yönlendirme kararları alır, path-based routing’i destekler. Gelen istekleri clusterdaki bir veya daha fazla taskın bağlantı noktasına yönlendirir.

Biz de bu bölümde bir application load balancer oluşturup gelen istekleri ECS Servislerinde çalışan tasklara yönlendireceğiz. Yazı serisinde kullandığımız uygulamanın faydasını da burada göreceğiz. Kullandığımız uygulama bize task’a atanan ENI private ipsini dönüyordu. Oluşturacağımız load balancerin DNS Name adresinden istek gönderdikçe uygulamanın döndüğü private iplerin değiştiğini göreceğiz. Bu da bize load balancerın gelen istekleri çalışan tasklara dağıttığının canlı bir örneği olacak.

EC2 dashboardunda sağda bulunan menüden load balancer gidip Create Load Balancer butonuna tıklayarak uygulama aşamasına geçelim. Açılan menüde Application Load Balancer’ı seçiyoruz.

Create Application Load Balancer Step 1

Load balancerınıza bir isim girdikten sonra default vpc ve public subnetlerinizi seçip Step 3:Configure Security Group adımına geçebilirsiniz.

Create Application Load Balancer Step 3

Bu adımda oluşturacağımız load balancer’ın trafiğini kontrol eden security group’un kurallarını belirliyoruz. Bizim senaryomuzda 80 portunu trafiğe açmamız yeterli.

Create Application Load Balancer Step 4

Burada da tasklarımızı register edeceğimiz target group’u oluşturuyoruz. Target type olarak IP seçmeyi unutmayınız. Review adımına gelerek application load balancerımızı oluşturabiliriz.

ECS dashboarduna gidip oluşturduğumuz clusterda yeni fargate service’ımızı oluşturalım.

Bir önceki bölümde olduğu gibi oluşturduğumuz task definition ve cluster’ı secip iki adet task calışacak şekilde ayarlarımızı yapalım.

Step 2 ‘de load balancer için oluşturduğumuz security group’un Security Group ID si gerekli. Load balancer dashboardunda oluşturduğumuz load balancer’ın detay kısmında bunu öğrenebiliriz. Aynı zamanda aşağıdaki alanda load balancer’ın DNS Name de işaretledim. Buna da birazdan ihtiyaç duyacağız.

Load Balancer Description Tab

Step 2 Configure Network adımına geçebiliriz. Burada daha önce yaptığımız gibi Default Vpc ve Public Subnetleri seçiyoruz. Security Group’a edit diyerek yeni bir security group oluşturalım. Oluşturacağımız Security Group da inbound rule olarak All TCP seçip source group olarak load balancera bakan Security Group ID’yi açılan dropdown bulup seçelim.

Load Balancing sekmesinden type olarak Application Load Balancer’ı seçelim.

Oluşturmuş olduğumuz fargate-tg isimli target group’u seçiyoruz. Çalışacak tasklar bu target group’a register olacak. Review adımına geçerek configurasyonlarınızı kontrol edebilirsiniz.

Service Review Step

Artık fargate servicemizi iki tane task çalışacak şekilde oluşturduk. Tasklarımız running durumuna geldiğinde yukarıda Load Balancer Detaylarında DNS Name’mi işaretlemiştim. Adresi tarayıcınıza kopyalarak uygulamamıza erişelim.

Tarayıcınızı yenilediğiniz uygulamanın dönmüş olduğu IP’nin değiştiğini göreceksiniz. Artık load balancerımızın arkadasında iki adet taskımız calışıyor. Gönderdiğimiz requestleri load balancer target groupta register durumda olan tasklara dağıtıyor.

EC2 dashboardundan oluşturduğumuz target group’un detaylarına baktığınızda register olan tasklarımızı görebilirsiniz.

Target Group Details

Yazıyı sonlandırmadan yazı içerisinde odağınızı cok dagıtmamak için değinmediğim iki konuya daha not başlığı altında değinmek istiyorum.

NOT 1 !!!

Application Load Balancer, kaynakların(EC2, task gibi) durumlarını test etmek için target grouplara kayıtlı olan kaynaklara periyodik olarak sizin belirlediğiniz ayarlara göre istekler gönderir. Bu testlere health check denir.

Healt Check Config

Yukarıdaki ayarları örnek alacak olursak;

30 saniye aralıklarla path olarak belirlenen (“/”) yola istek atılır. Atılan istek Http 200 koduyla response alırsa uygulamanız sağlıklıdır. Eğer dönen response ile sizin belirlediğiniz ayarlar uyuşmaz ise target unhealthy olarak işaretlenir. Bir targetin unhealthy olarak işaretlenmesi için iki adet uyuşmayan response olması gereklidir. Bir targetin healthy olarak işaretlenmesi için beş adet ayarlarımız ile eşleşen response olması gereklidir.

Bizim senaryomuzda targettaki tasklarımızda birisi unhealthy olarak işaretlenirse bu taskın çalışması durdurulur ve service bu task yerine yeni bir task çalıştırır.

Bizim uygulamamızda health check yolu için “/” yeterli. Eğer uygulamanız farklı bir endpointte (www.example.com/swagger/index.html gibi) çalışıyorsa health check için Health Check Path’i (/swagger/index.html) düzenlemeniz gerekir.

NOT 2 !!!

Bir önceki yazıda çalıştırdığımız tasklara task ‘ın detayından public ip den erişiyorduk. Bu yazımızda çalışan tasklara erişmeye çalışalım bakalım ne ile karşılacağız.

Gördüğünüz gibi artık tasklarımıza public ipden erişemiyoruz. Bunun nedeni security groupta oluşturduğumuz kurallara takılıyoruz.Service oluştururken Step 2 Configure Network adımında oluşturmuş olduğumuz bir security group vardı.

Çalışan taskımıza public ip’den erişememizin tek sebebi burda belirttiğimiz inbound rule’dur. Uygulamamıza sadece load balancer üzerinden erişebilecek şekilde ayarladık. Burdaki kuralı şunu söyler; Bana isteklerinden sadece source group’da belirtilmiş olan security group id ile ilişkilendirilmiş olan kaynakları kabul ederim. Bu sebeple uygulamamıza public ip üzerinden erişemiyoruz.

[ ECS — II ] Kullanılacak Servislerin Tanıtımı ve IAM Rolleri Oluşturulması (✓)

[ ECS — III] ECS Terminoloji (✓)

[ ECS — IV] Docker Imageları ECR Repositorylerinde Yayınlama (✓)

[ ECS — V] ECS Fargate Task Definition Oluşturma (✓)

[ ECS — VI] ECS Fargate Task Çalıştırma (✓)

[ ECS — VII] ECS Fargate Service Oluşturma (✓)

[ ECS — VIII] Application Load Balancer ile ECS Fargate Service Oluşturma (✓)

[ ECS — IX] Rolling Update vs Blue/Green Deployment (✓)

[ ECS — X] Github Projesini CodeCommit Reposuna Taşıma (Migrate a repo from GitHub to AWS CodeCommit) (✓)

[ ECS — XI] AWS CodeBuild Servisi ile ECS Fargate (✓)

[ ECS — XII] CodePipeline ile ECS Fargate(Rolling Update) (✓)

[ ECS — XIII] CodePipeline ile ECS Fargate(Blue/Green Deployment) (✓)

--

--