Упражнение. Условное развертывание ресурсов

Завершено

Примечание.

Когда вы в первый раз активируете песочницу и принимаете условия, ваша учетная запись Майкрософт связывается с новым каталогом Azure с именем Microsoft Learn Sandbox. Вы также добавлены к специальной подписке под названием Concierge Subscription.

Вам нужно развернуть ресурсы компании в различных средах и использовать параметры и условия для управления развертыванием в каждой среде.

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

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

  • Создать файл Bicep, определяющий логический сервер с базой данных.
  • Добавить учетную запись хранения и параметры аудита SQL, которые развертываются с условием.
  • Настроить инфраструктуру для среды разработки, а затем проверить результат.
  • Повторно развернуть инфраструктуру в рабочей среде, а затем просмотреть изменения.

В этом упражнении используется расширение Bicep для Visual Studio Code. Убедитесь, что это расширение установлено в Visual Studio Code.

Создание шаблона Bicep с логическим сервером и базой данных

  1. Откройте Visual Studio Code.

  2. Создайте файл с именем main.bicep.

  3. Сохраните пустой файл, куда Visual Studio Code загрузит средства Bicep.

    Можно выбрать Файл>Сохранить как или нажать клавиши CTRL+S в Windows (⌘+S в macOS). Обязательно запомните, где сохранен файл. Например, можно создать папку templates, куда будет сохранен файл.

  4. Чтобы определить логический сервер и базу данных, добавьте в файл указанное ниже содержимое вместе с параметрами и переменными, необходимыми для этих ресурсов. Введите содержимое вручную, а не используйте функцию копирования и вставки. Так вы сможете увидеть, насколько полезны инструменты при написании файлов 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'
    }
    
    var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
    var sqlDatabaseName = 'TeddyBear'
    
    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
    }
    

    Обратите внимание, что все параметры включают @description декораторы, которые помогают упростить работу с ними. Также обратите внимание, что к параметрам sqlServerAdministratorLogin и sqlServerAdministratorLoginPassword применен декоратор @secure. Это указывает Bicep, что эти значения параметров конфиденциальны. Azure не вносит конфиденциальные значения в журналы.

добавление учетной записи хранения;

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

  1. Под объявлениями параметров добавьте следующие параметры:

    @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'
    
  2. Под объявлениями переменных добавьте следующие переменные:

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

    Обратите внимание, что вы создаете переменную с именем auditingEnabled, которая будет использоваться в качестве условия для развертывания ресурсов аудита. При создании такой переменной вы сделаете код Bicep более понятным и удобным для чтения. Все, кто просматривает условия в ваших ресурсах, будут понимать, что происходит.

    Также обратите внимание, что переменная auditStorageAccountName использует функцию с именем take(). Так как максимальная длина имен учетных записей хранения составляет 24 символа, эта функция обрежет конец строки, чтобы сделать имя допустимым.

  3. В нижней части файла под ресурсами добавьте следующее определение ресурса для учетной записи хранения:

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

    Обратите внимание, что определения для учетной записи хранения имеют ключевое слово if, которое определяет условие развертывания.

Добавление параметров аудита

  1. Под добавленным ресурсом учетной записи хранения добавьте следующее:

    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 : ''
      }
    }
    

    Обратите внимание, что определение имеет то же условие if, что и учетная запись хранения. Кроме того, свойства storageEndpoint и storageAccountAccessKey используют тернарный оператор вопросительного знака (?), чтобы гарантировать допустимость их значений. Если этого не сделать, Azure Resource Manager оценивает значения выражений перед оценкой условия развертывания ресурса и возвращает ошибку, так как учетную запись хранения не удастся найти.

  2. Сохраните изменения в файле.

Проверка файла Bicep

После выполнения всех описанных выше изменений файл 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

Чтобы развернуть этот шаблон в Azure, необходимо войти в свою учетную запись Azure из терминала Visual Studio Code. У вас также должен быть установлен интерфейс Azure CLI, и необходимо войти под той же учетной записью, с которой вы активировали песочницу.

  1. В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.

  2. Если окно терминала отображает bash справа , это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки Bash справа, его можно выбрать для запуска оболочки.

    Снимок экрана: окно терминала Visual Studio Code с bash.

    Если появится оболочка, отличной от bash , выберите стрелку раскрывающегося списка оболочки и выберите Git Bash.

    Снимок экрана: окно терминала Visual Studio Code, где отображается раскрывающийся список оболочек терминала и выбран параметр

  3. Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:

    cd templates
    

Установка Bicep

Выполните следующую команду, чтобы убедиться, что у вас установлена последняя версия Bicep:

az bicep install && az bicep upgrade

Вход в Azure

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

    az login
    
  2. В открывшемся браузере войдите в свою учетную запись Azure. Терминал Visual Studio Code отобразит список подписок, связанных с данной учетной записью. Выберите подписку с именем "Подписка Concierge".

    Если вы недавно использовали несколько песочниц, в терминале может отображаться несколько экземпляров подписки Concierge. В этом случае для установки подписки по умолчанию выполните указанные ниже два шага.

    1. Получите идентификаторы подписок Concierge.

        az account list \
         --refresh \
         --query "[?contains(name, 'Concierge Subscription')].id" \
         --output table
      
    2. Задайте подписку по умолчанию, используя идентификатор подписки. Замените строку {your subscription ID} на идентификатор последней подписки Concierge.

      az account set --subscription {your subscription ID}
      

Установка группы ресурсов по умолчанию

При использовании Azure CLI можно установить группу ресурсов по умолчанию и опустить параметр в остальных командах Azure CLI в этом упражнении. Установите по умолчанию группу ресурсов, созданную для вас в среде песочницы.

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

Развертывание шаблона в Azure с помощью Azure CLI

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

az deployment group create --template-file main.bicep --parameters location=westus3

Чтобы развернуть этот шаблон в Azure, войдите в свою учетную запись Azure из терминала Visual Studio Code. Убедитесь, что вы установили Azure PowerShell, и войдите в ту же учетную запись, которая активировала песочницу.

  1. В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.

  2. Если окно терминала отображает pwsh или powershell справа, это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки PowerShell справа, его можно выбрать для запуска оболочки.

    Снимок экрана: окно терминала Visual Studio Code с параметром pwsh, отображаемым в раскрывающемся списке оболочки.

    Если появится оболочка, отличной от pwsh или PowerShell , выберите стрелку раскрывающегося списка оболочки и выберите PowerShell.

    Снимок экрана: окно терминала Visual Studio Code с раскрывающимся списком оболочки терминала и выбранным PowerShell.

  3. Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:

    Set-Location -Path templates
    

Установите Bicep CLI

Чтобы использовать Bicep из Azure PowerShell, установите Bicep CLI.

Вход в Azure с помощью Azure PowerShell

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

    Connect-AzAccount
    

    Откроется браузер, в котором вы можете выполнить вход в учетную запись Azure. Браузер может быть открыт в фоновом режиме.

  2. После входа в Azure в окне терминала появится список подписок, связанных с этой учетной записью. Если вы активировали песочницу, отобразится подписка с именем Подписка Concierge. Выберите его для остальной части упражнения.

    Если вы недавно использовали несколько песочниц, в терминале может отображаться несколько экземпляров подписки Concierge. В этом случае для установки подписки по умолчанию выполните указанные ниже два шага.

    1. Получите идентификатор подписки. Следующая команда выдаст список ваших подписок с идентификаторами. Найдите Concierge Subscription, а затем скопируйте идентификатор из второго столбца. Оно будет выглядеть примерно так — aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

      Get-AzSubscription
      
    2. Измените активную подписку на подписку Concierge. Обязательно замените заполнитель {Your subscription ID} (Ваш идентификатор подписки) идентификатором, который вы скопировали.

      $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
      Set-AzContext $context
      

Установка группы ресурсов по умолчанию

Вы можете установить группу ресурсов по умолчанию и опустить параметр в остальных командах Azure PowerShell в этом упражнении. Установите по умолчанию группу ресурсов, созданную для вас в окружении песочницы.

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

Развертывание шаблона в Azure с помощью Azure PowerShell

В окне терминала Visual Studio Code разверните шаблон в Azure, выполнив указанную ниже команду Azure PowerShell. Этот процесс может занять несколько минут. Затем будет выполнено успешное развертывание.

New-AzResourceGroupDeployment -TemplateFile main.bicep -location westus3

При выполнении развертывания вам будет предложено ввести значения для параметров sqlServerAdministratorLogin и sqlServerAdministratorLoginPassword.

Совет

При вводе параметров безопасности нужные значения должны соответствовать определенным правилам:

  • Значение имени для входа sqlServerAdministratorLogin не должно быть легко подбираемым, например admin или root. Оно должно содержать только буквенно-цифровые символы и начинаться с буквы.
  • Длина значения sqlServerAdministratorLoginPassword должна составлять не менее восьми символов. В этом значении должны быть буквы нижнего регистра, верхнего регистра, цифры и символы. Дополнительные сведения о сложности пароля см. в статье Политика паролей SQL Azure.

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

Кроме того, обязательно запишите введенные имя входа и пароль. Они понадобятся в ближайшее время.

Так как для параметра environmentName не указано значение, используется значение по умолчанию Development.

Дождитесь завершения развертывания. Если развертывание завершается сбоем с сообщением о том, что расположение не принимает создание новых серверов Базы данных SQL Azure, выберите другой регион, например eastus или eastus2.

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

Используйте портал Azure для проверки развертываемых ресурсов и результатов каждого развертывания.

  1. Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы, сделав следующее:

    a. Выберите аватар в правом верхнем углу.
    b. Выберите Переключить каталог. В списке выберите каталог Песочница Microsoft Learn.

  2. На левой панели выберите Группы ресурсов.

  3. Выберите "[имя группы ресурсов песочницы]"

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

    Примечание.

    Учетная запись хранения с именем, начинающимся с cloudshell, не связана с развертыванием и была создана с помощью песочницы Learn.

    Снимок экрана: раздел панели обзора группы ресурсов на портале Azure, в котором отображается успешное развертывание.

  5. Рядом с развертываниями выберите 1 Успешно, чтобы просмотреть сведения о развертывании.

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

  6. Нажмите развертывание с именем main, чтобы увидеть, какие ресурсы развернуты, а затем выберите Сведения о развертывании, чтобы развернуть и просмотреть раздел.

    В этом случае развернут один логический сервер и одна база данных SQL. Обратите внимание, что параметры учетной записи хранения и аудита не находятся в списке ресурсов.

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

  7. Оставьте эту страницу открытой в браузере. Позже развертывания потребуется проверить снова.

Повторное развертывание для рабочей среды

В предыдущем развертывании использовалось значение по умолчанию Development для параметра environmentName.

Теперь необходимо явно присвоить параметру значение Production. Предполагается, что при внесении этого изменения будет развернута учетная запись хранения для целей аудита, а аудит будет включен на логическом сервере.

Развертывание шаблона для рабочей среды

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

az deployment group create --template-file main.bicep --parameters environmentName=Production location=westus3

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

New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3

Внимание

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

Через одну или две минуты развертывание должно успешно завершиться.

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

Чтобы выполнить это упражнение, убедитесь, что повторное развертывание успешно завершено и аудит включен.

  1. Вернитесь к портал Azure и перейдите в группу ресурсов. Если группа ресурсов уже открыта, выберите Обновить.

    Необходимо увидеть, что для аудита развернута дополнительная учетная запись хранения.

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

  2. Выберите логический сервер (найдите ресурс с типом SQL Server).

  3. В поле поиска введите Аудит. В разделе Безопасность выберите Аудит.

    Снимок экрана: интерфейс портала Azure для логического сервера, где показано поле поиска с введенным значением

  4. Убедитесь, что аудит включен для этого логического сервера.

    Снимок экрана: интерфейс портала Azure для логического сервера, где показано, что конфигурация аудита включена.