Atur nama dan jenis sumber daya anak

Sumber daya anak adalah sumber daya yang hanya ada dalam konteks sumber daya lain. Misalnya, ekstensi komputer virtual tidak dapat ada tanpa komputer virtual. Sumber daya ekstensi adalah anak dari komputer virtual.

Setiap sumber daya induk hanya menerima jenis sumber daya tertentu sebagai sumber daya anak. Hierarki tipe sumber daya tersedia dalam referensi sumber daya Bicep.

Artikel ini menunjukkan berbagai cara Anda dapat mendeklarasikan sumber daya anak.

Sumber daya pelatihan

Jika Anda lebih suka mempelajari tentang sumber daya anak melalui panduan langkah demi langkah, lihat Menyebarkan sumber daya anak dan ekstensi dengan menggunakan Bicep.

Pola nama dan tipe

Di Bicep, Anda dapat menentukan sumber daya anak baik di dalam atau di luar sumber daya induk. Nilai yang Anda berikan untuk nama sumber daya dan jenis sumber daya bervariasi berdasarkan cara Anda mendeklarasikan sumber daya anak. Namun, nama lengkap dan jenis selalu memutuskan untuk pola yang sama.

Nama lengkap sumber daya anak menggunakan pola:

{parent-resource-name}/{child-resource-name}

Jika Anda memiliki lebih dari dua tingkat dalam hierarki, terus ulangi nama induk:

{parent-resource-name}/{child-level1-resource-name}/{child-level2-resource-name}

Jenis lengkap sumber daya anak menggunakan pola:

{resource-provider-namespace}/{parent-resource-type}/{child-resource-type}

Jika Anda memiliki lebih dari dua level dalam hierarki, terus ulangi jenis sumber daya induk:

{resource-provider-namespace}/{parent-resource-type}/{child-level1-resource-type}/{child-level2-resource-type}

Jika Anda menghitung segmen antara / karakter, jumlah segmen dalam jenis selalu satu lebih dari jumlah segmen dalam nama.

Dalam sumber daya induk

Contoh berikut memperlihatkan sumber daya anak yang disertakan dalam properti sumber daya induk.

resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
  <parent-resource-properties>

  resource <child-resource-symbolic-name> '<child-resource-type>' = {
    <child-resource-properties>
  }
}

Deklarasi sumber daya berlapis harus muncul di tingkat atas sintaks sumber daya induk. Deklarasi tersebut mungkin memiliki lapisan dalam yang acak, selama setiap tingkat adalah jenis anak dari sumber daya induknya.

Saat ditentukan dalam jenis sumber daya induk, Anda memformat nilai jenis dan nama sebagai segmen tunggal tanpa garis miring. Contoh berikut menunjukkan akun penyimpanan dengan sumber daya anak untuk layanan file, dan layanan file memiliki sumber daya anak untuk berbagi file. Nama layanan file diatur ke default dan jenisnya diatur ke fileServices. Nama berbagi file diatur ke exampleshare dan jenisnya diatur ke shares.

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

  resource service 'fileServices' = {
    name: 'default'

    resource share 'shares' = {
      name: 'exampleshare'
    }
  }
}

Jenis sumber daya lengkap masih Microsoft.Storage/storageAccounts/fileServices dan Microsoft.Storage/storageAccounts/fileServices/shares. Anda tidak menyediakan Microsoft.Storage/storageAccounts/ karena jenis ini diasumsikan dari jenis dan versi sumber daya induk. Sumber daya berlapis dapat mendeklarasikan versi API secara opsional menggunakan sintaks <segment>@<version>. Jika sumber daya berlapis menghilangkan versi API, versi API dari sumber daya induk akan digunakan. Jika sumber daya berlapis menentukan versi API, versi API yang ditentukan tersebut akan digunakan.

Nama sumber daya anak diatur ke default dan exampleshare namun nama penuh termasuk nama induk. Anda tidak menyediakan examplestorage atau default karena diasumsikan dari sumber daya induk.

Sumber daya berlapis dapat mengakses properti sumber daya induknya. Sumber daya lain yang dideklarasikan di dalam tubuh sumber daya induk yang sama dapat saling merujuk satu sama lain dengan menggunakan nama simbolik. Sumber daya induk tidak diperkenankan mengakses properti sumber daya yang dikandungnya karena akan menyebabkan dependensi siklik.

Untuk mereferensikan sumber daya bertumpuk di luar sumber daya induk, sumber daya tersebut harus memenuhi syarat dengan nama sumber daya yang terkandung dan operator ::. Misalnya, untuk mengeluarkan properti dari sumber daya anak:

output childAddressPrefix string = VNet1::VNet1_Subnet1.properties.addressPrefix

Di luar sumber daya induk

Contoh berikut memperlihatkan sumber daya anak di luar sumber daya induk. Anda mungkin menggunakan pendekatan ini jika sumber daya induk tidak disebarkan dalam templat yang sama, atau jika Anda ingin menggunakan perulangan untuk membuat lebih dari satu sumber daya anak. Tentukan properti induk pada sumber daya anak dengan nilai yang diatur ke nama simbolik sumber daya induk. Dengan sintaks ini Anda masih perlu mendeklarasikan jenis sumber daya lengkap, tetapi nama sumber daya anak hanya berlaku untuk sumber daya anak.

resource <parent-resource-symbolic-name> '<resource-type>@<api-version>' = {
  name: 'myParent'
  <parent-resource-properties>
}

resource <child-resource-symbolic-name> '<child-resource-type>@<api-version>' = {
  parent: <parent-resource-symbolic-name>
  name: 'myChild'
  <child-resource-properties>
}

Ketika ditentukan di luar sumber daya induk, Anda memformat jenis dan dengan garis miring untuk menyertakan jenis dan nama induk.

Contoh berikut menunjukkan akun penyimpanan, layanan file, dan file berbagi yang semuanya ditentukan di tingkat akar.

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
}

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

Cara kerja referensi nama simbolik sumber daya anak sama dengan referensi sumber daya induk.

Nama sumber daya lengkap di luar induk

Anda juga dapat menggunakan nama dan jenis sumber daya lengkap saat mendeklarasikan sumber daya anak di luar induk. Anda tidak mengatur properti induk pada sumber daya anak. Karena dependensi tidak dapat disimpulkan, Anda harus mengaturnya secara eksplisit.

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: 'examplestorage/default'
  dependsOn: [
    storage
  ]
}

resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2022-09-01' = {
  name: 'examplestorage/default/exampleshare'
  dependsOn: [
    service
  ]
}

Penting

Menetapkan nama dan jenis sumber daya lengkap bukanlah pendekatan yang disarankan. Ini tidak seperti jenis aman seperti menggunakan salah satu pendekatan lainnya. Untuk informasi selengkapnya, lihat Aturan Linter: gunakan properti induk.

Langkah berikutnya