Case Study — Create Dynamic Test Environments on AWS(TR)

Read this post in English here

Teknoloji ve e-ticaret şirketleri kendi ürünlerinde geliştirmiş oldukları yeni özellikleri rakiplerinden önce markete çıkarabilmesi yarışı kazanmaları için çok önemli. Ürünün kalitesini bozmadan hızlı sürüm çıkabilmek ise rakiplerine karşı fark yaratacaktır. Bu yüzden sürüm öncesinde testlerin paralel olarak bir birlerinden bağımsız bir şekilde yapılabilmesi, ürünün kalitesi için zorunludur. Bu yazımızda sizlere Aws üzerinde testlerimizi paralel koşabilmemiz için dinamik ortamları nasıl oluşturduğumuzu paylaşacağız.

Teknoloji ve e-ticaret şirketleri kendi ürünlerinde geliştirmiş oldukları yeni özellikleri rakiplerinden önce markete çıkarabilmesi yarışı kazanmaları için çok önemli. Ürünün kalitesini bozmadan hızlı sürüm çıkabilmek ise rakiplerine karşı fark yaratacaktır. Bu yüzden sürüm öncesinde testlerin paralel olarak bir birlerinden bağımsız bir şekilde yapılabilmesi, ürünün kalitesi için zorunludur. Bu yazımızda sizlere Aws üzerinde testlerimizi paralel koşabilmemiz için dinamik ortamları nasıl oluşturduğumuzu paylaşacağız.

Image for post
Image for post

Operasyona başlamadan önce production, staging ve test ortamlarını sub. account açarak birbirlerinden izole ettik. Bütün bu süreçte infrastructure as a code perspektifi ile ilerleyerek, provisioning işlemlerini Terraform ve Ansible araçları ile yaptık. Orkestrasyon sürecinde ise groovy script yazarak Jenkins aracını kullandık. Aws tarafında kullandığımız servisler ise şöyle; S3, EC2, RDS, ELB, Lambda, Route 53.

Image for post
Image for post
Genel Mimari

Öncelikli olarak çözüm getirmemiz gereken konulardan bir tanesi, testlerin gerçekçi veriler ile yapılmasının istenmesi. Bu durumu canlı ortamlarda bulunan veritabanlarının günlük yedeklerinden ilgili test ortamlarına belirli aralıklar ile incremental olarak dönerek aşıyoruz. Bu işlemi python scripti yazarak Lambda servisi üzerinde çalıştırarak yapıyoruz.

İkinci olarak, api ve uygulama sunucularının ve onların önlerindeki elb’nin provision edilmesi işlemini gerçekleştiriyoruz. Testin yapılabilmesi için ihtiyaç duyulan sürüm ve komponentleri Jenkins üzerinden kullanıcılara seçtirip Terraform template’i ile testin yapılacağı dinamik ortamı oluşturuyoruz. Tabi ki oluşan ortama branch ve app name olarak tag ekliyoruz.

Üçüncü adım ise, uygulamaların konfigürasyonlarını ortam bazlı olarak ayırıp template haline getirmek oldu. Kısacası ilgili ortama göre konfigürasyonu dinamik olarak çıkartıyoruz. Bu operasyon için Jinja template ile Ansible kullanıyoruz.

Dördüncü olarak, kodu derledikten sonra oluşturduğumuz paketi S3 bucket üzerine gönderiyoruz. Vermiş olduğumuz tag’e göre ilgili ortamı keşfederek paketi deploy ediyoruz.

Bu adımda ise oluşturmuş olduğumuz ortamı ELB arkasına alıyoruz. Sonrasında Route 53 üzerinden branch ve uygulama ismi olarak dns kaydını açıp ilgili ELB hedefine gönderiyoruz.

Son olarak oluşturulan ortamların silinmesi işlemi var. Bunun için iki yöntem geliştirdik. Bir tanesi, yazmış olduğumuz python ile Lambda fonksiyonunu çalışıp kullanılmayan ortamların silinmesi. Bir diğeri ise aynı fonksiyonun Jenkins üzerinden manuel olarak tetiklenmesi.

Written by

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store