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

Berkay Özuygur
2 min readNov 15, 2019

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.

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.

Genel Mimari

Test Ortamlarına Veri Sağlama

Ö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.

Otomatik EC2&ELB Oluşturma

İ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.

Ortam Bazlı Uygulama Konfigürasyonu Çıkartmak

Üçü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.

S3 Paket Deposu

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.

Yük Dengeleme ve DNS Kayıtları

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.

Ortamların Silinmesi

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.

--

--