Bicep ile Infrastructre as Code – Bölüm 1
0

Geçtiğimiz senelerde, Infrastructure as Code ya da kısa adıyla IaC hakkında Pulumi ile Azure üzerinde Infrastructure as Code adında 2 blogpost yazmıştım. IaC kullanmak için 3rd party bir çözüm tercih etmeyenler ya da ben domain specific yani Azure özelinde bir çözüm istiyorum diyenler için ise 0.3 versiyonu ile production ready olan ve 2 Haziran 2021’de 0.4 versiyonu ile hayatımıza giren Bicep, açık kaynak ve Azure özelinde olması (domain-specific language, DSL), kolay öğrenilebilmesi ve anlaşılır yazımı ile ön plana çıkıyor.

Bicep’e girmeden önce kısaca Azure üzerinde kaynakları Azure Portal dışında nasıl oluşturduğumuzu kısaca hatırlayalım: Azure CLI, Azure PowerShell ve ARM templates gibi seçeneklerimiz mevcut. Bu kısımda ise 2 farklı gruplama yapabiliriz: Imperative code ve Declarative code.

Imperative code CLI ve PowerShell komutlarını sıralı bir şekilde çalıştırdığımız yöntem iken, Declarative code ise sadece konfigürasyonu belirttiğimiz kod olarak tanımlanabilir. Burada Declarative code ‘a örnek olarak ARM templates, Bicep, Ansible ve Terraform olarak verebiliriz.

Konumuza dönecek olursak, Bicep bazen ARM templates yerine kullanabileceğimiz bir çözüm olarak tanımlansa da aslında ARM templates’in bir formatı olarak tanımlama daha doğru olacaktır. ARM templates Bicep ya da JSON formatında olabilir. Buradaki tercihiniz Bicep de olsa Azure Resource Manager sadece JSON formatına ihtiyaç duyduğu için deployment’ı submit ettiğimiz zaman yine JSON formatına çevrilmektedir. Bu işleme de transpilation adı veriliyor.

Bicep kullanmak için ihtiyacımız olan tek şey Bicep eklentisi yüklü bir VS Code (Resim-1 ). Azure CLI ve Azure PowerShell’in güncel versiyonları Bicep’i desteklediği için aynı deployment komutlarını kullanabiliyoruz. Örnek olarak az deployment group create komutundan sonra –template-file parametresine bicep dosyamızı verebiliyoruz.

Bicep’in yüklü ve güncel olduğundan emin olmak için aşağıdaki komutu Azure CLI üzerinde çalıştırabilirsiniz.

az bicep install && az bicep upgrade

Resim-1

Bu bölümde çok fazla detaya girmeden basit bir deployment yapacağım, örnek olarak da birden fazla bağımlılığı olmayan (App Service ve App Service Plan gibi) bir örnek olması açısından Container Registry oluşturacağım. Bicep üzerinde kaynak oluşturmak için önce oluşturacağımız tipi (diğer tiplere ilerleyen bölümlerde değineceğim) resource yazıp sonra da bu resource’a bir isim veriyorum. Bu isim Azure Portal üzerinde göreceğim resource adı değil, Bicep üzerinde kullandığımız bir değişken adı olarak düşünebilirsiniz. Sonra oluşturacağım resource’un tipini belirtmem gerekiyor. Burada otomatik tamamlama sayesinde hızlıca tipi seçebiliyorum (Resim-2).

Resim-2

Tip seçimi sonrasında ise kullanacağım API versiyonunu seçmem gerekiyor, bunu da yine otomatik tamamlama sayesinde (ctrl+space) en güncel olan versiyon olarak seçiyorum (Resim-3).

Resim-3

= işareti koyduktan sonra ise hazırda bulunan snippet’lar sayesinde (ctrl+space) sadece gerekli olarak tanımlamaları kullanmak istediğimi belirtiyorum (Resim-4).

Resim-4

Standart bir resource oluşturken verdiğimiz bilgiler olan isim, lokasyon ve SKU bilgilerini giriyorum. SKU seçiminde de yine otomatik tamamlamadan yararlanabilirsiniz (Resim-5).

Resim-5

Dosyayı main.bicep adı ile kaydettikten sonra, dosyanın bulunduğu klasöre gelip aşağıdaki komutu çalıştırıyorum.

az deployment group create --name mshowtocrdep --resource-group mshowto-rg --template-file main.bicep

Burada Azure Portal üzerinde deployment adı olarak görünmesini istediğiniz ismi –name parametresi ile veriyorum. Eğer bunu vermezseniz dosya adınızı kullanıyor. Resource’un oluşturacağınız resource group önceden tanımlı ise onu da buradan set edebilirsiniz. Son olarak da Bicep template dosyasını belirtiyorum. Burada Resim-6‘da da göreceğiniz gibi location bilgisini hard coded olarak verdiğimiz için bize bir uyarı gösteriyor. Parametre ile ilgili örneklere ilerleyen bölümlerde gireceğim için bu şekilde bırakıyorum.

Resim-6

Deployment’ı CLI üzerinden de takip edebileceğiniz gibi (Resim-6), Azure Portal üzerinden ilgili resource group’a giderek Settings/Deployments altında görebilirsiniz (Resim-7).

Resim-7

Deployment tamamlandıktan sonra da Azure Portal üzerinden istediğim şekilde bir Container Registry oluşup oluşmadığını kontrol ediyorum (Resim-7).

Resim-8

Buraya kadar her şey güzel, peki Bicep ile JSON template arasında ne fark var? JSON template’i görmek için tekrar Deployment altına gidip Template’e tıklıyorum (Resim-9).

Resim-9

Giriş bölümünde Bicep template’in Azure Resource Manager’a gönderilirken aslında JSON’a dönüştürüldüğünden bahsetmiştim. Bicep template’i az bicep build komutu ile derlersek bize çıktı olarak JSON template’i verecektir (Resim-10).

Resim-10

Bir sonraki bölümlerde ise Bicep ile ilgili daha detaylı örneklere geçeceğim.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Bicep documentation | Microsoft Docs

GitHub – mertyeter/bicep-samples

TAGs: Azure, Yazılım Geliştiriciler için Azure, Bicep, ARM Templates, JSON, Azure Resource Manager, IaC, Infrastructure as Code, VS Code, Visual Studio Code, Azure CLI, bicep nedir

Bu İçeriğe Tepkin Ne Oldu?
  • 3
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 1
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi'nde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi'nde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir