Menyebarkan beberapa sumber daya dengan menggunakan perulangan

Selesai

Seringkali, Anda perlu menyebarkan beberapa sumber daya yang sangat mirip. Dengan menambahkan perulangan ke file Bicep Anda, Anda dapat menghindari keharusan untuk mengulangi definisi sumber daya. Sebagai gantinya, Anda dapat mengatur jumlah contoh sumber daya yang ingin Anda sebarkan secara dinamis. Anda bahkan dapat menyesuaikan properti untuk setiap instans.

Untuk perusahaan mainan Anda, Anda perlu menyebarkan infrastruktur back-end, termasuk beberapa server Azure SQL, untuk mendukung peluncuran boneka beruang pintar baru. Anda perlu menyebarkan server logis khusus ke setiap negara/wilayah tempat mainan akan tersedia, sehingga Anda mematuhi undang-undang perlindungan data setiap negara/wilayah.

Terlepas dari lokasinya, semua server logis akan dikonfigurasi dengan cara yang sama. Anda ingin menggunakan kode Bicep untuk menyebarkan server logika Anda, dan parameter akan memungkinkan Anda menentukan kawasan tempat server logis harus disebarkan.

Dalam unit ini, Anda mempelajari cara menggunakan beberapa contoh sumber daya dengan menggunakan perulangan salinan.

Catatan

Perintah dalam unit ini ditampilkan untuk mengilustrasikan konsep. Jangan jalankan perintah terlebih dahulu. Anda akan segera mempraktikkan apa yang Anda pelajari di sini.

Menggunakan perulangan salinan

Saat Anda menentukan sumber daya atau modul dalam templat Bicep, Anda dapat menggunakan kata kunci for untuk membuat perulangan. Tempatkan for kata kunci dalam deklarasi sumber daya, lalu tentukan bagaimana Anda ingin Bicep mengidentifikasi setiap item dalam perulangan. Biasanya, Anda mengulang array objek untuk membuat beberapa contoh sumber daya. Contoh berikut menggunakan beberapa akun penyimpanan, dan namanya ditentukan sebagai nilai parameter:

param storageAccountNames array = [
  'saauditus'
  'saauditeurope'
  'saauditapac'
]

resource storageAccountResources 'Microsoft.Storage/storageAccounts@2021-09-01' = [for storageAccountName in storageAccountNames: {
  name: storageAccountName
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

Dalam contoh ini, perulangan mengulangi setiap item dalam array storageAccountNames. Setiap kali Bicep melewati perulangan, Bicep menempatkan nilai saat ini ke dalam variabel khusus yang disebut storageAccountName, dan digunakan sebagai nilai properti name. Perhatikan bahwa Bicep mengharuskan Anda meletakkan karakter kurung siku pembuka ([) sebelum kata kunci for, dan karakter kurung siku tutup (]) setelah definisi sumber daya.

Jika Anda menyebarkan file Bicep ini, Anda akan melihat bahwa tiga akun penyimpanan dibuat, dengan namanya ditentukan oleh item yang sesuai dalam storageAccountNames array.

Perulangan berdasarkan jumlah

Anda mungkin terkadang perlu mengulang untuk membuat sejumlah sumber daya tertentu, dan tidak menggunakan array sebagai sumbernya. Bicep menyediakan fungsi range(), yang membuat array angka. Misalnya, jika Anda perlu membuat empat akun penyimpanan yang disebut sa1 melalui sa4, Anda dapat menggunakan definisi sumber daya seperti ini:

resource storageAccountResources 'Microsoft.Storage/storageAccounts@2021-09-01' = [for i in range(1,4): {
  name: 'sa${i}'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}]

Saat Anda menggunakan fungsi range(), Anda menentukan nilai awal dan jumlah nilai yang ingin Anda buat. Misalnya, jika Anda ingin membuat akun penyimpanan dengan nama sa0, , sa1dan sa2, Anda akan menggunakan fungsi range(0,3).

Catatan

Saat Anda menggunakan fungsi range(), Anda menyediakan dua argumen. Argumen pertama menentukan nilai awal, dan yang kedua memberi tahu Bicep jumlah nilai yang Anda inginkan. Misalnya, jika Anda menggunakan range(3,4) maka Bicep mengembalikan nilai 3, , 4, 5dan 6. Pastikan Anda meminta jumlah nilai yang tepat, terutama saat Anda menggunakan nilai awal 0.

Mengakses indeks perulangan

Dengan Bicep, Anda dapat melakukan pengulangan melalui array dan mengambil indeks elemen saat ini dalam array. Misalnya, Anda ingin membuat server logika di setiap lokasi yang ditentukan oleh array, dan Anda ingin nama server menjadi sqlserver-1, sqlserver-2, dan sebagainya. Anda bisa mencapainya dengan menggunakan kode Bicep berikut:

param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

resource sqlServers 'Microsoft.Sql/servers@2021-11-01-preview' = [for (location, i) in locations: {
  name: 'sqlserver-${i+1}'
  location: location
  properties: {
    administratorLogin: administratorLogin
    administratorLoginPassword: administratorLoginPassword
  }
}]

Perhatikan bahwa properti name menyertakan ekspresi i+1. Nilai pertama dari variabel indeks i adalah nol. Jadi, Anda perlu menambahkan +1 ke dalamnya jika Anda ingin nama server Anda dimulai dengan 1.

Tip

Dalam contoh ini, kita telah menamai variabel indeks i. Ini adalah konvensi standar di Bicep. Namun, Anda dapat menggunakan nama apa pun yang Anda inginkan.

Memfilter item dengan perulangan

Dalam beberapa situasi, Anda mungkin ingin menyebarkan sumber daya dengan menggunakan perulangan salinan yang dikombinasikan dengan kondisi. Anda dapat melakukannya dengan menggabungkan kata kunci if dan for.

Dalam contoh berikut, kode menggunakan parameter array untuk menentukan sekumpulan server logika. Kondisi disebarkan dengan perulangan salinan untuk menyebarkan server hanya ketika properti environmentName objek perulangan sama dengan Production:

param sqlServerDetails array = [
  {
    name: 'sqlserver-we'
    location: 'westeurope'
    environmentName: 'Production'
  }
  {
    name: 'sqlserver-eus2'
    location: 'eastus2'
    environmentName: 'Development'
  }
  {
    name: 'sqlserver-eas'
    location: 'eastasia'
    environmentName: 'Production'
  }
]

resource sqlServers 'Microsoft.Sql/servers@2021-11-01-preview' = [for sqlServer in sqlServerDetails: if (sqlServer.environmentName == 'Production') {
  name: sqlServer.name
  location: sqlServer.location
  properties: {
    administratorLogin: administratorLogin
    administratorLoginPassword: administratorLoginPassword
  }
  tags: {
    environment: sqlServer.environmentName
  }
}]

Jika Anda menyebarkan contoh sebelumnya, Anda akan melihat dua server logis, dan , sqlserver-we tetapi tidak sqlserver-eus2, karena properti objek tersebut environmentName tidak cocok Production.sqlserver-eas