Latihan - Menambahkan parameter dan variabel ke templat Bicep Anda

Selesai

Dalam latihan ini, Anda akan memperbarui template Bicep yang telah Anda buat sebelumnya agar:

  • Menerima parameter untuk lokasi dan nama sumber daya.
  • Menggunakan aturan bisnis Anda untuk memilih SKU yang tepat untuk sumber daya yang digunakan.

Selama proses tersebut, Anda akan:

  • Memperbarui templat untuk menyertakan parameter location.
  • Memperbarui templat untuk menyertakan parameter dan variabel nama sumber daya.
  • Menggunakan ekspresi untuk mengatur nilai default parameter.
  • Memperbarui templat untuk menyertakan variabel untuk SKU masing-masing sumber daya.
  • Menguji penyebaran untuk memastikan templat valid.

Menambahkan parameter lokasi dan nama sumber daya

  1. Dalam file main.bicep di Visual Studio Code, tambahkan kode berikut ke bagian atas file:

    param location string = 'eastus'
    param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'
    
    var appServicePlanName = 'toy-product-launch-plan'
    

    Linter Bicep menambahkan garis berlekuk kuning di bawah setiap parameter dan nama variabel untuk menunjukkan bahwa garis tersebut tidak digunakan dalam templat. Anda akan segera memperbaiki masalah ini.

    Perhatikan bahwa Anda menggunakan ekspresi yang menyertakan interpolasi string dan fungsi uniqueString() untuk menentukan nilai parameter default. Seseorang yang menyebarkan templat ini dapat mengambil alih nilai parameter default dengan menentukan nilai pada waktu penyebaran, tetapi mereka tidak dapat mengambil alih nilai variabel.

    Perhatikan juga bahwa Anda menggunakan variabel untuk nama paket Azure App Service, tetapi Anda menggunakan parameter untuk nama lain. Akun penyimpanan dan aplikasi App Service memerlukan nama yang unik secara global, tetapi nama paket App Service harus unik hanya dalam grup sumber dayanya. Perbedaan ini berarti tidak perlu khawatir untuk menggunakan nama paket App Service yang sama di berbagai penyebaran, selama semua penyebaran masuk ke grup sumber daya yang berbeda.

    Tip

    Anda menetapkan bahwa parameter location harus diatur ke westus3. Biasanya, Anda akan membuat sumber daya di lokasi yang sama dengan grup sumber daya menggunakan properti resourceGroup().location. Namun saat Anda bekerja dengan kotak pasir Microsoft Learn, Anda perlu menggunakan wilayah Azure tertentu yang tidak cocok dengan lokasi grup sumber daya.

  2. Temukan tempat untuk mengatur properti location dan name dalam definisi sumber daya, dan perbarui untuk menggunakan nilai parameter. Setelah selesai, definisi sumber daya dalam file Bicep Anda akan terlihat seperti ini:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: 'Standard_LRS'
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    
  3. Simpan perubahan pada file.

Mengatur SKU secara otomatis untuk setiap jenis lingkungan

  1. Dalam file main.bicep di Visual Studio Code, tambahkan parameter Bicep berikut di bawah parameter yang Anda buat di tugas sebelumnya:

    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    

    Perhatikan bahwa Anda mendefinisikan parameter dengan sekumpulan nilai yang diizinkan, tetapi Anda tidak menentukan nilai default untuk parameter ini.

  2. Di bawah garis yang menyatakan variabel appServicePlanName, tambahkan definisi variabel berikut:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'
    

    Perhatikan bahwa Anda mengatur nilai variabel ini dengan menggunakan operator terner untuk mengekspresikan beberapa if/then/else logika.

  3. Temukan tempat dalam definisi sumber daya tempat properti sku diatur dan perbarui untuk menggunakan nilai parameter. Setelah selesai, definisi sumber daya dalam file Bicep Anda akan terlihat seperti ini:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: storageAccountSkuName
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    }
    
    resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: appServicePlanSkuName
      }
    }
    
    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
      }
    }
    

    Perhatikan bahwa Anda belum membuat parameter untuk semuanya. Anda telah mengatur beberapa properti tepat dalam definisi sumber daya, di mana Anda tahu nilai-nilai ini tidak akan berubah di antara penyebaran.

  4. Simpan perubahan pada file.

Memverifikasi file Bicep Anda

Setelah Anda menyelesaikan semua perubahan sebelumnya, file main.bicep Anda akan terlihat seperti contoh ini:

param location string = 'eastus'
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
param appServiceAppName string = 'toylaunch${uniqueString(resourceGroup().id)}'

@allowed([
  'nonprod'
  'prod'
])
param environmentType string

var appServicePlanName = 'toy-product-launch-plan'
var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
var appServicePlanSkuName = (environmentType == 'prod') ? 'P2v3' : 'F1'

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSkuName
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

resource appServicePlan 'Microsoft.Web/serverFarms@2022-03-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: appServicePlanSkuName
  }
}

resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
  name: appServiceAppName
  location: location
  properties: {
    serverFarmId: appServicePlan.id
    httpsOnly: true
  }
}

Jika file Anda tidak cocok, salin contoh atau sesuaikan file Anda agar sesuai dengan contoh.

Menyebarkan templat Bicep yang diperbarui

Jalankan perintah Azure CLI berikut di terminal.

az deployment group create \
  --template-file main.bicep \
  --parameters environmentType=nonprod

Jalankan perintah Azure PowerShell berikut di terminal.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -environmentType nonprod

Perhatikan bahwa Anda secara eksplisit menentukan nilai parameter environmentType saat menjalankan penyebaran. Anda tidak perlu menentukan nilai parameter lainnya, karena nilai parameter tersebut memiliki nilai default yang valid.

Memeriksa penyebaran Anda

  1. Di browser Anda, kembali ke portal Azure dan buka grup sumber daya Anda. Anda tetap bisa melihat satu penyebaran yang berhasil karena penyebaran menggunakan nama yang sama dengan penyebaran pertama.

  2. Pilih tautan 1 Berhasil.

  3. Pilih penyebaran utama, lalu pilih Detail penyebaran untuk memperluas daftar sumber daya yang disebarkan.

    Screenshot of the Azure portal interface for the specific deployment, with storage account and App Service resources listed with generated names.

  4. Perhatikan bahwa aplikasi App Service dan akun penyimpanan baru telah disebarkan dengan nama yang dibuat secara acak.