Bu modülde, node.js uygulamasını birbirine bağlı birkaç hizmete ayıracak ve her hizmetin görüntüsünü bir Amazon Elastic Container Registry (Amazon ECR) deposuna göndereceksiniz. Oluşturmaya Başlayın

Nihai uygulama mimarisi, Amazon Elastic Container Service (Amazon ECS) ve Application Load Balancer (ALB) kullanır. 

mimariye genel bakış

a. İstemci
İstemci, trafik isteklerini 80 numaralı bağlantı noktası üzerinden gerçekleştirir.

b. Yük Dengeleyici
ALB, dışarıdan gelen trafiği doğru hizmete yönlendirir. ALB, istemci isteğini inceleyip yönlendirme kurallarını kullanarak kurala uyan hedef grubu için isteği bir bulut sunucusuna ve bağlantı noktasına yönlendirir.

c. Hedef Grupları
Her hizmetin, bu hizmet için çalışan her container’a ait bulut sunucularını ve bağlantı noktalarını takip eden bir hedef grubu vardır.

d. Mikro Hizmetler
Amazon ECS, her hizmeti bir EC2 kümesi genelinde bir container’a dağıtır. Her container sadece tek bir özelliği idare eder.

Kilitlenmelerin Yalıtımı
En iyi mühendislik kuruluşları bile üretimde ölümcül kilitlenmelerle karşılaşabilir. Kilitlenmeleri titizlikle ele almak için tüm standart en iyi uygulamaları takip etmenin yanında, bu tür kilitlenmelerin etkisini sınırlandırabilecek bir başka yaklaşım da mikro hizmetler geliştirmektir. İyi mikro hizmet mimarisinin göstergesi, hizmetinizin bir mikro parçasının kilitlenmesi halinde, hizmetinizin sadece o parçasının çalışmasının durmasıdır. Hizmetinizin geri kalan kısmı gerektiği gibi çalışmaya devam edebilir.

Güvenlik Amaçlı Yalıtım
Tek parçadan oluşan bir uygulamanın bir özelliğinde, örneğin uzaktan kod yürütmeyi mümkün kılan güvenlik açığı gibi bir güvenlik ihlali meydana gelirse, bir saldırganın sistemin tüm diğer özelliklerine de erişim kazanmış olabileceğini varsaymanız gerekir. Bu, örneğin avatar yükleme özelliğinizde kullanıcı parolaları içeren veritabanınızın gizliliğinin bozulmasıyla sonuçlanacak bir güvenlik sorunu bulunduğu durumlarda tehlikeli olabilir. Özellikleri Amazon ECS kullanarak mikro hizmetlere ayırmanız, her hizmete kendi AWS Identity and Access Management (IAM) görevini vererek AWS kaynaklarına erişimi güvence altına almanıza olanak tanır. Mikro hizmet en iyi uygulamalarına uyulması halinde, bir saldırgan bir hizmetin gizliliğini bozduğunda sadece o hizmetin kaynaklarına erişim elde eder ve başka hizmetlere zorla girmeden bu hizmetlerin kaynaklarına yatay olarak erişim sağlayamaz.

Bağımsız Ölçeklendirme
Özellikler mikro hizmetlere ayrıldığında, her mikro hizmet sınıfı tarafından kullanılan altyapı miktarı ve bulut sunucusu sayısı yukarı ve aşağı yönde bağımsız olarak ölçeklendirilebilir. Bu sayede, belirli bir özelliğin maliyeti daha kolay ölçülebilir ve öncelikli olarak optimize edilmesi gereken özellikler daha kolay tespit edilebilir. Belirli bir özelliğin kaynak ihtiyaçları ile ilgili sorun yaşaması durumunda, diğer özellikler etkilenmez ve güvenilir performans sürdürülebilir.

Geliştirme Hızı
Mikro hizmetler geliştirme risklerini azaltır ve bu sayede ekipler geliştirme hızlarını artırabilir. Tek parçalı bir uygulamada yeni bir özellik ekleme, potansiyel olarak bu tek parçalı uygulamanın içerdiği diğer tüm özellikleri etkileyebilir. Geliştiricilerin ekledikleri kodların yaratacağı etkiyi dikkatle göz önüne alması ve herhangi bir şeye zarar vermeyeceklerinden emin olmaları gerekir. Diğer taraftan, düzgün bir mikro hizmet mimarisi yeni bir hizmete eklenecek yeni bir özellik için yeni koda sahiptir. Geliştiriciler, açık bir şekilde iki mikro hizmet arasında bağlantı oluşturacak bir kod yazmadıkları sürece, yazdıkları hiçbir kodun mevcut kodu hiçbir şekilde etkileyemeyeceği konusunda rahat olabilir.

Tamamlama Süresi:20 dakika

Kullanılan Hizmetler:


Tek parça uygulamayı ayırmak için aşağıda adım adım gösterilen talimatları takip edin. Bölümü genişletmek için her adımın numarasını seçin.

  • 1. Adım ECR Depolarını Tedarik Etme

    Önceki iki modülde, tek bir hizmet ve tek bir container görüntü deposu kullanarak uygulamanızı bir tek parça uygulama olarak dağıttınız. Uygulamayı üç mikro hizmet olarak dağıtmak için Amazon ECR’de üç depo (her hizmet için bir tane) tedarik etmeniz gerekecektir.

    Üç hizmetimiz şunlardır:

    1. kullanıcılar
    2. iş parçacıkları
    3. gönderiler

    Üç depoyu, her hizmet için aşağıdaki adımları tekrar ederek oluşturun:

    • Amazon ECR konsolu’na gidin.
    • Depo oluştur’u seçin.
    • Depo oluştur sayfasında, Depo adı alanında hizmet (gönderiler, iş parçacıkları veya kullanıcılar) için bir depo oluşturun.
      ⚐ Not: Etiket değişmezliği seçenekleri için varsayılan ayarları koruyun.

    Amazon ECR’de dört deponuz olmalıdır. Oluşturduğunuz her mikro hizmet için depo bilgilerini kaydedin. Bu bilgiler ilerleyen adımlardan birinde gerekli olacaktır. İhtiyaç duyduğunuz bilgiler aşağıdaki formattadır:
    [account-id].dkr.ecr.[region].amazonaws.com/[service-name]

    depolar
  • 2. Adım. AWS ile Docker Kimliğini Doğrulama (isteğe bağlı)

    Her hizmet için görüntüler oluşturmak ve bu görüntüleri göndermek için Docker erişimine ihtiyacınız olacaktır. Bu öğretici üzerinde farklı zamanlarda çalışıyorsanız Docker oturumunuz kapatılmış olabilir. Durum buysa Docker’da tekrar oturum açmak için aşağıdaki adımları izleyin.

    •  $(aws ecr get-login --no-include-email --region [your-region]) öğesini çalıştırın
      [your-region] öğesini değiştirin, örneğin: $(aws ecr get-login --no-include-email --region us-west-2)

    Kimlik doğrulama başarılı olduysa şu onay mesajını alırsınız: Oturum Açma Başarılı.

  • 3. Adım Her Hizmet için Görüntüler Oluşturun ve Gönderin

    amazon-ecs-nodejs-microservices/3-microservices/services proje klasöründe her hizmet için dosyalar barındıran klasörlere sahip olacaksınız. Her mikro hizmetin aslında önceki tek parça uygulamanın bir kopyası olduğuna dikkat edin.

    Her hizmette ve tek parça uygulama api hizmetinde yer alan db.json dosyasını karşılaştırarak her hizmetin artık özelleştirilmiş olduğunu görebilirsiniz. Önceden gönderilerin, iş parçacıklarının ve kullanıcıların tümü tek bir veritabanı dosyasında depolanıyordu. Artık her biri kendi hizmetine ait veritabanı dosyasında depolanıyor.

    Terminalinizi açıp yolunuzu ~/amazon-ecs-nodejs-microservices/3-microservices/services olarak ayarlayın

    Her Görüntüyü Oluşturun ve Etiketleyin

    • Terminalde docker build -t [service-name] ./[service-name] öğesini çalıştırın
      [service-name] öğesini değiştirin, örneğin: docker build -t posts ./posts

    • Oluşturma işlemi tamamlandığında, depoya gönderebilmek için görüntüyü etiketleyin:
      docker tag [service-name]:latest [account-ID].dkr.ecr.[region].amazonaws.com/[service-name]:v1
      [service-name], [account-ID] ve [region] öğelerini değiştirin, örneğin: docker tag posts:latest [account-id].dkr.ecr.us-west-2.amazonaws.com/posts:v1

    • Görüntünüzü ECR’ye gönderin: docker push [account-id].dkr.ecr.[region].amazonaws.com/[service-name]:v1
      [service-name], [account-ID] ve [region] öğelerini değiştirin.

    ECR deponuza gittiğinizde, görüntülerinizin v1 ile etiketlenmiş olduğunu görmelisiniz. 

    ♻ Bu adımları her bir mikro hizmet görüntüsü için tekrar edin.  

    ⚐ NOT: Üç görüntünün tamamını da oluşturup etiketlediğinizden emin olun.