Упражнение. Развертывание нескольких ресурсов с помощью циклов

Завершено

На данный момент шаблон Bicep развернул один логический сервер Azure SQL с параметрами аудита для вашей рабочей среды. Теперь необходимо развернуть несколько логических серверов, по одному для каждого региона, в котором компания начинает выпускать новую интеллектуальную плюшевую игрушку.

В этом упражнении вы расширите созданный ранее код Bicep, чтобы развернуть экземпляры баз данных в нескольких регионах Azure.

В процессе вы:

  • Переместите существующий код Bicep в модуль.
  • Создайте новый файл Bicep с циклом копирования, чтобы развернуть ресурсы модуля несколько раз.
  • Разверните файл Bicep и проверьте развертывание ресурсов.
  • Измените параметр, чтобы добавить дополнительное расположение, повторно разверните файл и убедитесь, что были развернуты новые ресурсы.

Перемещение ресурсов в модуль

  1. В Visual Studio Code создайте новую папку с именем модули в той же папке, где вы создали файл main.bicep.

  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 = [
      'westus'
      '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 = [
  'westus'
  '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@2024-05-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-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@2024-05-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? auditStorageAccount.listKeys().keys[0].value : ''
  }
}

Если это не так, скопируйте пример или настройте шаблон в соответствии с примером.

Разверните шаблон Bicep в Azure

В окне терминала Visual Studio Code разверните шаблон Bicep в Azure, выполнив указанный ниже код.

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

В терминале Visual Studio Code разверните шаблон Bicep в Azure, выполнив следующую команду Azure PowerShell:

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 = [
      'westus'
      '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 = [
      'westus'
      'eastus2'
      'eastasia'
    ]
    
  2. Сохраните изменения в файле.

  3. В окне терминала Visual Studio Code повторно разверните файл, выполнив следующий код:

    New-AzResourceGroupDeployment -TemplateFile main.bicep
    

Внимание

Не забудьте использовать тот же пароль для входа и пароля, который вы использовали ранее, или развертывание не завершится успешно.

Дождитесь окончания развертывания.

Проверка повторного развертывания

Теперь, когда вы повторно развернули ресурсы, необходимо убедиться, что дополнительный логический сервер и ресурсы базы данных были созданы в регионе "Восточная Азия".

  1. Вернитесь на портал Azure и выберите группу ресурсов [имя группы ресурсов песочницы]. При необходимости выберите Обновить, чтобы просмотреть недавно развернутые ресурсы.

  2. Убедитесь, что новый логический сервер и база данных развернуты в регионе "Восточная Азия".

    Снимок экрана: портал Azure, показывающий развертывание логического сервера и базы данных в дополнительном регионе.