Menyebarkan beberapa sumber daya dengan menggunakan perulangan
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
, , sa1
dan 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
, 5
dan 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