Dependensi sumber daya di Bicep

Saat menyebarkan sumber daya, Anda mungkin perlu memastikan beberapa sumber daya disebarkan sebelum sumber daya lain. Misalnya, Anda memerlukan server SQL logis sebelum menyebarkan database. Anda membangun hubungan ini dengan menandai satu sumber daya sebagai bergantung pada sumber daya lainnya. Urutan penyebaran sumber daya dapat ditentukan dengan dua cara: dependensi implisit dan dependensi eksplisit

Azure Resource Manager mengevaluasi dependensi antar sumber daya, dan menyebarkannya dalam urutan dependennya. Jika sumber daya tidak bergantung satu sama lain, Resource Manager akan menyebarkannya secara paralel. Anda hanya perlu menentukan dependensi untuk sumber daya yang disebarkan dalam file Bicep yang sama.

Dependensi implisit

Dependensi implisit dibuat ketika satu deklarasi sumber daya mereferensikan pengidentifikasi sumber daya lain. Pada contoh berikut, otherResource mendapatkan properti dari exampleDnsZone. Sumber daya bernama otherResource secara implisit tergantung pada exampleDnsZone.

resource exampleDnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'myZone'
  location: 'global'
}

resource otherResource 'Microsoft.Example/examples@2023-05-01' = {
  name: 'exampleResource'
  properties: {
    // get read-only DNS zone property
    nameServers: exampleDnsZone.properties.nameServers
  }
}

Sumber daya berlapis juga memiliki dependensi implisit di sumber daya yang ada di dalamnya.

resource myParent 'My.Rp/parentType@2023-05-01' = {
  name: 'myParent'
  location: 'West US'

  // implicit dependency on 'myParent'
  resource myChild 'childType' = {
    name: 'myChild'
  }
}

Sumber daya yang menyertakan properti induk memiliki dependensi implisit pada sumber daya induk. Ini tergantung pada sumber daya induk, bukan sumber daya anak lainnya.

Contoh berikut menunjukkan akun penyimpanan dan layanan file. Layanan file memiliki dependensi implisit pada akun penyimpanan.

resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2022-09-01' = {
  name: 'default'
  parent: storage
}

Ketika ada ketergantungan implisit, jangan menambahkan dependensi eksplisit.

Untuk informasi selengkapnya tentang sumber daya yang disarangkan, lihat Mengatur nama dan jenis untuk sumber daya anak dalam Bicep.

Dependensi eksplisit

Dependensi eksplisit dideklarasikan dengan properti dependsOn. Properti menerima berbagai pengidentifikasi sumber daya, sehingga Anda dapat menentukan lebih dari satu dependensi. Anda dapat menentukan dependensi sumber daya berlapis dengan menggunakan :: operator .

Contoh berikut menunjukkan zona DNS bernama otherZone yang tergantung pada zona DNS bernama 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
  ]
}

Meskipun Anda mungkin cenderung menggunakan dependsOn untuk memetakan hubungan antara sumber daya, penting untuk memahami mengapa Anda melakukannya. Misalnya, untuk mendokumentasikan bagaimana sumber daya saling terhubung, dependsOn bukan pendekatan yang tepat. Setelah penyebaran, sumber daya tidak mempertahankan dependensi penyebaran di propertinya, sehingga tidak ada perintah atau operasi yang memungkinkan Anda melihat dependensi. Mengatur dependensi yang tidak perlu memperlambat waktu penyebaran karena Resource Manager tidak dapat menyebarkan sumber daya tersebut secara paralel.

Meskipun dependensi eksplisit terkadang diperlukan, kebutuhan akan dependensi eksplisit jarang terjadi. Dalam sebagian besar kasus, Anda memiliki referensi simbolis yang tersedia untuk menyiratkan dependensi di antara sumber daya. Jika Anda menemukan diri Anda menetapkan dependensi eksplisit, Anda harus mempertimbangkan apakah ada cara untuk menghapusnya.

Memvisualisasikan dependensi

Visual Studio Code menyediakan alat untuk memvisualisasikan dependensi. Buka file Bicep di Visual Studio Code, dan pilih tombol visualizer di sudut kiri atas. Cuplikan layar berikut menunjukkan grafik untuk mesin virtual.

Cuplikan layar visualizer sumber daya Bicep Visual Studio Code

Langkah berikutnya

Agar sintaks dapat menyebarkan sumber daya, lihat Deklarasi sumber daya di Bicep.