Упражнение. Развертывание ресурсов в нескольких областях с помощью модулей
Заметка
Для этого упражнения требуется подписка Azure. Если у вас еще нет подписки, вы можете получить бесплатную подписку.
Команда R&D попросила вашей помощи в создании виртуальной сети в подписке 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 для виртуальной сети команды R&D. Вы развернете ресурсы из модуля в группу ресурсов позже в этом упражнении.
В Visual Studio Code создайте новую папку с именем модулей в той же папке, в которой вы создали файл main.bicep.
В папке модулей создайте и сохраните файл 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, чтобы он развернул модуль в группе ресурсов.
В файле main.bicep в Visual Studio Code в строке
targetScope
добавьте следующие определения параметров:param virtualNetworkName string param virtualNetworkAddressPrefix string
Эти параметры позволяют повторно использовать шаблон. В любой момент, когда команда R&D нуждается в новой подписке, вы можете создать виртуальную сеть с уникальным именем и диапазоном 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
. Когда другая команда R&D просит вас подготовить подписку для них, вы сможете изменить эти значения, чтобы дать этой команде собственную виртуальную сеть.
Развертывание может занять минуту или два, а затем вы увидите успешное развертывание.
Проверка развертывания
Теперь вы проверите группу ресурсов и развертывание, созданное модулем.
Перейдите на портал 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