AWS Elastic Beanstalk Hakkında Kısa Notlar;

[Bir tane yazıyı medium üzerinden yazayım dedim :)]

Yakın zamanda küçük bir proje için Amazon’u tercih ettik. Benim için harika bir deneyim oldu. Şimdiye kadar görmüş olduğumuz büyük rakamlardan oluşan RAM ve CPU lara karşı 1 CPU 1 GB RAM, 1 CPU 512MB RAM makineler ile testler yaptım. Olumlu yönde şaşırtıcı sonuçlar elde ettim.

  1. Öncelikle kolay yönetilebilir arayüz olması sistem yönetimi gereksiniminizi oldukça azaltıyor (sistemciler kızmasın).
  2. Sistemi ayırıp yönetmenin verdiği bir güzellik var. Sorun olan kısmı nokta atışı çıkartabiliyorsunuz.
  3. Deploy çok rahat ve yönetilebilir. Amazon’un hook ları mevcut. İstediğiniz noktaya istediğiniz işlemi koyabiliyorsunuz.
  4. Lider sunucu seçip bazı komutları sadece ondan çalıştırabiliyorsunuz.
  5. Maksimum ve Minumum sayılarını verip makinenin durumuna göre yeni instancelar açılmasını sağlıyorsunuz. Bunları yapmak için domaini (sub olabilir) AWS LB’ye yönlendirmeniz gerekiyor.
  6. İhtiyaca göre anında bir sürü uygulama…

Şimdi örnek bir projeye başlayalım;

Öncelikle aws’nin verdiği default sistemleri kullanacağız. Siz bunu kişiselleştirebilirsiniz ancak başlangıç olarak apache + php olarak devam edeceğiz.

  1. aws üzerinde bir hesap açalım https://console.aws.amazon.com/iam/home?#users
  2. Hesap açıp kullanacağımız servislere göre bazı yetkiler vermemiz gerekiyor.
    https://console.aws.amazon.com/iam/home?#users/
  1. aws uygulamasını kurup yönetimi buradan yapacağız. Ben python olanı kurdum. brew üzerinden kurulan biraz eski. Docker üzerinden demo yaparken sorun çıkıyor. 
    http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html
  2. Kullanıcı yönetim merkezinde “Security Credentials” kısmından açtığımız kullanıcıya key ve id bilgisini alıyoruz.
  1. eb init ile proje oluşturuyoruz. Burada gireceğimiz bilgiler şurada duruyor “~/.aws/config “ Burası için detaylı bilgi: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-reference-get-started.html
    İsterseniz SSH key’inizi sisteme ekleyip daha sonra kolayca bağlanıyorsunuz.
  1. eb deploy ile projeyi yayınlıyoruz.
  2. Sunucu üzerinde özelleştirmek istediğiniz şeyleri .ebextensions klasörü altında yapabiliyoruz. Öncelik için dosya isimlerini dikkatli seçiyoruz.
  3. Sunucumuzda aşırı yük olursa, çözmek için yeni bir sunucu açması için aws ye talimat giriyoruz. Başlangıç için minimum 2 makine açık tutmanızı tavsiye ederim. Oluşturduğumuz proje içinde “Scaling” -> “Scaling Trigger” ;
    Trigger measurement: CPU
    Trigger statistic: Average
    Unit of measurement: Percent
    Measurement period (minutes): 1*
    Breach duration (minutes):2*
    Upper threshold: 60*
    Upper breach scale increment:1
    Lower threshold: 40*
    Lower breach scale increment: -1

Şeklinde doldurduğumuzda CPU durumuna göre yeni bir makine açıp kapanıyor. Bu yaptığımız işin kontrolünü e2->autoscaling kısmından görebiliriz. Şöyle bir şeyler yazıyor;
“breaches the alarm threshold: CPUUtilization < 40 for 2 consecutive periods of 60 seconds for the metric dimensions AutoScalingGroupName = xxx”

İlk başta Latency vermiştim ancak memcache de sorun meydana geldiğinde buda gecikmeden sayılıyor ve gereksiz makine açılıyor. CPU verdim çünkü makinede doğrudan yük artışı varsa yeni bir makine açılsın istiyorum.

Aslında yazacak çok kısım var ancak ana hatlarıyla özetlemeye çalıştım.

Basit bir örnekte hazırladım. Umarım işinize yarar. 
https://github.com/volkan/aws-elastic-beanstalk

Diğer yazılar için şuraya bakabilirsiniz volkanaltan.blogspot.com