Упражнение. Развертывание ресурсов в несколько областей с помощью модулей
Примечание.
Для выполнения этого упражнения требуется подписка Azure. Если у вас ее нет, можно получить бесплатную подписку.
Команда исследования и разработки попросила вас помочь с созданием виртуальной сети в подписке Project Teddybear. Вы понимаете, что в дальнейшем будете помогать команде с дополнительными подписками, поэтому вы решили расширить свой шаблон Bicep многократного использования, чтобы развернуть виртуальную сеть для членов команды.
В рамках этого упражнения нужно будет обновить шаблон, который вы начали создавать в последнем упражнении.
В процессе вы:
- Обновите шаблон, входящий в область подписки, чтобы создать новую группу ресурсов.
- Создайте отдельный модуль Bicep с виртуальной сетью и используйте параметры для управления настройкой виртуальной сети.
- Обновите шаблон, чтобы развернуть модуль в группе ресурсов.
- Разверните шаблон .
Для выполнения этого упражнения требуется разрешение на развертывание ресурсов с областью действия подписки. Если вы не можете получить это разрешение для своей текущей учетной записи Azure, то можно использовать бесплатную пробную версию и создать новую подписку Azure и клиента. Кроме того, можно пропустить шаги по развертыванию в этом упражнении.
Создание или изменение группы ресурсов
В Visual Studio Code откройте файл main.bicep, созданный в предыдущем упражнении.
Под текущими определениями переменных добавьте следующее определение:
var resourceGroupName = 'ToyNetworking'
В нижней части файла добавьте следующее определение ресурса:
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = { name: resourceGroupName location: deployment().location }
Обратите внимание, что вы определяете группу ресурсов так же, как и другой ресурс. Группа ресурсов — это ресурс, входящий в область подписки, который можно развернуть и которым можно управлять в файлах Bicep с параметром
targetScope
со значениемsubscription
.Сохраните изменения в файле.
Добавление модуля для создания виртуальной сети
Далее вы создадите модуль Bicep для виртуальной сети команды исследования и разработки. Позже в рамках этого упражнения вы развернете ресурсы модуля в группе ресурсов.
В Visual Studio Code создайте новую папку с именем модули в той же папке, где вы создали файл main.bicep.
В папке modules создайте и сохраните файл с именем virtualNetwork.bicep.
В файл virtualNetwork.bicep добавьте следующее содержимое:
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Обратите внимание, что вы не указывали
targetScope
для этого модуля. Если файл Bicep нацелен на группу ресурсов, целевую область указывать не нужно.Сохраните изменения в файле.
Использование модуля в развертывании подписки
Теперь можно сообщить Bicep о том, что необходимо развернуть модуль в группе ресурсов.
В Visual Studio Code в файле main.bicep под строкой
targetScope
добавьте следующие определения параметров:param virtualNetworkName string param virtualNetworkAddressPrefix string
Благодаря этим параметрам шаблон станет многоразовым. В любое время, когда команде исследования и разработки потребуется новая подписка, вы сможете создать виртуальную сеть с уникальным именем и диапазоном IP-адресов.
В нижней части файла добавьте следующее определение модуля:
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Обратите внимание, что вы явно указываете
scope
для модуля. Bicep понимает, что ресурсы в модуле необходимо развернуть в созданной в файле группе ресурсов.
Проверка шаблона
Файл main.bicep должен выглядеть следующим образом:
targetScope = 'subscription'
param virtualNetworkName string
param virtualNetworkAddressPrefix string
var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'
var resourceGroupName = 'ToyNetworking'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-01' = {
name: policyDefinitionName
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
allOf: [
{
field: 'type'
equals: 'Microsoft.Compute/virtualMachines'
}
{
anyOf: [
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_F*'
}
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_G*'
}
]
}
]
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2024-05-01' = {
name: policyAssignmentName
properties: {
policyDefinitionId: policyDefinition.id
}
}
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = {
name: resourceGroupName
location: deployment().location
}
module virtualNetwork 'modules/virtualNetwork.bicep' = {
scope: resourceGroup
name: 'virtualNetwork'
params: {
virtualNetworkName: virtualNetworkName
virtualNetworkAddressPrefix: virtualNetworkAddressPrefix
}
}
Файл modules/virtualNetwork.bicep должен выглядеть следующим образом:
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Если какой-либо файл не соответствует примеру, скопируйте пример или откорректируйте свой шаблон.
Развертывание шаблона в Azure
В терминале Visual Studio Code разверните шаблон с помощью следующих команд Azure CLI:
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today
virtualNetworkName="rnd-vnet-001"
virtualNetworkAddressPrefix="10.0.0.0/24"
az deployment sub create \
--name $deploymentName \
--location westus \
--template-file $templateFile \
--parameters virtualNetworkName=$virtualNetworkName \
virtualNetworkAddressPrefix=$virtualNetworkAddressPrefix
В терминале Visual Studio Code разверните шаблон с помощью следующих команд Azure PowerShell:
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"
$virtualNetworkName = 'rnd-vnet-001'
$virtualNetworkAddressPrefix = '10.0.0.0/24'
New-AzSubscriptionDeployment `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile `
-virtualNetworkName $virtualNetworkName `
-virtualNetworkAddressPrefix $virtualNetworkAddressPrefix
Обратите внимание, что вы передаете значения для параметров virtualNetworkName
и virtualNetworkAddressPrefix
. Когда другая команда разработчиков попросит вас подготовить для них подписку, вы сможете изменить эти значения, чтобы предоставить этой команде собственную виртуальную сеть.
Развертывание может занять до двух минут. Затем отобразится сообщение об успешном выполнении.
Проверка развертывания
Теперь нужно проверить группу ресурсов и развертывание, созданное модулем.
Переход на портал Azure.
На левой панели выберите Группы ресурсов. Обратите внимание, что была создана группа ресурсов ToyNetworking.
Выберите группу ресурсов ToyNetworking. Обратите внимание на то, что модуль успешно развернут в группе ресурсов и создана виртуальная сеть:
Очистка ресурсов
Вы успешно развернули ресурсы, входящие в область подписки, включая группу ресурсов, а также использовали модуль для развертывания ресурса в созданной группе ресурсов. Созданные ресурсы политики и группу ресурсов можно удалить.
Внимание
Эта команда навсегда удалит группу ресурсов с именем ToyNetworking и все ее ресурсы. Если вы развернули в данной группе ресурсов дополнительные ресурсы, вам следует пропустить этот шаг.
subscriptionId=$(az account show --query 'id' --output tsv)
az policy assignment delete --name 'DenyFandGSeriesVMs' --scope "/subscriptions/$subscriptionId"
az policy definition delete --name 'DenyFandGSeriesVMs' --subscription $subscriptionId
az group delete --name ToyNetworking
$subscriptionId = (Get-AzContext).Subscription.Id
Remove-AzPolicyAssignment -Name 'DenyFandGSeriesVMs' -Scope "/subscriptions/$subscriptionId"
Remove-AzPolicyDefinition -Name 'DenyFandGSeriesVMs' -SubscriptionId $subscriptionId
Remove-AzResourceGroup -Name ToyNetworking