AWS Lift & Shift Cloud Project
Aws Services > Data Center
EC2 Instances -> VM For Tomcat, RabbitMq,Memcache,MySql
ELB(Load Balancer) -> Nginx Lb Replacement
AutoScaling -> Automation For Vm Scaling
S3/EFS Storage -> Shared Storage
Route 53 -> Private Dns Service
Architecture Of Aws Services For The Project
Flow Execution
1.Login AWS Account
2.Create Key Pairs (For login to ec2 instance)
3.Create Security Groups (Load Balancer, tomcat and backend service)
4.Launch Instances with user data-Bash Scripts
5.Update IP to name mapping in Aws Route 53
6.Build application from source code (On-Local)
7.Upload to S3 Bucket Artifact
8.Download artifact from S3 to tomcat ec2 instance
9.Setup ELB with https with [Cert from amazon certificate manager]
10.Map ELB endpoint to website name in godady DNS
11.Verifiy
12.Build Autoscaling group for tomcat instances.
Amazon konsola giriş yaptıktan sonra Certificate Manager üzerinden daha GoDaddy üzerinden almış olduğum domain name ile bir “Request public certificate” ile ücretsiz sertifika oluşturuyorum.
https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html
Create Security Groups
AWS Dashboard > EC2 > Security Groups > Create Security Group
Inbound Rules’da Load Balancer için http ve https portlarına izin veriyoruz.
Tomcat Instance’lar için inbound rule’da yukarıda oluşturduğumuz load balancer security group üzerinden gelecek 8080 portundaki isteklere izin veriyoruz.
Tomcat instance’ların backend servislerine erişebilmesi için gerekli olan portlara inbound rule oluşturduk.
Son olarak vprofile-backend-sg editliyoruz ve aşağıdaki gibi bir rule daha ekliyoruz.
Create Key Pair
Instance’lara GitBash üzerinden login olabilmek için KeyPair oluşturuyoruz.
EC2 INSTANCES
-2 Adet basit, içerisinde user datası olan instances oluşturacağız.
-Bu instanceları bir provision ile bash scriptle otomatik olarak oluşturacağız,
https://github.com/devopshydclub/vprofile-project.git
Bu linkten kendi ortamımıza clone işlemini yapalım.
$ git checkout aws-LiftAndShift
Aşağıda userdata altında mevcut kullanacağımız datalar mevcut.
1-Create Database
AWS Console > EC2 > Instances > Launch an instance menüsünden yeni bir CentOS 7 OS makine oluşturuyoruz. Name: vprofile-db01
-Instance Type / KeyPair / Network Settings ayarlarını aşağıdaki gibi ayarlıyoruz.
-Son olarak instance provision ile başlatmak için Advanced Details menüsünden aşağı indiriyoruz ve user data menüsüne mysql.sh scripti içinde bulunan tüm komutları kopyalıyoruz. Ve launch instance tıklıyoruz.
Instance running duruma geldikten sonra network security grouplarda ssh ile bağlanabilmek için kendi ip adresimize 22 portundan erişim izni veriyoruz.
Instance hazır duruma geldiğinde login olabiliriz.
Mariadb servisi aktif ve login oluyoruz.
show databases;
show tables;
2-Create Memcache
Memcache instance oluştururken yine yukarıdaki ayarların aynısını seçerek bir Centos 7 ayağa kaldırıyoruz. Advanced Details’da User Data kısmına memcache.sh scripitini copy-paste yapıyoruz.
3-Create RabbitMq
Memcache instance oluştururken yine yukarıdaki ayarların aynısını seçerek bir Centos 7 ayağa kaldırıyoruz. Advanced Details’da User Data kısmına rabbitmq.sh scripitini copy-paste yapıyoruz.
Tüm backend servislerimiz hazır ve kurulu durumda.
Doğrulama yapmak için ssh ile bağlanıyoruz.
Memcache servisini kontrol ediyoruz.
Rabbitmq server servisini kontrol ediyoruz.
-Database, RabbitMq, Memcache olmak üzere tüm backend servisleri hazır durumda.
-Oluşturduğumuz 3 instance ait private ip adreslerine aws route 53 ile dns yönlendirmeleri yapacağız.
Aws console > Route 53 > Hosted zones >Create hosted zone oluştuktan sonra create record diyoruz.
Instance’lara ait private ip adresi üzerinden 3 Adet dns kaydı oluşturduk.
4-Creater Tomcat Instances
Memcache instance oluştururken yine yukarıdaki ayarların aynısını seçerek bir ubuntu ayağa kaldırıyoruz. Advanced Details’da User Data kısmına tomcat_ubuntu.sh scripitini copy-paste yapıyoruz.
5-Build and Deploy Artifact
-Şahsi bilgisayarımızda build edeceğimiz için JDK ve Maven ait aşağıdaki versiyonların bilgisayarımızda kurulu olması gerekiyor.
Java projemizi build edebilmek için gerekli dependencies kurulumlarını yaptığımıza göre projeye ait repository dosyasına giriyoruz.
Burada application.properties dosyasında route 53 de girdiğimiz dns name replace ediyoruz.
Pom.xml olduğu dizine geri dönüyoruz ve mvn install komutu ile artifact build işlemini başlatıyoruz.
Build işlemi başarıyla tamamlandı. Vprofile-v2.war isimli artifact ilgili dizine çıkarıldı.
Oluşturulan bu artifacti AWS S3 bucket upload edeceğiz. Ve tomcat server ilgili bucket üzerinden download edecek.
S3 Bucket üzerine ilgili artifactin upload işlemini cli üzerinden gerçekleştireceğimiz için aws cli kurulu olması gerekmektedir.
S3 Bucket arayüzünde upload işlemini gerçekleştirecek bir user oluşturuyoruz ve AmazonS3FullAccess yetkisi veriyoruz. Ardından CLI arayüzünden erişebilmesi için bir access key üretiyoruz.
Gitbash aws cli komutlarıyla login oluyoruz.
S3 Bucket create ediyoruz.
Artifacti oluşturduğumuz S3 bucket içerisine kopyalıyoruz.
$ aws s3 cp vprofile-v2.war s3://vprofile-artifact-omertunc/vprofile-v2-.war
Başarılı bir şekilde kopyalanmış.
-APP01 makinesine login oluyoruz ve tomcat servisini durdurduktan sonra default ROOT klasörünü siliyoruz.
-Şimdi AWS S3 Bucket içerisine upload ettiğimiz artifacti app01 web sunucumuzda tomcat dizinine download edeceğiz. Öncesinde yine bu ubuntu makinemize aws cli kurulumunu yapmamız gerekiyor.
Ardından aynı şekilde access key ile bağlanacağız.
-Artifacti /tmp dizinine kopyaladık ve daha sonra tomcat default root dizinine taşıdık.
6-Load Balancer – DNS AWS Console > EC2 > Target Groups > Create Target Group
-Chose a target type: Instance
-Set group name
-Protocol: HTTP Port:8080
-Healt Checks: Http Path:/login
-Advanced health check setting: Override:8080
-Register targets: app01 (select: installed tomcat server)
Oluşturduğumuz target group’a bir load balancer ataması yapacağız.
– EC2>Load balancers>Select load balancer type>Application load balancer
-Daha önceden oluşturmuş olduğum ssl certificate seçiyorum.
Aşağıdaki linkten aws certificate manager ile ücretsiz ssl sertifikanızı oluşturabilirsiniz.
https://ordinarycoders.com/blog/article/free-ssl-certificate-aws-certificate-manager
-Load balancer servisi başarılı bir şekilde oluşturuldu ve aşağıdaki dns name üzerinden erişilebilir durumda.
-Godady üzerinden daha önce satin almış olduğum domainname üzerinde bir cname kayıtı ekleyerek elastic load balancer public url girişini yapıyorum.
-Load balancer başarılı bir şekilde yönlendirmeyi sağladı.
7-Autoscaling Group
-Tomcat server kurulu olan app01 sunucumuz seçiliyken create image tıklıyoruz. Ve image bir name ve description bilgisi girdikten sonra create image tıklıyoruz.
-Image oluşurken Launch Configurations tabında Create Launch Configuration tıklıyoruz.
-Oluşturduğumuz image seçiyoruz;
-Create Autoscailing Group
EC2 > Auto Scaling groups >Create Auto Scaling group
-Launch Configuration: Select exist LC (vprofile-app-LC)
-Network: VPC(Not change) A-Z: Select All Zone
-Load Balancing: Attach to an exiting load balancer (vprofile-app-tg-HTTP)
-Group size: Desired Cap:1 Min Cap:1 Max Cap:4
-Scaling policies: Target tracking scaling policy-Target Value CPU %50
-Deneme amaçlı app01 web server terminate duruma getirdik.Fakat uygulama sunucusu otomatik olarak ayağa kalktı. Ve healty duruma döndü.
-app01 web server sildiğim anda otomatik olarak yeni bir sunucu oluşturuldu ve mail üzerinden bildirim geldi.
-Tüm işlemler özetle;
-Kullanıcılar web uygulamamıza belirlediğimiz url üzerinden load balancer adresine https ile bağlantı sağladılar. -Application load balancer’a ait oluşturduğumuz security group 443 portuna izin verdi ve gelen trafiği 8080 portu üzerinden tomcat server’a yönlendirdi.
-Tomcat servisi arka plan da amazon route 53 üzerinde private ip adreslerine ait dns tanımlarını yaptığımız rabbitmq, memcache, mysql servislerine erişebildi.
-Ve oluşturduğumuz S3 storage alanı üzerine localde build ettiğimiz .war uzantılı artifactleri upload ettik.
-Ardından tomcat server üzerinde bu artifacti tomcat root dizinine açarak deploy etmiş olduk.