background

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.

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 nasıl 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.

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.

Ardından boş template seçeneği ile release pipeline oluşturuyoruz. Azure Repos’a eklediğimiz scripti, artifact olarak seçiyoruz. Azure CLI taskı ekliyoruz, Script Type’ ı batch seçiyoruz ve Script Path bilgisini de artifact’te belirttiğimiz dosyayı seçiyoruz. Son olarak da, script in beklediği değişkenleri, varsayılan değerleriyle birlikte Variables kısmına ekliyoruz.

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.

Ardından variables tab ına gelip scriptimizin beklediği appname, resource group, appplan ve image değ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 scriptimiz appplan oluşturmayı içermiyor, biz de appplan değ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.

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

Bu kez Service connection için Authentication metodu Sevice 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.

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.

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.

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

Nasıl yardımcı olabiliriz?