Parametreleri ve değişkenleri kullanarak esneklik ekleme

Tamamlandı

Şablonlar, yeniden kullanılabilirliklerinden dolayı güçlü olur. Kaynaklarınızın birden çok ortamı veya kopyasını dağıtan şablonlar yazmak için Bicep'i kullanabilirsiniz.

Oyuncak şirketiniz düzenli olarak yeni ürünler başlatır ve her ürün lansmanı için gereken Azure kaynaklarını oluşturmak için Bicep şablonlarını kullanmanız gerekir. Sabit kaynak adlarını kullanmaktan kaçınmanız gerekir. Birçok Azure kaynağı türünün benzersiz adlara ihtiyacı vardır, bu nedenle şablonunuza ad eklemek, şablonu birden çok ürün lansmanı için yeniden kullanamamanızı sağlar. Ayrıca, oyuncakların nereye fırlatılacağına bağlı olarak kaynakları farklı konumlara dağıtmanız gerekir; bu da kaynak konumlarını şablonunuza ekleyemezsiniz.

Bu ünitede şablonlarınızı esnek ve yeniden kullanılabilir hale getirebilecek iki Bicep özelliği olan parametreler ve değişkenler hakkında bilgi edineceksiniz. Ayrıca ifadelerle de tanıştırılacaksınız.

Dekont

Bu ünitedeki komutlar kavramları göstermek için gösterilir. Komutları henüz çalıştırmayın. Burada öğrendiklerini yakında öğreneceksin.

Parametreler ve değişkenler

Parametre, değerleri şablon dosyasının dışından getirmenizi sağlar. Örneğin, şablonu Azure CLI veya Azure PowerShell kullanarak el ile dağıtıyorsanız, her parametre için değer sağlamanız istenir. Ayrıca, dağıtım için kullanmak istediğiniz tüm parametreleri ve değerleri listeleyen bir parametre dosyası da oluşturabilirsiniz. Şablon dağıtım işlem hattı gibi otomatik bir işlemden dağıtılırsa işlem hattı parametre değerlerini sağlayabilir.

Bir değişken tanımlanır ve şablon içinde ayarlanır. Değişkenler, önemli bilgileri tek bir yerde depolamanıza ve kopyalayıp yapıştırmanıza gerek kalmadan şablon boyunca bu bilgilere başvurmanıza olanak sağlar.

Genellikle her dağıtım arasında değişebilecek parametreler için aşağıdakiler gibi parametreleri kullanmak iyi bir fikirdir:

  • Benzersiz olması gereken kaynak adları.
  • Kaynakların dağıtılacağı konumlar.
  • SKU'ları, fiyatlandırma katmanları ve örnek sayıları gibi kaynakların fiyatlandırmasını etkileyen Ayarlar.
  • Şablonda tanımlanmayan diğer sistemlere erişmek için gereken kimlik bilgileri ve bilgiler.

Değişkenler genellikle her dağıtım için aynı değerleri kullanacağınız, ancak bir değeri şablon içinde yeniden kullanılabilir hale getirmek veya karmaşık bir değer oluşturmak için ifadeleri kullanmak istediğinizde iyi bir seçenektir. Benzersiz adlara ihtiyaç duymadan kaynaklar için değişkenleri de kullanabilirsiniz.

Bahşiş

Parametreleri ve değişkenleri iyi adlandırmak önemlidir, bu nedenle şablonlarınızın okunması ve anlaşılması kolaydır. Net, açıklayıcı ve tutarlı adlar kullandığınızdan emin olun.

Parametre ekleme

Bicep'te aşağıdaki gibi bir parametre tanımlayabilirsiniz:

param appServiceAppName string

Şimdi bu tanımın her bir bölümünün nasıl çalıştığına bakalım:

  • param Bicep'e parametre tanımladığınızı bildirir.
  • appServiceAppName parametresinin adıdır. Şablonu el ile dağıtıyorsanız, bir değer girmeniz istenebilir, bu nedenle adın açık ve anlaşılır olması önemlidir. Ad, kaynak sembolik adlarıyla olduğu gibi şablondaki parametre değerine de nasıl başvurabileceğinizdir.
  • string parametresinin türüdür. Bicep parametreleri için metinint, sayılar ve bool Boole true veya false değerleri dahil olmak üzere string birkaç farklı tür belirtebilirsiniz. ve object türlerini kullanarak array daha karmaşık parametreler de geçirebilirsiniz.

Bahşiş

Çok fazla parametre kullanarak şablonları fazla genelleştirmemeye çalışın. İş senaryonuz için ihtiyacınız olan en az parametre sayısını kullanmanız gerekir. Gereksinimleriniz değişirse gelecekte şablonları istediğiniz zaman değiştirebileceğinizi unutmayın.

Varsayılan değerleri sağlama

İsteğe bağlı olarak bir parametre için varsayılan bir değer sağlayabilirsiniz. Varsayılan bir değer belirttiğinizde, parametre isteğe bağlı hale gelir. Şablonu dağıtan kişi isterse bir değer belirtebilir, ancak belirtmezse Bicep varsayılan değeri kullanır.

Varsayılan değeri şu şekilde ekleyebilirsiniz:

param appServiceAppName string = 'toy-product-launch-1'

Dekont

Bu örnekte, Azure Uygulaması Hizmeti uygulama adı sabit kodlanmış bir varsayılan değere sahiptir. App Service uygulamalarının benzersiz adlara ihtiyacı olduğundan bu iyi bir fikir değildir. Bunu kısa süre sonra düzelteceksiniz.

Şablonda parametre değerlerini kullanma

Parametreyi bildirdikten sonra, şablonun geri kalanı boyunca bu parametreye başvurabilirsiniz. Şimdi kaynak tanımında yeni parametrenizi nasıl kullanabileceğinizi görelim:

resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
  name: appServiceAppName
  location: 'eastus'
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Şablonun artık sabit kodlanmış bir değer yerine uygulama kaynağının kaynak adını ayarlamak için parametre değerini kullandığına dikkat edin.

Bahşiş

Visual Studio Code için Bicep uzantısı, önerilen uygulamaları takip etmediğinizde size haber vermek için görsel göstergeler gösterir. Örneğin, kullanmadığınız bir parametre tanımlarsanız sizi uyarır. Siz çalışırken Bicep linter bu denetimleri sürekli olarak çalıştırır.

Değişken ekleme

Aşağıdaki gibi bir değişken tanımlayabilirsiniz:

var appServicePlanName = 'toy-product-launch-plan'

Değişkenler parametrelere benzer şekilde tanımlanır, ancak birkaç fark vardır:

  • Bicep'e var değişken bildirdiğiniz bildirmek için anahtar sözcüğünü kullanın.
  • Bir değişken için bir değer sağlamanız gerekir.
  • Değişkenlerin türe ihtiyacı yoktur. Bicep, ayarladığınız değere göre türü belirleyebilir.

İfadeler

Şablon yazarken, genellikle değerleri sabit kodlamak veya hatta bir parametrede belirtilmelerini istemek istemezsiniz. Bunun yerine, şablon çalıştırıldığında değerleri bulmak istiyorsunuz. Örneğin, büyük olasılıkla bir şablondaki tüm kaynakları tek bir Azure bölgesine dağıtmak istersiniz: kaynak grubunu oluşturduğunuz bölge. Alternatif olarak, şirketinizin kullandığı belirli bir adlandırma stratejisini temel alan bir kaynak için otomatik olarak benzersiz bir ad oluşturmak isteyebilirsiniz.

Bicep'teki ifadeler , her türlü ilginç senaryoyla ilgilenmenize yardımcı olan güçlü bir özelliktir. Şimdi Bicep şablonunda ifadeleri kullanabileceğiniz birkaç yere göz atalım.

Kaynak konumları

Şablon yazarken ve dağıtırken genellikle her kaynağın konumunu tek tek belirtmek zorunda kalmak istemezsiniz. Bunun yerine, varsayılan olarak tüm kaynakları kaynak grubunun oluşturulduğu konuma dağıtın diyen basit bir iş kuralınız olabilir.

Bicep'te adlı locationbir parametre oluşturabilir ve değerini ayarlamak için bir ifade kullanabilirsiniz:

param location string = resourceGroup().location

Bu parametrenin varsayılan değerine bakın. Şablonun dağıtıldığı kaynak grubu hakkındaki bilgilere erişmenizi sağlayan adlı resourceGroup() bir işlev kullanır. Bu örnekte şablon özelliğini location kullanır. Kaynaklarınızı kaynak grubuyla aynı Azure bölgesine dağıtmak için bu yaklaşımı kullanmak yaygın bir yaklaşımdır.

Birisi bu şablonu dağıtıyorsa, buradaki varsayılan değeri geçersiz kılmayı ve farklı bir konum kullanmayı seçebilir.

Dekont

Azure'daki bazı kaynaklar yalnızca belirli konumlara dağıtılabilir. Bu kaynakların konumlarını ayarlamak için ayrı parametreler gerekebilir.

Artık şablonun içindeki kaynak konumu parametresini şu şekilde kullanabilirsiniz:

resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Kaynak adları

Birçok Azure kaynağının benzersiz adlara ihtiyacı vardır. Senaryonuzda benzersiz adlara ihtiyaç duyan iki kaynağınız vardır: depolama hesabı ve App Service uygulaması. Bu değerlerin parametre olarak ayarlanmasını istemek, şablonu kullanan kişinin başka kimsenin kullanmadığı bir ad bulması gerektiğinden bunu zorlaştırabilir.

Kaynak adları oluştururken kullanışlı olan Bicep adlı uniqueString() başka bir işleve sahiptir. Bu işlevi kullandığınızda, farklı dağıtımlarda farklı ama aynı kaynakların tüm dağıtımlarında tutarlı olması gereken bir tohum değeri sağlamanız gerekir.

İyi bir tohum değeri seçerseniz, aynı kaynak kümesini her dağıttığınızda aynı adı alabilirsiniz, ancak aynı şablonu kullanarak farklı bir kaynak kümesi dağıttığınızda farklı bir ad alırsınız. şimdi işlevini nasıl kullanabileceğinize uniqueString() bakalım:

param storageAccountName string = uniqueString(resourceGroup().id)

Bu parametrenin resourceGroup() varsayılan değeri, kaynak konumunu ayarlarken yaptığınız gibi işlevi yeniden kullanır. Ancak bu kez bir kaynak grubunun kimliğini alırsınız. Kaynak grubu kimliği şöyle görünür:

/subscriptions/3e57e557-826f-460b-8f1c-4ce38fd53b32/resourceGroups/MyResourceGroup

Kaynak grubu kimliği, Azure abonelik kimliğini (3e57e557-826f-460b-8f1c-4ce38fd53b32) ve kaynak grubu adını (MyResourceGroup) içerir. Kaynak grubu kimliği genellikle kaynak adları için bir tohum değeri için iyi bir adaydır, çünkü:

  • Aynı kaynakları her dağıttığınızda, bunlar aynı kaynak grubuna gider. uniqueString() İşlev her seferinde aynı değeri döndürür.
  • Azure aboneliğinde iki farklı kaynak grubuna dağıtım yaparsanız, resourceGroup().id kaynak grubu adları farklı olacağı için değer farklı olur. uniqueString() işlevi her kaynak kümesi için farklı değerler verir.
  • Aynı kaynak grubu adını kullansanız bile iki farklı Azure aboneliğine dağıtım yaparsanız, resourceGroup().id Azure abonelik kimliği farklı olacağı için değer farklı olur. uniqueString() işlevi yine her kaynak kümesi için farklı değerler verir.

Bahşiş

Kaynak adları oluşturmak için şablon ifadelerini kullanmak genellikle iyi bir fikirdir. Birçok Azure kaynak türünün izin verilen karakterler ve adlarının uzunluğu hakkında kuralları vardır. Kaynak adlarının oluşturulmasını şablona eklemek, şablonu kullanan herkesin bu kurallara uymayı hatırlaması gerekmeyecek anlamına gelir.

Birleştirilmiş dizeler

Yalnızca kaynak adlarını ayarlamak için işlevini kullanırsanız uniqueString() , büyük olasılıkla benzersiz adlar alırsınız, ancak bunlar anlamlı olmaz. İyi bir kaynak adı da açıklayıcı olmalıdır, böylece kaynağın ne için olduğu net bir şekilde anlaşılır. Genellikle anlamlı bir sözcüğü veya dizeyi benzersiz bir değerle birleştirerek bir ad oluşturmak istersiniz. Bu şekilde hem anlamlı hem de benzersiz adlara sahip kaynaklarınız olur.

Bicep, dizeleri birleştirmenize olanak tanıyan dize ilişkilendirmesi adlı bir özelliğe sahiptir. Şimdi nasıl çalıştığını görelim:

param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'

Parametresi için varsayılan değerin storageAccountName artık iki bölümü vardır:

  • toylaunch , Azure'da dağıtılan kaynağa bakan herkesin depolama hesabının amacını anlamasına yardımcı olan sabit kodlanmış bir dizedir.
  • ${uniqueString(resourceGroup().id)} , Bicep'e işlevin çıkışını değerlendirmesini uniqueString(resourceGroup().id) ve ardından dizede birleştirmesini söylemenin bir yoludur.

Bahşiş

uniqueString() Bazen işlev bir sayı ile başlayan dizeler oluşturur. Depolama hesapları gibi bazı Azure kaynakları adlarının sayılarla başlamasına izin vermez. Bu, önceki örnekte olduğu gibi kaynak adları oluşturmak için dize ilişkilendirmesi kullanmanın iyi bir fikir olduğu anlamına gelir.

Kaynaklar için SKU'ları seçme

Ekibinizin diğer üyeleri, şimdiye kadar oluşturduğunuz Bicep kodundan etkilendi. Tüm yeni oyuncak lansmanlarınızı desteklemek üzere kaynakları dağıtmak için şablonunuzu kullanmaya birlikte karar verdiniz.

İş arkadaşlarınızdan biri, pazarlama ekibinin siteleri müşterilerin kullanımına sunulmadan önce test etmelerine yardımcı olmak için her ürün lansmanı için üretim dışı ortamlar oluşturmanızı önerdi. Ancak, üretim dışı ortamlarınıza çok fazla para harcamadığınızdan emin olmak istiyorsunuz, bu nedenle bazı ilkelere birlikte karar verin:

  • Yüksek dayanıklılık için üretim ortamlarında depolama hesapları (coğrafi olarak yedekli depolama) SKU'sunda dağıtılır Standard_GRS . App Service planları, yüksek performans için SKU'da P2v3 dağıtılır.
  • Üretim dışı ortamlarda depolama hesapları (yerel olarak yedekli depolama) SKU'sunda Standard_LRS dağıtılır. App Service planları ücretsiz F1 SKU'da dağıtılır.

Bu iş gereksinimlerini uygulamanın bir yolu, parametreleri kullanarak her SKU'yu belirtmektir. Ancak, özellikle daha büyük şablonlarınız olduğunda her SKU'yu parametre olarak belirtmek zor olabilir. Bir diğer seçenek de parametrelerin, değişkenlerin ve ifadelerin birleşimini kullanarak iş kurallarını şablona eklemektir.

İlk olarak, dağıtımın üretim ortamına mı yoksa üretim dışı ortama mı yönelik olduğunu gösteren bir parametre belirtebilirsiniz:

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

Bu kodun parametresi için izin verilen değerlerin listesini belirtmek için bazı yeni söz dizimleri kullandığına environmentType dikkat edin. Bicep, bu değerlerden birini sağlamadığı sürece kimsenin şablonu dağıtmasına izin vermez.

Ardından, ortama göre depolama hesabı ve App Service planı için kullanılacak SKU'ları belirleyen değişkenler oluşturabilirsiniz:

var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2V3' : 'F1'

Burada da bazı yeni söz dizimine dikkat edin. Şimdi bunu ayıralım:

  • (environmentType == 'prod') parametresi için environmentType hangi izin verilen değerin kullanıldığına bağlı olarak Boole değeri (true veya false) olarak değerlendirilir.
  • ?üçüncül işleç olarak adlandırılır ve bir if/then deyimini değerlendirir. İfade true ise işleç sonrasındaki değer ? kullanılır. İfade false olarak değerlendirilirse, iki nokta üst üste (:) sonrasındaki değer kullanılır.

Bu kuralları şu şekilde çevirebiliriz:

  • değişkeni için storageAccountSkuName parametresi olarak ayarlanırsa environmentTypeprodSKU'yu Standard_GRS kullanın. Aksi takdirde SKU'yu Standard_LRS kullanın.
  • değişkeni için appServicePlanSkuName parametresi olarak ayarlanırsa environmentTypeprodSKU'yu P2V3 ve PremiumV3 katmanını kullanın. Aksi takdirde SKU'yu F1 kullanın.

Bahşiş

Bunun gibi çok parçalı ifadeler oluşturduğunuzda, ifadeleri doğrudan kaynak özelliklerine eklemek yerine değişkenleri kullanmak en iyisidir. Bu, kaynak tanımlarınızı mantıkla karmaşık hale getirmekten kaçındığından şablonlarınızın okunmasını ve anlaşılmasını kolaylaştırır.

Şablonunuzda parametreleri, değişkenleri ve ifadeleri kullandığınızda, şablonunuzu yeniden kullanabilir ve yeni bir kaynak kümesini hızla dağıtabilirsiniz. Örneğin, pazarlama departmanınız bir sonraki oyuncak lansmanı için yeni bir web sitesi dağıtmanızı istediğinde, dağıttığınız her ortam için yeni parametre değerleri sağlarsınız ve ayarlanırsınız!