Bıcep 'de kaynak bildirimi
Bu makalede, Bıcep dosyanıza kaynak eklemek için kullandığınız sözdizimi açıklanır.
Bildirim
Anahtar sözcüğünü kullanarak bir kaynak bildirimi ekleyin resource . Kaynak için bir sembolik ad ayarlarsınız. Sembolik ad, kaynak adı ile aynı değildir. Sembolik adı kullanarak, Bıcep dosyanızın diğer bölümlerinde kaynağa başvurabilirsiniz.
resource <symbolic-name> '<full-type-name>@<api-version>' = {
<resource-properties>
}
Bu nedenle, bir depolama hesabı bildirimi şu ile başlayabilir:
resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
...
}
Sembolik adlar büyük/küçük harfe duyarlıdır. Harf, rakam ve alt çizgi ( _ ) içerebilir. Bir sayıyla başlayamaz. Bir kaynak bir parametre, değişken veya modülle aynı ada sahip olamaz.
Kullanılabilir kaynak türleri ve sürümü için bkz. Bıcep kaynak başvurusu. Bıcep apiProfile , Azure Resource Manager ŞABLONLARı (ARM ŞABLONLARı) JSON'da bulunan ' ı desteklemez.
Bir kaynağı koşullu olarak dağıtmak için if söz dizimini kullanın. Daha fazla bilgi için bkz. Bıcep 'de koşullu dağıtım.
resource <symbolic-name> '<full-type-name>@<api-version>' = if (condition) {
<resource-properties>
}
Bir kaynağın birden fazla örneğini dağıtmak için for söz dizimini kullanın. batchSizeÖrneklerin işlem temelli veya paralel olarak dağıtılıp dağıtılmayacağını belirtmek için dekoratörü kullanabilirsiniz. Daha fazla bilgi için bkz. Bıcep 'de yinelemeli döngüler.
@batchSize(int) // optional decorator for serial deployment
resource <symbolic-name> '<full-type-name>@<api-version>' = [for <item> in <collection>: {
<properties-to-repeat>
}]
Ayrıca, for bir dizi oluşturmak için kaynak özelliklerindeki sözdizimini de kullanabilirsiniz.
resource <symbolic-name> '<full-type-name>@<api-version>' = {
properties: {
<array-property>: [for <item> in <collection>: <value-to-repeat>]
}
}
Kaynak adı
Her kaynağın bir adı vardır. Kaynak adı ayarlanırken, kaynak adları için kurallara ve kısıtlamalaradikkat edin.
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: 'examplestorage'
...
}
Genellikle, dağıtım sırasında farklı değerleri geçirebilmeniz için adı bir parametreye ayarlarsınız.
@minLength(3)
@maxLength(24)
param storageAccountName string
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: storageAccountName
...
}
Konum
Birçok kaynak için bir konum gereklidir. Kaynağın IntelliSense veya şablon başvurusuaracılığıyla bir konuma ihtiyacı olup olmadığını belirleyebilirsiniz. Aşağıdaki örnek, depolama hesabı için kullanılan bir konum parametresi ekler.
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: 'examplestorage'
location: 'eastus'
...
}
Genellikle, farklı konumlara dağıtabilmeniz için konumu bir parametreye ayarlarsınız.
param location string = resourceGroup().location
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: 'examplestorage'
location: location
...
}
Farklı konumlarda farklı kaynak türleri desteklenir. Azure hizmeti için desteklenen konumları almak için bkz. bölgelere göre kullanılabilir ürünler. kaynak türü için desteklenen konumları almak üzere Azure PowerShell veya Azure clı kullanın.
((Get-AzResourceProvider -ProviderNamespace Microsoft.Batch).ResourceTypes `
| Where-Object ResourceTypeName -eq batchAccounts).Locations
Etiketler
Dağıtım sırasında bir kaynağa Etiketler uygulayabilirsiniz. Etiketler, dağıtılan kaynaklarınızı mantıksal olarak düzenlemenize yardımcı olur. Etiketleri belirtebileceğiniz farklı yollarla ilgili örnekler için bkz. ARM Şablon Etiketleri.
Azure kaynakları için yönetilen kimlikler
Bazı kaynaklar Azure kaynakları için yönetilen kimlikleridestekler. Bu kaynaklar, kaynak bildiriminin kök düzeyinde bir kimlik nesnesine sahiptir.
Sistem tarafından atanan ya da Kullanıcı tarafından atanan kimlikleri kullanabilirsiniz.
Aşağıdaki örnek, bir Azure Kubernetes hizmet kümesi için sistem tarafından atanan kimliğin nasıl yapılandırılacağını gösterir.
resource aks 'Microsoft.ContainerService/managedClusters@2020-09-01' = {
name: clusterName
location: location
tags: tags
identity: {
type: 'SystemAssigned'
}
Sonraki örnekte, bir sanal makine için Kullanıcı tarafından atanan kimliğin nasıl yapılandırılacağı gösterilmektedir.
param userAssignedIdentity string
resource vm 'Microsoft.Compute/virtualMachines@2020-06-01' = {
name: vmName
location: location
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${userAssignedIdentity}': {}
}
}
Kaynağa özgü özellikler
Yukarıdaki özellikler, çoğu kaynak türüne geneldir. Bu değerleri ayarladıktan sonra, dağıtmakta olduğunuz kaynak türüne özgü özellikleri ayarlamanız gerekir.
Hangi özelliklerin kullanılabilir olduğunu ve hangilerinin gerekli olduğunu öğrenmek için IntelliSense veya Bıcep kaynak başvurusunu kullanın. Aşağıdaki örnek, bir depolama hesabı için kalan özellikleri ayarlar.
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: 'examplestorage'
location: 'eastus'
sku: {
name: 'Standard_LRS'
tier: 'Standard'
}
kind: 'StorageV2'
properties: {
accessTier: 'Hot'
}
}
Bağımlılıklar
Kaynakları dağıttığınızda, bazı kaynakların diğer kaynaklardan önce mevcut olduğundan emin olmanız gerekebilir. örneğin, bir veritabanını dağıtabilmeniz için bir mantıksal SQL sunucusuna ihtiyacınız vardır. Bu ilişkiyi, bir kaynağı diğer kaynağa bağımlı olarak işaretleyerek kurarsınız. Kaynak dağıtımının sırası iki şekilde etkilenebilir: örtük bağımlılık ve Açık bağımlılık
Azure Resource Manager, kaynaklar arasındaki bağımlılıkları değerlendirir ve bunları kendi bağımlı sıralarına dağıtır. Resource Manager, birbirine bağımlı olmayan kaynakları paralel olarak dağıtır. Yalnızca aynı Bıcep dosyasına dağıtılan kaynaklar için bağımlılıklar tanımlamanız gerekir.
Örtük bağımlılık
Bir kaynak bildirimi aynı dağıtımdaki başka bir kaynağa başvurduğunda örtük bir bağımlılık oluşturulur. Örneğin, dnsZone 'a aşağıdaki örnekteki ikinci kaynak tanımı tarafından başvurulur:
resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
name: 'myZone'
location: 'global'
}
resource otherResource 'Microsoft.Example/examples@2020-06-01' = {
name: 'exampleResource'
properties: {
// get read-only DNS zone property
nameServers: dnsZone.properties.nameServers
}
}
İç içe bir kaynağın Ayrıca kapsayan kaynağı üzerinde örtük bir bağımlılığı vardır.
resource myParent 'My.Rp/parentType@2020-01-01' = {
name: 'myParent'
location: 'West US'
// depends on 'myParent' implicitly
resource myChild 'childType' = {
name: 'myChild'
}
}
Örtük bir bağımlılık mevcut olduğunda, açık bir bağımlılık eklemeyin.
İç içe geçmiş kaynaklar hakkında daha fazla bilgi için bkz. Bıcep 'de alt kaynaklar için ad ve tür ayarlama.
Açık bağımlılık
Açık bir bağımlılık, özelliği ile birlikte bildirilmiştir dependsOn . Özelliği bir kaynak tanımlayıcıları dizisini kabul eder, bu nedenle birden fazla bağımlılık belirtebilirsiniz.
Aşağıdaki örnekte adlı bir otherZone DNS bölgesine bağlı olan adlı BIR DNS bölgesi gösterilmektedir dnsZone :
resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
name: 'demoeZone1'
location: 'global'
}
resource otherZone 'Microsoft.Network/dnszones@2018-05-01' = {
name: 'demoZone2'
location: 'global'
dependsOn: [
dnsZone
]
}
dependsOnKaynaklarınız arasındaki ilişkileri eşlemek için kullanılması, bu işlemi neden yaptığınızı anlamak önemlidir. Örneğin, kaynakların nasıl birbirine bağlı olduğunu belgelemek için dependsOn doğru yaklaşım değildir. Dağıtımdan sonra öğede tanımlanan kaynakları sorgulayamaz dependsOn . Gereksiz bağımlılıkların ayarlanması dağıtım süresini yavaşlatır çünkü Kaynak Yöneticisi bu kaynakları paralel olarak dağıtabuyor.
Açık bağımlılıklar bazen gerekli olsa da, bunlara yönelik ihtiyaç nadir olarak bilinir. Çoğu durumda, kaynaklar arasındaki bağımlılığı ayırt etmek için sembolik bir ad kullanabilirsiniz. Kendinize açık bağımlılıklar ayarlamadıysanız, bunu kaldırmanın bir yolu olup olmadığını göz önünde bulundurmanız gerekir.
Bağımlılıkları görselleştirin
Visual Studio Code, bağımlılıkları görselleştirmeye yönelik bir araç sağlar. Visual Studio Code bir bıcep dosyası açın ve sol üst köşedeki görselleştirici düğmesini seçin. Aşağıdaki ekran görüntüsünde bir sanal makinenin bağımlılıkları gösterilmektedir.
Mevcut kaynaklar
Geçerli bicep dosyasının dışında bir kaynağa başvurmak için, existing bir kaynak bildiriminde anahtar sözcüğünü kullanın.
existingAnahtar sözcüğünü kullanırken, name kaynağı belirtin. Aşağıdaki örnek, geçerli dağıtımla aynı kaynak grubunda bulunan mevcut bir depolama hesabını alır.
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' existing = {
name: 'examplestorage'
}
output blobEndpoint string = stg.properties.primaryEndpoints.blob
İsteğe bağlı olarak, scope özelliğini farklı bir kapsamdaki kaynağa erişmek için ayarlayabilirsiniz. Aşağıdaki örnek, farklı bir kaynak grubundaki mevcut bir depolama hesabına başvurur.
resource stg 'Microsoft.Storage/storageAccounts@2019-06-01' existing = {
name: 'examplestorage'
scope: resourceGroup(exampleRG)
}
output blobEndpoint string = stg.properties.primaryEndpoints.blob
Mevcut olmayan bir kaynağa başvurulmasına çalışırsanız, NotFound hatayı alırsınız ve dağıtımınız başarısız olur.
Kapsamı ayarlama hakkında daha fazla bilgi için bkz. Bıcep Için kapsam işlevleri.
Yukarıdaki örneklerde depolama hesabı dağıtılmaz. Bunun yerine, simgesel adı kullanarak mevcut kaynaktaki özelliklere erişebilirsiniz.
Sonraki adımlar
- Bir kaynağı koşullu olarak dağıtmak için bkz. Bıcep 'de koşullu dağıtım.