Ćwiczenie — wdrażanie zasobów w wielu zakresach przy użyciu modułów
Uwaga
To ćwiczenie wymaga subskrypcji platformy Azure. Jeśli jeszcze go nie masz, możesz uzyskać bezpłatną subskrypcję.
Zespół ds. zasobów badawczo-badawczy poprosił o pomoc w utworzeniu sieci wirtualnej w subskrypcji usługi Project Teddybear. Wiesz, że w przyszłości pomożesz zespołowi w korzystaniu z większej liczby subskrypcji, więc zdecydujesz się rozszerzyć szablon Bicep wielokrotnego użytku, aby wdrożyć sieć wirtualną dla członków zespołu do użycia.
W tym ćwiczeniu zaktualizujesz szablon, który został rozpoczęty w ostatnim ćwiczeniu.
Podczas tego procesu wykonasz następujące czynności:
- Zaktualizuj szablon o zakresie subskrypcji, aby utworzyć nową grupę zasobów.
- Utwórz oddzielny moduł Bicep z siecią wirtualną i użyj parametrów, aby kontrolować sposób konfigurowania sieci wirtualnej.
- Zaktualizuj szablon, aby wdrożyć moduł w grupie zasobów.
- Wdrażanie szablonu.
To ćwiczenie wymaga uprawnień do wdrażania zasobów w zakresie subskrypcji. Jeśli nie możesz spełnić tego wymagania przy użyciu bieżącego konta platformy Azure, możesz uzyskać bezpłatną wersję próbną i utworzyć nową subskrypcję i dzierżawę platformy Azure. Możesz też pominąć kroki wdrażania w tym ćwiczeniu.
Tworzenie grupy zasobów
W programie Visual Studio Code otwórz plik main.bicep utworzony we wcześniejszym ćwiczeniu.
W obszarze bieżących definicji zmiennych dodaj następującą definicję zmiennej:
var resourceGroupName = 'ToyNetworking'
W dolnej części pliku dodaj następującą definicję zasobu:
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = { name: resourceGroupName location: deployment().location }
Zwróć uwagę, że definiujesz grupę zasobów tak samo jak w przypadku definiowania innego zasobu. Grupa zasobów to zasób o zakresie subskrypcji, który można wdrożyć i zarządzać
subscription
w plikach Bicep z ustawionym ustawieniemtargetScope
.Zapisz zmiany w pliku.
Dodawanie modułu w celu utworzenia sieci wirtualnej
Następnie utworzysz moduł Bicep dla sieci wirtualnej zespołu R&D. W dalszej części tego ćwiczenia wdrożysz zasoby w module w grupie zasobów.
W programie Visual Studio Code utwórz nowy folder o nazwie modules w tym samym folderze, w którym utworzono plik main.bicep .
W folderze modules utwórz i zapisz plik o nazwie virtualNetwork.bicep.
W pliku virtualNetwork.bicep dodaj następującą zawartość:
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Zwróć uwagę, że nie określono
targetScope
elementu dla tego modułu. Nie musisz określać zakresu docelowego, gdy plik Bicep jest przeznaczony dla grupy zasobów.Zapisz zmiany w pliku.
Korzystanie z modułu we wdrożeniu subskrypcji
Teraz możesz poinformować Bicep o wdrożeniu modułu w grupie zasobów.
W pliku main.bicep w programie Visual Studio Code w wierszu
targetScope
dodaj następujące definicje parametrów:param virtualNetworkName string param virtualNetworkAddressPrefix string
Te parametry umożliwiają wielokrotne użycie szablonu. Za każdym razem, gdy zespół badawczy potrzebuje nowej subskrypcji, możesz utworzyć sieć wirtualną o unikatowej nazwie i zakresie adresów IP.
W dolnej części pliku dodaj następującą definicję modułu:
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Zwróć uwagę, że jawnie określasz
scope
element dla modułu. Bicep rozumie, że zasoby w module powinny być wdrażane w grupie zasobów utworzonej wcześniej w pliku.
Weryfikowanie szablonu
Plik main.bicep powinien wyglądać następująco:
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
}
}
Plik modules/virtualNetwork.bicep powinien wyglądać następująco:
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Jeśli dowolny plik nie jest zgodny z przykładem, skopiuj przykład lub dostosuj szablon.
Wdrażanie szablonu na platformie Azure
W terminalu programu Visual Studio Code wdróż szablon przy użyciu następujących poleceń interfejsu wiersza polecenia platformy Azure:
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
W terminalu programu Visual Studio Code wdróż szablon przy użyciu następujących poleceń programu 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
Zwróć uwagę, że przekazujesz wartości parametrów virtualNetworkName
i virtualNetworkAddressPrefix
. Gdy inny zespół ds. ściągnąć prośbę o przygotowanie subskrypcji, będzie można zmienić te wartości, aby nadać zespołowi własną sieć wirtualną.
Wdrożenie może potrwać minutę lub dwie, a następnie zobaczysz pomyślne wdrożenie.
Weryfikowanie wdrożenia
Teraz sprawdzisz grupę zasobów i wdrożenie utworzone przez moduł.
Przejdź do portalu Azure Portal.
W okienku po lewej stronie wybierz pozycję Grupy zasobów. Zwróć uwagę, że utworzono grupę zasobów ToyNetworking .
Wybierz grupę zasobów ToyNetworking . Zwróć uwagę, że moduł został pomyślnie wdrożony w grupie zasobów i że sieć wirtualna została utworzona:
Oczyszczanie zasobów
Pomyślnie wdrożono zasoby o zakresie subskrypcji, w tym grupę zasobów, i użyto modułu do wdrożenia zasobu w utworzonej grupie zasobów. Możesz usunąć utworzone zasoby zasad i grupę zasobów.
Uwaga
To polecenie spowoduje trwałe usunięcie grupy zasobów o nazwie ToyNetworking i wszystkich jej zasobów. Jeśli wdrożono inne elementy w tej grupie zasobów, należy pominąć ten krok.
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