KoçSistem Azure

AKS ve App Service Altyapı Otomasyonu (Infrastructure As Code)

AKS ve App Service Altyapı Otomasyonu (Infrastructure As Code)

Eskiden yeni bir uygulama ayağa kaldırmak, sunucu hazırlamak, manuel konfigürasyonlar yapmak, izleme çözümleri devreye almak gibi bir çok manuel adım içerirdi. Üstelik uygulamanın çalışacağı test ve production ortamlarını idealde aynı konfigürasyonlarla oluşturma ihtiyacı vakit aldığı gibi hataya da açıktı. Cloud altyapılarını kullanmaya başladıkça altyapıları oluşturma yöntemlerimizde de gelişti. İnternetten eriştiğimiz portaller ya da REST API lar aracılığıyla ihtiyacımız olan altyapılara kolayca erişir olduk.

AKS ve App Service altyapı otomasyonu görseli

Bir yandan bu gelişmeler ile hız kazanmışken, diğer taraftan cloud portaller aracılığıyla oluşturduğumuz altyapılarda, her ortam için manuel konfigürasyonlar yapmaya devam ediyorduk. Bu kez manuel konfigürasyon eforunu ve hata olasılıklarını azaltmak, tüm ortamların deployment’larını tamamen otomatize etmek için farklı yöntemler gelişti. Altyapı otomasyonunu sağlayan frameworkler ve çeşitli toollar bu yöntemlerden bazıları. Ben bu yazımda Infrastructure As Code yaklaşımını temel alan bir yöntemle altyapı otomasyonunu sağlayabileceğimizi ele alacağım. Azure’da en çok tercih edilen PaaS servislerden App Service ve AKS altyapısını scriptlerle Azure DevOps üzerinden oluşturan otomasyonu aktararak da örneklendireceğim.

AKS ve App Service örneklerine geçmeden önce, burada uygulamaya çalıştığımız yaklaşımın “Infrastructure As Code” olarak isimlendirildiğini belirtmek ve kavramın içeriğine parantez açmak istiyorum.

Altyapı oluşturulmak istenen domaine özgü bir dille altyapı özellikleri yazılıp, yazılan bu kodlar/scriptler versiyon kontrol aracında saklanması “Infrastructure As Code” un ilk adımıdır. Sonraki aşama, otomasyon toolları aracılığıyla, source kontrolden alınan kodların/scriptlerin çalıştırılarak altyapıların oluşturulmasıdır. Bu yaklaşım konfigürasyon maliyetlerini azaltma, standart ortamlar oluşturulmasını garanti etmesinin yanı sıra, konfigürasyon değişimlerinde hata alındığı durumda önceki konfigürasyonlara hızlıca dönebilme olanağı da sağlar. Ayrıca, altyapı oluşturan kodun kendisi sürekli güncellenen bir içerik olduğu için yaşayan bir dokümantasyon da sağlamış olur.

Infrastructure as Code iş akışı diyagramı

Azure DevOps Üzerinden App Service Oluşturma

Öncelikle Azure’da App Service oluşturacak basit bir script oluşturuyoruz. App Service geleneksel runtime’ları da destekleme özelliğine sahip, ancak bu örnekte App Service üzerinde container çalıştırmak istiyoruz. Hazırladığımız bu scripti .bat uzantısıyla kaydedip, Azure Repos içerisine ekliyoruz.

App Service oluşturma batch scripti

Ardından boş template seçeneği ile release pipeline oluşturuyoruz.Azure Repos’a eklediğimiz scripti,artifactolarak seçiyoruz.Azure CLItaskı ekliyoruz,Script Type’ ı batch seçiyoruz veScript Pathbilgisini de artifact’te belirttiğimiz dosyayı seçiyoruz. Son olarak da, script in beklediği değişkenleri, varsayılan değerleriyle birlikteVariableskısmına ekliyoruz.

Azure DevOps release pipeline Azure CLI task konfigürasyonu

App Service i oluşturmak istediğimiz subscription ve resource group için aşağıdaki gibi bir service connection oluşturuyoruz ve pipeline da bu connection ı seçiyoruz.

Azure Resource Manager service connection ekranı

Ardından variables tab ına gelip scriptimizin beklediğiappname, resource group, appplanveimagedeğişkenlerini oluşturuyoruz. Böylece istediğimiz kadar ortama aynı özellikli App Service oluşturabilme altyapısını kurmuş oluyoruz.

İlk App Service imizi oluşturmadan önce, Variable kısmında değişkenlerimize istediğimiz değerleri veriyoruz. Aynı Application Plan altında birden fazla App Service çalışabildiği için buradaki örnek scriptimizappplanoluşturmayı içermiyor, biz deappplandeğişkeninin değerini belirken varolan bir application plan seçmeye dikkat ediyoruz. Artık App Service imizi oluşturmak üzere pipeline ımızı tetikliyoruz. Sonraki aşamada Azure Portal üzerinden oluşturduğumuz App Service i kontrol edebiliriz.

Azure DevOps Üzerinden AKS Oluşturma

AKS yi Azure portal üzerinden oluşturmak kolay olsa da, portal bir çok konfigürasyonda kısıtlamalar da sunar. Amacımız AKS altyapı otomasyonu sağlamak olduğu için subnet/vnet tanımlarına ve AAD entegrasyonlarına girmeden aşağıdaki gibi AKS Scripti oluşturuyoruz. Scripte bakınca karışık gelse de gözünüz korkmasın, otomasyonu App Service ile aynı sadelikte, sadece dikkat etmemiz gereken küçük bir püf noktası var.

AKS cluster oluşturma CLI scripti

Öncelikle AKS oluşturmak istediğimiz subscription a CLI üzerinden bağlanıp, bir service principal oluşturuyoruz ve çalıştırdığımız aşağıdaki komut sonrasında bize dönen bilgileri, Azure Resource connection oluştururken kullanmak üzere saklıyoruz.

Azure CLI ile service principal oluşturma komutu

Bu kez Service connection için Authentication metoduSevice Principal (manual)seçerek , CLI üzerinden oluşturduğumuz Service Principal ın bilgilerini girerek oluşturuyoruz. Aksi takdirde AKS yi create etmek üzere pipeline i çalıştırdığımızda aşağıdaki ve benzeri yetki hataları ile karşılaşabiliriz.

AKS oluşturma sırasında yetki hatası çıktısı

Service Connection ı oluşturduğumuz service principal ın appid, password ve tenantid bilgilerinin yanı sıra aşağıdaki gibi Azure subscription id ve name de vererek tanımlıyoruz.

Service Principal manuel service connection tanımlama

Release pipeline ımızda Service Connection tipi dışında App Service de oluşturduğumuz pipeline ın aynısını kullanıyoruz. Tabii AKS için tanımladığımız variable larımız daha fazla. Bu değişkenleri ihtiyacımıza göre berlirleyip pipeline ı çalıştırıyoruz.

AKS release pipeline değişkenleri tanımlama

Pipeline başarı ile sonlandıktan sonra Azure Portal üzerinden oluşturduğumuz Azure Kubernetes Services ı kontrol edebiliriz.

App Service ve AKS altyapısını oluşturmak için, ARM Templates ve Terraform de sıklıkla tercih ediliyor. Bir sonraki yazımda da size bu araçları kullanarak otomasyonu nasıl sağlayabildiğimizden bahsedeceğim.

Kaynak