練習 - 使用迴圈部署多個資源

已完成

到目前為止,Bicep 範本已部署單一 Azure SQL 邏輯伺服器,其中包含針對實際執行環境的審核設定。 您現在需要部署多部邏輯伺服器,在貴公司推出新智慧型泰迪熊的每個區域中各一個。

在本練習中,您將擴充先前建立的 Bicep 程式碼,以便您可以將資料庫的執行個體部署到多個 Azure 區域。

在此過程中,您將會:

  • 將您現有的 Bicep 程式碼移至模組。
  • 使用複製迴圈建立新的 Bicep 檔案,以多次部署模組的資源。
  • 部署 Bicep 檔,並確認資源的部署。
  • 修改參數以新增其他位置、重新部署檔案,然後確認已部署新的資源。

將資源移至模組

  1. 在 Visual Studio Code 中,於 main.bicep 檔案建立所在的相同資料夾中建立名為 modules 的新資料夾。

  2. main.bicep 檔案移到您剛才建立的 modules 資料夾中。

  3. main.bicep 檔案重新命名為 database.bicep

使用複製迴圈部署多個執行個體

  1. 建立新的 main.bicep 檔案,以取代您剛移動和重新命名的檔案。

  2. 開啟新的 main.bicep 檔案,然後新增下列參數:

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
    ]
    
    @secure()
    @description('The administrator login username for the SQL server.')
    param sqlServerAdministratorLogin string
    
    @secure()
    @description('The administrator login password for the SQL server.')
    param sqlServerAdministratorLoginPassword string
    
  3. 在參數宣告下方,新增下列模組宣告:

    module databases 'modules/database.bicep' = [for location in locations: {
      name: 'database-${location}'
      params: {
        location: location
        sqlServerAdministratorLogin: sqlServerAdministratorLogin
        sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
      }
    }]
    

    請注意,模組宣告會針對 locations 陣列參數中的所有值進行迴圈。

  4. 儲存對檔案所做的變更。

驗證 Bicep 檔案

完成上述所有變更之後,main.bicep 檔案看起來應該像下列範例:

@description('The Azure regions into which the resources should be deployed.')
param locations array = [
  'westeurope'
  'eastus2'
]

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

module databases 'modules/database.bicep' = [for location in locations: {
  name: 'database-${location}'
  params: {
    location: location
    sqlServerAdministratorLogin: sqlServerAdministratorLogin
    sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}]

database.bicep 檔案看起來應該像下列範例:

@description('The Azure region into which the resources should be deployed.')
param location string

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
  name: 'Standard'
  tier: 'Standard'
}

@description('The name of the environment. This must be Development or Production.')
@allowed([
  'Development'
  'Production'
])
param environmentName string = 'Development'

@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'

var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)

resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2023-08-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

否則,請複製範例或調整範本,以符合範例。

將 Bicep 範本部署至 Azure

在 Visual Studio Code 終端機中,透過執行下列程式碼,將 Bicep 範本部署到 Azure:

az deployment group create --template-file main.bicep

在 Visual Studio Code 終端機中,透過執行下列 Azure PowerShell 命令,將 Bicep 範本部署到 Azure:

New-AzResourceGroupDeployment -TemplateFile main.bicep

警告

請務必使用您先前所用相同的登入和密碼,否則部署將無法成功完成。

等待部署完成。

檢查部署

部署完成之後,部署完成後,您需要驗證新的邏輯伺服器和資料庫是否已部署以及它們是否位於正確的 Azure 區域。

  1. 前往 [Azure 入口網站],並確定您在沙箱訂用帳戶中。

  2. 選取 [沙箱資源群組名稱]。

  3. 確認新的邏輯伺服器和資料庫位於美國東部 2 區域,也就是您在 locations 參數預設值中指定的值。

    Azure 入口網站的螢幕擷取畫面,其中顯示在不同位置部署的邏輯伺服器和資料庫。

  4. 將頁面在瀏覽器中保持開啟。 您稍後將再次檢查部署。

使用邏輯伺服器的其他位置,將範本更新並重新部署至 Azure

泰迪熊玩具小組即將重新啟動,這次目標為亞洲。 小組要求您在東亞區域中部署新的伺服器和資料庫。 若要這樣做,您必須更新 Bicep 參數並重新部署範本。

  1. 返回 Visual Studio Code。 在 main.bicep 檔案的頂部,將新值新增至 locations 陣列:

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. 儲存對檔案所做的變更。

  3. 在 Visual Studio Code 終端機中,透過執行下列程式碼重新部署檔案:

    az deployment group create --template-file main.bicep
    
  1. 返回 Visual Studio Code。 在 main.bicep 檔案的頂部,將新值新增至 locations 陣列:

    @description('The Azure regions into which the resources should be deployed.')
    param locations array = [
      'westeurope'
      'eastus2'
      'eastasia'
    ]
    
  2. 儲存對檔案所做的變更。

  3. 在 Visual Studio Code 終端機中,透過執行下列程式碼重新部署檔案:

    New-AzResourceGroupDeployment -TemplateFile main.bicep
    

警告

請務必使用您先前所用相同的登入和密碼,否則部署將無法成功完成。

等待部署完成。

確認重新部署

既然已重新部署資源,建議您確認是否已在東亞區域中建立額外的邏輯伺服器和資料庫資源。

  1. 返回 [Azure 入口網站] 並選取 [沙箱資源群組名稱] 資源群組。 如有必要,請選取 [重新整理] 以查看新部署的資源。

  2. 確認已將新的邏輯伺服器和資料庫部署在東亞區域中。

    Azure 入口網站的螢幕擷取畫面,其中顯示在其他區域中部署的邏輯伺服器和資料庫。