AWS Elastic Beanstalk ile Web Application Kurulumu 1
There are lots of documentation(blog posts etc.) about AWS in English that’s why I have been writing in Turkish. I hope this will be informative for Turkish readers.
Regards.
Merhaba,
WordPress; php ve mysql tabanlı, açık kaynak kodlu blog ve içerik yönetim sistemidir. Kişisel web sitelerinden yüksek trafik yoğunluklu web sitelerine kadar hemen her türlü içeriğin yayınlanması için kullanılmaktadır. WordPress’in ilk sürümü 2003’de yayınlanmıştı ve elastik, ölçeklenebilir, bulut tabanlı sistemlerde çalışması düşünülerek yapılmamıştı. Zamanla gelişen sürümleri ile bu içerik yönetim sistemi(content management system) ; modern, ölçeklenebilir ve bulut tabanlı sistemlerde çalışabilir hale gelmiştir.Göz atmak isteyenler için wordpress web application’ının dosya ve klasör yapısı hakkında, kaynaklar kısmında, çeşitli adresler paylaştım.
Yazımda, AWS üzerinde ölçeklenebilir(scalable) , stateless mimari ile wordpress web application yapılandırmasından bahsedeceğim. Konunun kapsamı ve kullanacağım servisleri göz önününe aldığımda yazımı iki parçaya bölmeye karar verdim. Bu bölümde , wordpress için gereken relational database servisinin kurulumu,Elastic Beanstalk ile wordpress’in kurulumu ve Elastic Load Balancer konularına değinilecektir. Elastic Beanstalk servisi dışında kalan diğer servislerden önceki yazılarımda bahsetmiştim. Bu konuyu incelemeden önce o yazılara gözatabilirsiniz.
Elastic Beanstalk AWS’nin sunduğu platform as a service ‘dir. Müşteri Elastic Beanstalk ile, web uygulamasını bellirli tanımlar doğrultusunda(ec2,elb,rds vb.) AWS bulutuna kurar ve hizmete açar. Elastic Beanstalk servisinin desteklediği yazılımlardan ve uygulamalardan bazıları aşağıdaki gibidir.
- Apache http server üzerinde Php , python , ruby Uygulamaları
- IIS üzerinde .net Uygulamaları
- Apache üzerinde java uygulamaları
- Node.js
- docker
- Git(desteklediği development methodu)
- Java Web Application Archive(desteklediği development methodu)
Elastic Beanstalk ‘un bu kulvardaki rakipleri de genel olarak aşağıdaki gibidir.
- Cloud Foundry
- Bluemix
- Appscale
- Google App Engine
- Heroku
- Anynines
- Engine Yard
- Opendshift
- Windows Azure
- Jelastic
Geleneksel yöntemler ile devam edebiliyorken neden elastic beanstalk kullanmalıyım? Bu soruyu cevaplayarak ilerleyeyim 🙂 Aslında soruyu “Neden buna benzer bir servis kullanalım?” şeklinde de sorabiliriz. Çünkü müşteri olarak istediğiniz PaaS servis sağlayıcısını kullanmakta özgürsünüz 🙂 Yapıyı incelerken edindiğim izlenimi aktararak soruyu cevaplayayım.
Müşterinin amacı; uygulamasını bulutta barındırmak,servis kesintisi yaşamamak,kaynak sıkınıtısı yaşamamak,yönetimsel zorlukları asgari düzeye indirmek,uygulaması için versiyonlama yapabilmek ve maliyeti optimize etmektir. Uygulamayı Elastic Beanstalk servisi ile AWS bulutuna yüklediğinizde, Elastic Beanstalk belirttiğiniz parametrelere göre arka planda,
- Sanal sunucu instance’ını(EC2)
- Relational Database Service’ini(Mysql)
- Load Balancer’ı(Elastik Load Balancer)
- Ölçeklendirme sistemini(Auto Scaling)
- Uygulamanın sağlık durumunu(Cloudwatch)
- S3 storage alanı kullanımını
- Gerekli security group
- Versiyon
konfigürasyonlarını tamamlarayarak uygulamanızı hizmete açıyor. Bir bakıma orchestration yapıyor. Bunlar ile birlikte AWS Route 53 hizmetini kullanarak DNS servisinden faydalanabilirsiniz. Stateless web uygulaması mimarisi için de ElasticCache, CloudFront, S3 servislerinden faydalanabilirsiniz. Bu yazının konusu bahsettiklerimin bir kısmı olacak. Diğer kısımlarını sonraki bölümde inceleyeceğim.
Özetle Elastic Beanstalk veya buna benzer bir servis kullanıldığında, müşteri olarak minimum efor ile web uygulamanızı hizmete açabiliyorsunuz. Yapılandırmaya geçebilirim.
Relational Database Service’inde MySQL instance’ını açtım. Elastic beanstalk rds instance’ını da kendi süreçleri içinde oluşturabiliyor. Instance’ın açılmasını bu süreçlere dahil etmeden de oluşturabilirsiniz.
Database ismi, user bilgisi,parola bilgisi,bağlantı yolu(endpoint) bilgisi, üstteki aşama tamamlandıktan sonra belirlenmiş olacak.
Database Instance’ına ait bazı önemli bilgileri farklı renk ile taradım. Bu bilgileri wordpress için kullanacağız. Şimdi wordpress kurulum dosyalarını https://wordpress.org/download/ adresinden temin ediyorum ve uygun bir lokasyona açıyorum. wp-config-sample.php dosyasının ismini wp-config.php olarak değiştiriyorum. Dosyayı notepad++ ile aşağıdaki şekilde yapılandırıyorum.
Bilgileri, database instance’ının detaylarından temin ediyorsunuz. Dosyanın alt kısmında authentication unique keys and salt isminde bir bölüm var. O kısmı da şu adresten edineceğiniz bilgiler ile doldurabilirsiniz > https://api.wordpress.org/secret-key/1.1/salt/
Değiştirdiğiniz dosyayı da içerecek şekilde wordpress kurulum nesnelerini zip biçiminde paketleyiniz. Paketleyeceğiniz nesneler aşağıdaki gibidir.
Paketlediğimiz dosyayı Elastic Beanstalk ile yapılandırma esnasında kullanacağız.
Üstte görülen kısımdan Elastik Beanstalk paneline geçiyorum ve “create new application” ile yeni bir uygulama oluşturuyorum.
“Next” ile devam.
“Create web server” ile devam ediyorum.
Gereken parametreleri seçerek devam ediyorum. Siz uygulamanıza uygun farklı parametreler seçebilirsiniz(IIS,single instance vb.)
Paketlediğim wordpress zip dosyasını source olarak seçerek devam ediyorum. Upload işlemi yapılacak.
Uygulamanın ismini not alabilirsiniz ama nihai noktada DNS üzerinde cname kaydı açarak yönlendirmeler yapacaksınız. Kısa vadede testleriniz için burada görülen ismi kullanabilirsiniz.
Database Instance’ını daha önce açtığım için bu aşamayı kutucukları işaretlemeden ilerletiyorum.
Configuration Details aşamasında, testim için gereken ayarları yapılandırdım. Health check için readme.html’in varlığını kullanacağım. WordPress kurulum dosyaları arasında bu dosya vardı! “Next” ile devam ediyorum. Elastic Beanstalk, uygulama ortamını hazırlamaya başlıyor.
Üstteki “Launching” süreci tamamlandıktan sonra şu işlemler bitmiş oluyor.
- WordPress’in üzerinde çalışacağı sanal sunucu hazırlanıyor(EC2 instance)
- Elastic Load Balancer hazırlanıyor
- Auto-scaling group hazırlanıyor
- Hazırlanan servisler için gereken tüm security group’lar ve gereken izinler hazırlanıyor
Elastic Beanstalk, uygulamayı ve uygulamaya dair tüm bileşenleri yapılandırdı. Yapılan işlemlerin detayına Logs kısmından ve Events kısmından bakabilirsiniz. Bu aşamada wordpress’i konfigüre etmek için Elastic Load Balancer’ın public ismi ile wordpress web application’ını açabilmemiz gerekiyor. Durum aşağıdaki gibidir.
Elastic Load Balancer’ın public dns ismi hayli karmaşık. CNAME kaydı kullanarak sadeleştirebilirsiniz. Bu yazının ikinci bölümünde cloudfront’dan bahsedeceğim. İsterseniz ne yapmak istediğinize ondan sonra karar veriniz. Bu haliyle bizi karşılayan ilk nokta elastic load balancer’daki listener’dır. ELB gelen isteği içerideki sağlıklı instance’a iletiyor. ELB ve EC2 instance’ları Auto-Scale ’ing group ile ilişiklendirilmiş durumdadır. Sağlıklı instance’ın kaynaklarında bir darboğaz yaşanırsa, auto-scaling sistemi ortama yeni bir instance ekliyor, onu da ilkine benzer şekilde yapılandırıyor ve elastic load balancer arkasına alıyor. Auto scaling’in olması gerektiği gibi çalışabilmesi için wordpress web uygulamasının stateless mimaride çalışması gerekiyor.
Burada bırakıyorum.Stateless mimarinin yapılandırılması,ElastiCache,Cloudfront ve kalan detaylardan ikinci bölümde bahsedeceğim. WordPress yapılandırmasını da bölümün sonuna bırakıyorum.
Herkese sorunsuz ve neşeli günler dilerim.
Kaynaklar:
http://en.wikipedia.org/wiki/Service_statelessness_principle
http://aws.amazon.com/releasenotes/AWS-Elastic-Beanstalk/3227428347751765/
https://www.pantz.org/software/mysql/mysqlcommands.html
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html
https://wordpress.org/download/
https://api.wordpress.org/secret-key/1.1/salt/
http://aws.amazon.com/documentation/
http://digwp.com/2012/05/complete-list-wordpress-files
http://www.howtospoter.com/web-20/wordpress/wordpress-guide-dissection-of-file-structure
http://www.wpexplorer.com/wordpress-internal-function
3 comments found