Elastic Beanstalk

Elastic Beanstalk farklı programlama dilleriyle geliştirilen web uygulamalarını Apache, Nginx gibi web serverlarında deploy etmek için kullanılır. Uçtan uca web aplikasyon yöneticisi diyebiliriz. Developer'lar hızlı bir şekilde geliştirdikleri kodları deploy edip deneme yapabilirler. Arka planda kapasite ayarlanması, auto scaling, load balancing, health check gibi işlemler AWS tarafından halledilir. Beanstalk kullanmasa idik tüm diğer servisleri bizim oluşturmamız ve yönetmemiz gerekecekti.

Java,.NET, Node.js, PHP, Mysql, Python, Go, ve Docker gibi dillerde veya frameworklerde uygulama geliştirebiliriz. Geliştirilen uygulamaları konsol üzerinden, Elastic Beanstalk CLI vasıtasıyla veya Visual Studio ve Eclipse gibi IDE'ler ile deploy edebiliriz.

40'dan fazla metrik ile sağlık kontrolü yapabilir cloudwatch servisi entegrasyonu sayesinde uygulamamızın performansını gecikme değerlerini vs. takip edebilir alarmlar kurabiliriz.

Uygulamaların son versiyon güncellemelerini otomatik olarak alabilirsiniz.

Elastic Load Balancing ve Auto Scaling sayesinde tamamen AWS'in yönettiği şekilde uygulamamızı ölçeklendirebilir ve birden fazla AZ'de kurulayabiliriz.

Uygulama dosyalarımızı ve server loglarımız önceden yaptığımız ayarlarla belirli periyotlarla S3'te otomatik depolanabilir. Not: Uygulamanızı silerseniz S3 bucket'ın boşaltılması otomatik gerçekleşmez bizim sorumluluğumuzdadır.

En önemli kısmı, bu servisi kullanmak ücretsizdir 😂. Bu servis ile oluşturulan servislerin kullandığımız ölçüde ödemesi yapılır.

Elastic Beanstalk Komponentleri

1- Application: Environment, Configuration, versions .... gibi componentlerin birleşmi.

2- Application Version: Bir application oluşturduktan sonra üzerinde değişiklik yaparak farklı versiyonlar oluşturabiliyoruz. Birden fazla version olabilir ama bir tanesi deployed olabilir.

3- Environment: Uygulamayı çalıştırmak için oluşturulan AWS kaynaklarının toplamıdır. AWS gerekli kaynakları kendisi oluşturur. Çalışan application için geçerlidir yani tek versiyon için. 2 çeşidi vardır.

a- Web Environment: İlki bildiğimiz klasik model dışarıdan gelen HTTP istekleri ELB'ye ulaşır ve dağılır.

b- Worker Envirenment: Burada SQS servisinden gelen mesajlar EC2 ya yönlendirilir. Mesaj sayısı arttıkça ASG ona göre çalışır. Backend tarafı diyebiliriz.

Kullanılan Platformlar:

Docker, Go, Java SE, Tomcat, .NET Core on Linux, .NET on Windows Server, Node.js, PHP, Python, Ruby platformlarını destekler.


Şimdi konsola geçelim bir uygulama yapalım. Arama çubuğuna Beanstalk yazalım. Create Application'a tıklayalım.

Öncelikle isim veriyoruz. Platform kısmından da yukarıda bahsettiğimiz platformlarda birini seçiyoruz. Platform, bir programla dili uygulamasının işletim sistemi üzerinde koşmuş halidir. Ben python seçtim. Versiyonu, AMI'ı kendisi seçti.

Üstteki menünün devamını görüyoruz. İlk seçenek örnek kod üzerinden deneme yapabilirsiniz, veya ikinci seçenek olan kendi hazırladığınızı kodu local'den veya S3'ten yükleyebilirsiniz. Biz örnek üzerinden gideceğiz sample application seçelim. Herhangi bir farkı yok diğerinde de .rar dosyasını yükleyecektik. Label ile Beanstalk tarafından oluşturulan kaynaklara tag'leme yapılır. Create application seçip başlatabilir veya hemen solundan konfigurasyon ayarları yapabilirsiniz. Biraz konfigurasyona bakalım.

Instance olarak bir adet seçebilir ve free tier kapsamında kalabilirsiniz.

Bir adet Spot instance seçebilir.

High Avalibility anlamında ASG ve ELB kullanabilir. İsterseniz bu konseptde spot ve on-demand karıştırabilirsiniz.

Custom ile kendiniz seçebilirsiniz.

Platform kısmında Python seçmiştik sürümünü görebiliriz.

Daha alt kısımlarda instance tipi, adeti, Load balancer seçimi gibi detayları ayarlayabilirsiniz.

Bütün bu ayarlarda güncelleme yapabiliriz. Örneğin oluşturulan envirement'da instance'lar key-pair olmadan oluşuyor. Biz ilgili kısma gelip edit leyebiliriz. Daha sonra SSH bağlantısı ile instance'ınızı kontrol edebilirsiniz

Konfigürasyondan çıkalım ve create application diyelim.

Burada bir süre beklememiz gerekecek.

Yükleme tamamlandı ve Healty olduğunu gördük. Yukarıdaki linke tıklayarak web sitesine ulaşabileceğiz.

Güzel peki bu kod nerede çalışıyor? AWS hallediyor demiştik bakalım ne yapmış bizim yerimize. EC2 servisine gidelim. 1 adet çalışan EC2 göreceğiz, Load Balancer'ın ve Auto Scaling grubun oluştuğunu görebiliriz. Tek instance seçtik ama Load Balancer ve ASG oluşturuyor kendisi.

Uygulama çalışırken versiyon güncellemesi yapabiliriz. Dosyaları yükleyip deploy dediğimizde artık yeni versiyon hazırlanacak.

Configurasyon ayarlarında değişiklik yapabiliriz.

Monitoring menüsünden metrikleri grafik üzerinden ve sayısal değerlerle takip edebiliriz.

Yukarıdaki grafikler üzerindeki zil işareti ile alam oluşturabilir ve sol menüden alarms kısmında alarmı çalanları veya tüm alarmları görebiliriz.

Bitirdikten sonra yukarıdaki resimde görülen action menüsünden terminate environment diyelim. Terminate edilmez ise oluşan kaynaklar sürekli çalışmaya devam eder. Sakın EC2'yu teminate etmeyin ASG çalıştığı için yeniden EC2 ayağa kalkacaktır😂. Terminate ettikten sonra isterseniz aynı düzende tekrar başlatabilirsiniz tek yapmanız gereken Applications menüsüne gelip terminate ettiğiniz uygulamyı seçip Action menüsünden Restore Terminated Environment seçmeniz gerekiyor. Burada bir şartımız var environment terminate edildikten sonra application silinmemesi gerekiyor silinirse geri döndüremeyiz.

Terminate ettikten sonra tüm kaynaklar AWS tarafından silinecek sadece S3 bucket kalacak. S3 bucket'ı direk silemiyoruz. Policy ile korumaya alınmış durumda önce policy siip daha sonra normal usüllerle bucket silinebilir.

Burada önemli olduğunu değerlendirdiğim bir konuyu inceleyeceğiz. Normal sistemi ayağa kaldırdık değişiklik yapmak istiyoruz, dosyalarımızda güncelleme yapacağız. Bu durumda aşağıdaki sayfaya gelip Upload and deploy'a tıklayalım.

İlk seçenekten yeni güncel dosyamızı seçiyoruz. Hemen altında yeni bir versiyon olacağı için etiket veriyoruz. Deployment policy anlatmak istediğim kısım aslında sağdaki görselde çeşitlerini görebilirsiniz. Sağlık kontrolü yapsın mı seçeneği var ve en altta çalışan kaynakların yüzde kaçı veya sayı olarak kaç makinede bu işlemi yapmak istiyoruz onu seçelim.

Deployment Policy kısmına girelim. 3 makinemiz Load balancer ve ASG olduğunu kabul edelim.

All At Once: Bu modelde aynı makinelere yeni aplikasyonu üçüne aynı anda yükler. Avantajı hızlı olur. Herhangi bir sıkıntı olursa yeni aplikasyonda bir problem varsa aplikasyonunuzun web de görününürlüğünü kaybedebilir.

Rolling: Üçünü aynı anda yapmaz önce birincisini yapar daha sonra ikinciye sonra üçüncüye yükleme yapar. Diyelim ilki çöktü diğer ikisi devam eder. Ama biri yükledi ikincisinde hata alırsa bu kez sıkıntı yaşanır. Çünkü 2 zaten çalışmıyor ve 1 ile 3 te farklı uygulamalar olacak. Diyelim fiyat güncellemesi yapıldı her ikisi farklı dönüş yapacak. Daha güvenli ilerliyor ama sakıncası iki ayrı versiyon canlıya çıkabilir.

Rolling with additional batch: Bu model de 3 makineniz varken yeni güncellenmiş uygulama 4. makine olarak girer ve sağlıklı çalışırsa ilk 3 makineden biri kapanır bu şekilde sırayla makineler değişir. yukarıdaki sıkıntı burada da var eğer ikinci hata alırsa ortamda 2 farklı versiyon olacak.

Immutable: 3 makinemiz vardı bu model de yeni aplikasyonlu 3 makine ayağa kalkar daha sonra eski 3 makine terminate edilir. En sağlamcı model olmuş oluyor. Kaynak biraz fazla tüketiyor ama gözardı edilebilir.

Traffic Splitter: Burda trafiğin belli bir oranını yeni aplikasyona yönlendiriyorsunuz takip edip sıkıntı olmaz ise tamamını yeni aplikasyona geçiriyorsunuz.

Bu servis sayesinde Developer bir kimse operation kısmı ile ilgilenmeden tek başına kodunu deploy edip testlerini yapabilir.