Bu yazımda Azure üzerinde en çok kullanılan servislerden birisi olan ve bir uygulama geliştiren, yöneten, barındıran yada dışarıdan hosting firmalarıyla uygulamalarını barından herkesin kullandığı Azure App Service’den ve App Service Staging Slots mantığından bahsedeceğim.
App Service Nedir ?
En basit tanımıyla Azure App Service HTTP tabanlı bir barındırma hizmetidir. App Service bizlere Web, API, Mobile Backend veya herhangi bir uygulamamızı barındırmamız için bir hosting hizmeti sağlar. Bu hizmeti Azure Platform As a Service mantığında sunarak bize kullanacağımız ortamı Azure Portal’den yönetmemizi sağlar. Arka planda çalışan sanal makinelerle, güvenlik riskleriyle yada güncelleştirmeleri yapmakla uğraşmamıza gerek kalmaz. Uygulamarınız diğer bütün Azure servisleri gibi dakikalar içinde ayağa kaldırılır ve canlı sistemlerde çalışmaya başlarlar. Bu servisin bize sunduğu hosting hizmeti yanında auto-scale, kod yazmadan authentication metodları tanımlama, auto-deployment, hybrid connections gibi çok güçlü özelliklerde bulunuyor. Bu yazıda bahsedeceğim Deployment Slots da bu özelliklerden bir tanesi.
Deployment Slots Nedir ve Nasıl Kullanılır ?
Bana sorarsanız Deployment Slots özelliğini tüm App Service hizmetinden yararlanan kullanıcıların bilmesinde fayda bulunuyor. Bunu bir örnekle açıklamak gerekirse ;
Diyelim ki bir websitemiz var ve URL si datamarket.com.tr. Bu websitesi üzerinde geliştirme yapılıyor ve sürekli olarak yeni versionlar yayınlanıyor. Yapılan bu değişikliklerin bir test aşaması oluyor ve uyumsuzluklar, buglar gibi hataların tespiti için test kullanıcıları tarafından testler yapılıyor. Bu test ortamı genellikle yönetim olarak ayrı bir iş yükü getirir ve production kadar efor ister. Deployment Slot tam olarak bu noktada hayatımıza giriyor. App Service’ de Production Slot’umun yanına kolaylıkla yeni bir slot ekleyebiliyorum. Bu slot kendine has bir instance gibi çalışıyor ve yine kendine has özellikleri oluyor. Sizin seçtiğiniz isimde datamarket-beta.com.tr gibi kendine ait bir URL oluşturuyor ve yeni versionunuzu öncelikle bu test slotuna yüklemenize imkan veriyor. Bu slot isterseniz production slotunun kopyası olarak oluşuyor isterseniz boş bir instance yaratıyor ve size yine kendine ait bir FTP adreside sağlıyor. Uygulamanızı bu test slotunda test ettikten sonra kolayca Swap işlemi yapabiliyorsunuz.
Deployment Slot Yaratma
Deployment Slot yaratmamız için öncelikle bir App Service’ e ihtiyacımız bulunuyor. App Service in içinden Deployment Sekmesinin altında Deployment Slots özelliği bulunuyor.
Bu sekmeden Staging Slotlarımızı yönetebiliriz. Sekmeye girdiğimiz zaman karşımıza Production stage olarak karşımıza default bir stage çıkıyor. Bu uygulamızın şuanda çalıştığı slot.
Add Slot diyerek yeni bir Stage ekliyoruz.
Burada clone settings özelliği ile istersek Production ortamının birebir aynı özellikleriyle yeni bir instance istersek de boş bir instance olarak yaratabiliyoruz.
Yeni Slotumuz oluşturuldu ve sağ tarafında traffic seçeneği gözümüze çarpıyor. Traffic özelliği kullanımı çok kolay ve arka planda gerçekten çok verimli bir özellik bunun nedeni ise traffic yüzdelerini yukarıdaki görseldeki gibi ayarladığımız zaman uygulamaya erişen kullanıcıların %85 i production slotuna yönlendirilirken %15’i test slotuna yönlendirilebiliyor ve bunun konfigürasyonu ile biz uğraşmıyoruz. Azure bunu arka tarafta otomatik olarak route ediyor.
Swap İşlemi
Elimizde iki adet Url ve ortam bulunuyor. Bunlar datamarket.com.tr ve datamarket-beta.com.tr. Test ortamımda gerekli deploymenti yaptıktan sonra bu ortamı production’a geçirmek istiyorum. Bunun için yapmam gereken Deployment Slots sekmesinden swap işlemini gerçekleştirmek. Bu işlem arka planda bizim için sırasıyla aşağıdaki işlemleri yapar :
- Production Slotundaki konfigürasyonların tamamını target slot’a uygular (Continuous deployment, Authentication, Connection Strings).
- İlk adımdaki konfigürasyonlar sırasıyla uygulanır ve eğer birisi hata verirse swap işlemi durdurulur ve değişikler geri alınır.
- Sanal IP adresleri değiştirilir ve dolayısıyla Url’ler de değişmiş olur.
Bu işlemi yaptığımızda Production olarak beta slotumuz gözükür ve production URL’sini de test slotumuz almış olur.
Perform Swap with Preview
Bu seçeneği kullanırsanız App Service aslında normal swap işlemini yapar ve bunu valide eder. Bu işlemin avantajı öncelikli olarak bütün ayarlar sorunsuz bir şekilde uygulanabiliyor mu bunu önceden görebiliyo olmamız. Eğer hiçbir sorun yoksa Swap işlemi gerçekleştirilir.
Auto Swap
Auto Swap özelliği slot instance’ından açılabilen ve slota her yeni version deploy edildiği zaman otomatik olarak production slotuyla değişmesini sağlayan bir özelliktir. Bu özelliği açmak için slot instance sayfamızdan configuration sekmesinden General Settings tab’inde bulabilirsiniz.
Azure DevOps ile App Service Slots
Diyelimki yukarıdaki gibi bir sistemimiz ve uygulamamız var. Ortamımız sürekli olarak geliştiriliyor ve yeni version çıkıyor. Bu çıkan yeni version öncelikle test slotuna daha sonra onaylı bir şekilde production ortamına deploy ediliyor. Bu senaryoyu uçtan uca kurgulayabildiğimiz bir servis bulunuyor ; Azure DevOps Service.
Azure DevOps Service ile CI/CD süreçlerimizi kurgulayabilir ve istenilen gibi öncelikli olarak test daha sonrasında production ortamına deployment sağlayabiliriz. Azure DevOps’un pipelines özelliği ile bu süreci adım adım oluşturalım :
Yukarıdaki görseldeki gibi yeni bir pipeline oluşturuyoruz. Pipeline’ımız iki adımdan oluşacak. Birincisi test deployment ikincisi ise Prod Deployment ve bu süreçler arasında bir onay mekanizması kurgulayacağız.
Beta deployment stage’inde App Servicemizin slotuna bir deployment olucağı için ayarlarımızı aşağıdaki gibi uyguluyoruz.
İlgili ayarlarımızı yaptıktan sonra onay mekanizmasını aşağıdaki gibi uyguluyoruz.
İkinci adımda ise istersek slot swap özelliğini tetikleyebilir istersekte onaydan sonra production ortamınada ayrıca bir deployment alabiliriz.
Pipeline’ı çalıştırdığımız zaman aşağıdaki gibi bir onay mekanizması çalışmakta :
Referanslar:
https://docs.microsoft.com/en-us/azure/app-service/overview
https://docs.microsoft.com/en-us/azure/app-service/deploy-staging-slots