Bicep ile Infrastructre as Code – Bölüm 4: For Loop Kullanımı

bicep-azure

Bicep makale serisinin üçüncü bölümde if condition kullanımından kısaca bahsetmiştim. Bu bölümde de for loop kullanarak birden fazla resource oluşturma gereksinimlerinde kod tekrarının önüne nasıl geçebileceğimizi anlatacağım.

Bicep’te standart bir for loop kullanabileceğimiz gibi for each tarzında bir array içerisinde de dönebiliyoruz.

İlk örneğimizde yine container registry üzerinden ilerleyelim. 3 tane container registry oluşturmak istiyorum. Bunu işi uzatmak isterseniz isim parametresine farklı değerler verip tekrar tekrar çalıştırarak yapabileceğiniz gibi, Resim-1‘de görebileceğiniz gibi min 1, max 5 olarak şekilde bir resourceCount parametresi tanımlayıp, resource tanımına for i in range(1, resourceCount) ekleyerek daha kolay bir şekilde çözebiliriz.

Resim-1

Böylelikle “az deployment…” komutunu bir kez çalıştırarak istediğimiz (Decorator’da belirlediğimiz max değeri) kadar container registry oluşturabiliyorum.

Resim-2

Şimdi de bir array örneği üzerinden 3 tane container registry oluşturacağım ve her bir container registry için farklı özellikler belirleyeceğim. Resim-3‘te göreceğiniz gibi crSettings adında, içerisinde de skuName, name, location ve adminUserEnabled değerlerini belirlediğim bir array tanımlıyorum.

Resim-3

Resource tanımında da for crSetting in crSettings şeklinde bir loop tanımı ile crSettings içerisindeki değerlere erişmek için crSetting adındaki objeyi kullanıyorum. İlgili komutu çalıştırdığımda ise Resim-4‘te göreceğiniz gibi 3 tane ve verdiğim değerlerde container registry oluştuğunu görebiliyorum.

Resim-4

Burada sizlerin de farkedeceğiz üzere yanlış bir kullanım var. İsim verirken hepsine tek tek 1, 2, 3 gibi hardcoded olarak değer vermiştim. Bu çok kullanışlı bir yöntem değil. Bu nedenle ilk örnekteki gibi isim parametresine değerini eklemek istiyorum.  Öncelikle crSettings array’inde yer alan name değerlerinde sondaki 1, 2 ve 3’ü siliyorum ve for loop tanımını for (crSetting, i) in crSettings olarak değiştirip, burada yer alan name değerini de ‘${crSetting.name}dev${i}’ olarak güncelliyorum (Resim-6).

Resim-6

Bu şekilde deployment yaptığımda ise isimlendirmelerin Resim-7‘de de göreceğiniz gibi belirttiğim şekilde oluştuğunu görebiliyorum.

Resim-7

Bu örnekte de hatalı bir kullanım yaptım. Deployment’ı resource group scope’unda yaptım ancak farklı location’lar tanımladım, yani deployment yaptığım resource group West Europe ama içerisinde UK South ve UK West’te yer alan 2 resource var, çok da mantıklı gelmedi :)

Bunu tarz durumları for loop ile birlikte if condition da kullanarak çözebiliriz. Burada da loop tanımı sonuna if condition ekliyorum: for (crSetting, i) in crSettings: if (crSetting.location == location)

Böylece location parametresinde gönderdiğim değer (default değer resource group’un location değeri) değilse, resource oluşmayacak. Örnekte sadece array’in son elementinin oluşmasını bekliyorum.

Resim-8

Komutu çalıştırdığımda ise beklediğim gibi sadece resource group’un location değeri (West Europe) ile aynı olan container registry’nin oluştuğunu görebiliyorum (Resim-9).

Resim-9

For loop ile oluşturduğunuz resource’lar aynı anda, paralel bir şekilde oluşturulur. Eğer batch’ler halinde yani teker teker, ikişer ikişer vb oluşturmak istiyorsanız batchsize decorator’ünü kullanabilirsiniz (Resim-10).

Resim-10

For loop’ları sadece resource başlangıcında değil, resource’ların property tanımlarında da benzer şekilde kullanabilirsiniz.

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,bicep

Yazı gezinmesi

Mobil sürümden çık