Упражнение. Условное развертывание ресурсов
Примечание.
Когда вы в первый раз активируете песочницу и принимаете условия, ваша учетная запись Майкрософт связывается с новым каталогом Azure с именем Microsoft Learn Sandbox. Вы также добавлены к специальной подписке под названием Concierge Subscription.
Вам нужно развернуть ресурсы компании в различных средах и использовать параметры и условия для управления развертыванием в каждой среде.
В этом упражнении вы создадите логический сервер SQL Azure и базу данных. Затем вы добавите параметры аудита, чтобы убедиться, что аудит включен, но он включен только при развертывании в рабочей среде. Для аудита необходимо иметь учетную запись хранения, которая также будет развертываться только при развертывании ресурсов в рабочей среде.
В процессе вы:
- Создать файл Bicep, определяющий логический сервер с базой данных.
- Добавить учетную запись хранения и параметры аудита SQL, которые развертываются с условием.
- Настроить инфраструктуру для среды разработки, а затем проверить результат.
- Повторно развернуть инфраструктуру в рабочей среде, а затем просмотреть изменения.
В этом упражнении используется расширение Bicep для Visual Studio Code. Убедитесь, что это расширение установлено в Visual Studio Code.
Создание шаблона Bicep с логическим сервером и базой данных
Откройте Visual Studio Code.
Создайте файл с именем main.bicep.
Сохраните пустой файл, куда Visual Studio Code загрузит средства Bicep.
Можно выбрать Файл>Сохранить как или нажать клавиши CTRL+S в Windows (⌘+S в macOS). Обязательно запомните, где сохранен файл. Например, можно создать папку templates, куда будет сохранен файл.
Чтобы определить логический сервер и базу данных, добавьте в файл указанное ниже содержимое вместе с параметрами и переменными, необходимыми для этих ресурсов. Введите содержимое вручную, а не используйте функцию копирования и вставки. Так вы сможете увидеть, насколько полезны инструменты при написании файлов 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, но только в случае, если аудит будет включен.
Под объявлениями параметров добавьте следующие параметры:
@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 auditingEnabled = environmentName == 'Production' var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
Обратите внимание, что вы создаете переменную с именем
auditingEnabled
, которая будет использоваться в качестве условия для развертывания ресурсов аудита. При создании такой переменной вы сделаете код Bicep более понятным и удобным для чтения. Все, кто просматривает условия в ваших ресурсах, будут понимать, что происходит.Также обратите внимание, что переменная
auditStorageAccountName
использует функцию с именемtake()
. Так как максимальная длина имен учетных записей хранения составляет 24 символа, эта функция обрежет конец строки, чтобы сделать имя допустимым.В нижней части файла под ресурсами добавьте следующее определение ресурса для учетной записи хранения:
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) { name: auditStorageAccountName location: location sku: { name: auditStorageAccountSkuName } kind: 'StorageV2' }
Обратите внимание, что определения для учетной записи хранения имеют ключевое слово
if
, которое определяет условие развертывания.
Добавление параметров аудита
Под добавленным ресурсом учетной записи хранения добавьте следующее:
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 оценивает значения выражений перед оценкой условия развертывания ресурса и возвращает ошибку, так как учетную запись хранения не удастся найти.Сохраните изменения в файле.
Проверка файла 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, и необходимо войти под той же учетной записью, с которой вы активировали песочницу.
В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.
Если окно терминала отображает bash справа , это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки Bash справа, его можно выбрать для запуска оболочки.
Если появится оболочка, отличной от bash , выберите стрелку раскрывающегося списка оболочки и выберите Git Bash.
Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:
cd templates
Установка Bicep
Выполните следующую команду, чтобы убедиться, что у вас установлена последняя версия Bicep:
az bicep install && az bicep upgrade
Вход в Azure
В окне терминала Visual Studio Code войдите в Azure, выполнив следующую команду:
az login
В открывшемся браузере войдите в свою учетную запись Azure. Терминал Visual Studio Code отобразит список подписок, связанных с данной учетной записью. Выберите подписку с именем "Подписка Concierge".
Если вы недавно использовали несколько песочниц, в терминале может отображаться несколько экземпляров подписки Concierge. В этом случае для установки подписки по умолчанию выполните указанные ниже два шага.
Получите идентификаторы подписок Concierge.
az account list \ --refresh \ --query "[?contains(name, 'Concierge Subscription')].id" \ --output table
Задайте подписку по умолчанию, используя идентификатор подписки. Замените строку {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, и войдите в ту же учетную запись, которая активировала песочницу.
В меню Терминал выберите Новый терминал. Окно терминала обычно открывается в нижней половине экрана.
Если окно терминала отображает pwsh или powershell справа, это означает, что правильная оболочка уже открыта. Кроме того, если вы видите значок оболочки PowerShell справа, его можно выбрать для запуска оболочки.
Если появится оболочка, отличной от pwsh или PowerShell , выберите стрелку раскрывающегося списка оболочки и выберите PowerShell.
Перейдите в терминале в каталог, где сохранили свой шаблон. Например, если вы сохранили его в папке templates, можно использовать следующую команду:
Set-Location -Path templates
Установите Bicep CLI
Чтобы использовать Bicep из Azure PowerShell, установите Bicep CLI.
Вход в Azure с помощью Azure PowerShell
В окне терминала Visual Studio Code выполните следующую команду:
Connect-AzAccount
Откроется браузер, в котором вы можете выполнить вход в учетную запись Azure. Браузер может быть открыт в фоновом режиме.
После входа в Azure в окне терминала появится список подписок, связанных с этой учетной записью. Если вы активировали песочницу, отобразится подписка с именем Подписка Concierge. Выберите его для остальной части упражнения.
Если вы недавно использовали несколько песочниц, в терминале может отображаться несколько экземпляров подписки Concierge. В этом случае для установки подписки по умолчанию выполните указанные ниже два шага.
Получите идентификатор подписки. Следующая команда выдаст список ваших подписок с идентификаторами. Найдите
Concierge Subscription
, а затем скопируйте идентификатор из второго столбца. Оно будет выглядеть примерно так —aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.Get-AzSubscription
Измените активную подписку на подписку 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 для проверки развертываемых ресурсов и результатов каждого развертывания.
Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы, сделав следующее:
a. Выберите аватар в правом верхнем углу.
b. Выберите Переключить каталог. В списке выберите каталог Песочница Microsoft Learn.На левой панели выберите Группы ресурсов.
Выберите "
[имя группы ресурсов песочницы] "В разделе Обзор вы увидите, что одно развертывание выполнено успешно. Также можно увидеть, что логический сервер и база данных SQL развернуты, но учетная запись хранения для аудита нет.
Примечание.
Учетная запись хранения с именем, начинающимся с
cloudshell
, не связана с развертыванием и была создана с помощью песочницы Learn.Рядом с развертываниями выберите 1 Успешно, чтобы просмотреть сведения о развертывании.
Нажмите развертывание с именем main, чтобы увидеть, какие ресурсы развернуты, а затем выберите Сведения о развертывании, чтобы развернуть и просмотреть раздел.
В этом случае развернут один логический сервер и одна база данных SQL. Обратите внимание, что параметры учетной записи хранения и аудита не находятся в списке ресурсов.
Оставьте эту страницу открытой в браузере. Позже развертывания потребуется проверить снова.
Повторное развертывание для рабочей среды
В предыдущем развертывании использовалось значение по умолчанию 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
Внимание
Не забудьте использовать тот же пароль для входа и пароля, который вы использовали ранее, или развертывание не завершится успешно.
Через одну или две минуты развертывание должно успешно завершиться.
Проверка повторного развертывания
Чтобы выполнить это упражнение, убедитесь, что повторное развертывание успешно завершено и аудит включен.
Вернитесь к портал Azure и перейдите в группу ресурсов. Если группа ресурсов уже открыта, выберите Обновить.
Необходимо увидеть, что для аудита развернута дополнительная учетная запись хранения.
Выберите логический сервер (найдите ресурс с типом SQL Server).
В поле поиска введите Аудит. В разделе Безопасность выберите Аудит.
Убедитесь, что аудит включен для этого логического сервера.