Bu yazı serisi içerisinde temel hedefliğimiz nokta, Microsoft’un neden Project Bicep geliştirmeye doğru adım attığını olacak, bununla beraber Bicep ile Azure Resource Manager Şablonlarının temel farklılıklarını konuşarak dağıtımlar yapmaya çalışacağız. Öncelikle Project Bicep nedir ve bunun altında yatan hikayesi nedir bunu anlayamaya çalışalım.
- Bicep – Yeni Nesil Azure Dağıtım Şablonları
- Neden ihtiyacım var ve kullanmayalım?
- Bicep başlamak için mühendisde olması gereken araçlar,
Bicep – Yeni Nesil Azure Dağıtım Şablonları
Bicep, Azure kaynaklarını declarative olarak dağıtmak için Microsoft Azure ekibi (Alex Frankel) tarafından geliştirilen bir Domain Spesific Language(DSL) olduğunu söyleyebiliriz. Daha temiz bir sözdizimi, modüler hale gelmiş şablonlar ve geliştirilen kodun yeniden kullanımı için daha iyi yazma deneyimini sunarak büyük ölçüde basitleştirmeyi amaçlamaktadır. Azure Resource Manager şablonlarını kullanarak dağıtım yaptıysanız, JSON formatında olan bu şablonları başlangıç seviyesi için hiçte kolay olmadığını ve büyük ortamlar için ne kadar zor ve komplex hale geldiğini kolayca farkedeceksiniz. İşte tam bu noktada karşımıza Bicep adında henüz daha deneme aşamasında olan (experimental language, stage) karşımıza çıkıyor olacak. Bicep ürünü henüz Microsoft tarafından duyrulmadan önce (Private Preview’den tutun Public Preview olan haline kadar tüm Product toplantılarına) katılarak edindiğim tecrübelerim/elimden geldiği kadar yorum yaparak bu araca anlamaya ve yorumlayama çalıştım.
Bicep, Azure Resource Manager şablonları geliştirmek yerine Bicep kendine ait olan sade, basit ve anlaşılır yazım düzenine bağlı kalarak ve onu kullanarak inşaa edilmiş bir araç olduğunu söyleyebiliriz. Temel amacı, bir ARM Şablonunda yapılabilecek her şeyin bicepte (şuan bilinen belirli geçici sınırlamaların dışında) yapılabileceği anlamına geliyor. ARM şablonunda geçerli olan tüm kaynak türleri, apiVersionlar ve özellikler, Bicep'te üzerinden geliştirebilir ve dağıtabilirsiniz. Tekrar etmek gerekirse, Bicep kendine ait olan yazım düzeni içerisine basit sadece ve anlaşılır biçimde Azure Resource Manager şablonları geliştirmenize olanak tanıyor. Konuya başlamadan önce Bicep kelime anlamına bakmanıza tavsiye ederim.
Neden ihtiyacım var ve kullanmayalım?
Bicep bu kısımda vermek istediği mesaj tamamen Azure Resource Manager şablonlarında kullanmakta olduğumuz JSON formatına bir revizyon getirmek istemesi ve daha kolay, anlaşılır şekilde geliştirilebilmesi sağlamaya çalışmak. Bildiğiniz gibi Infrastructure as Code olarak çok kullanan diğer araçları seçerek örneğin: Terraform, hemen hemen herşeyi gerçekleştirebilirsiniz. Başka bir yazımızda Terraform vs Bicep karşılaştırması yapıyor olacağım. Şimdilik bilmeniz gereken, Terraform cloud-agnostic olması sayesinde tek araç ile farklı hizmet sağlıyacılar üzerinde kullanabilmeniz mümkün, Bicep sadece uçtan uca Azure kaynakları dağıtımı için kullanabileceğiniz bir araç bu ayrımı bilmeniz gerekiyor. Eğer organizasyon içerisinde Terraform kullanıyorsanız, Bicep geçmek sizin için çokta mantıklı gözükmüyor olabilir. Zaten Bicep ekibide şunu açıkca söylüyor, “Eğer Terraform kullanmaktan memnunsanız, devam edebilirsiniz”. Terraform ve Azure Resource Manager şablonlarının farklı şekilde faydalı yönleri var bu tamamen proje/environment gibi kriterlere bağlı olarak değişebiliyor. Özetle bu kısımda hangi araçtan memnunsanız onu seçerek devam edebilirsiniz. Bicep bu konuyu çözmek için değil, Azure Resource Manager şablonlarının karmaşık haline çözüm getirmek için var. Şuan için Production-use kullanmak için desteği yok. Akıllara gelen diğer bir soru ise mevcut geliştirdiğiniz ve kullanmakta olduğunuz Azure Resource Manager şablonlarına ne olacak? Bu ksıımda ‘Bicep’ aracı decompile özelliği ile ilgili şablonları Bicep formatına dönüştürebileceksiniz. Unutmayalım, Azure Resource Manager Şablonları (.json) formatında olup ‘Bicep’ şablonları ise (.bicep) olarak işleyeceğiz.
Buraya kadar anlatılanlar kulağımıza hoş geliyor şimdi biraz beraber pratik yapalım.
Bicep başlamak için mühendisde olması gereken araçlar,
- Visual Studio Code
- Bicep VS Code Extension
- Bicep CLI ( Bu adresten erişebilirsiniz. )
Bicep CLI indirmek için ilgili MSI paketini çalıştırabilir yada aşağıda paylaştığım PowerShell Script çalıştırarak elde edebilirsiniz.
#Create the install folder
$installPath = "$env:USERPROFILE\\.bicep"
$installDir = New-Item -ItemType Directory -Path $installPath -Force
$installDir.Attributes += 'Hidden'
# Fetch the latest Bicep CLI binary
(New-Object Net.WebClient).DownloadFile("https://github.com/Azure/bicep/releases/latest/download/bicep-win-x64.exe", "$installPath\\bicep.exe")
# Add bicep to your PATH
$currentPath = (Get-Item -path "HKCU:\\Environment" ).GetValue('Path', '', 'DoNotExpandEnvironmentNames')
if (-not $currentPath.Contains("%USERPROFILE%\\.bicep")) { setx PATH ($currentPath + ";%USERPROFILE%\\.bicep") }
if (-not $env:path.Contains($installPath)) { $env:path += ";$installPath" }
# Verify you can now access the 'bicep' command.
bicep --help
# Done!
Bicep CLI sahip olduktan sonra bilmemiz gereken temel iki adet komutlar olacak. Bunlar sırasıyla,
‘bicep build .\main.bicep ‘– Geliştirdiğiniz Bicep şablonunu Azure Resource Manager Şablonuna dönüştürmenizi sağlayan komut. ( .Bicep formatını .JSON dönüştürmek )
‘bicep decompile .\main.json’ – Mevcut Azure Resource Manager şablonunu Bicep formatına dönüştürmenizi yardımcı olacak komut. ( .JSON formatını . Bicep dönüştürmek )
Genel hatlarıyla ön hazırlıklarımızı tamamladık, artık yavaştan Bicep dilinin getirdiği yenilikler ve Azure Resource Manager şablonu ile kıyaslamaya bir sonraki yazımızda başlayalım.