Cvičení – nasazení prostředků do více oborů pomocí modulů
Poznámka:
Toto cvičení vyžaduje předplatné Azure. Pokud ho ještě nemáte, můžete získat bezplatné předplatné.
Tým R&D požádal o pomoc s vytvořením virtuální sítě v předplatném Project Teddybear. Víte, že budete týmu v budoucnu pomáhat s dalšími předplatnými, takže se rozhodnete rozšířit opakovaně použitelnou šablonu Bicep a nasadit virtuální síť, kterou budou členové týmu používat.
V tomto cvičení aktualizujete šablonu, kterou jste začali sestavovat v posledním cvičení.
Během tohoto procesu:
- Aktualizujte šablonu s oborem předplatného a vytvořte novou skupinu prostředků.
- Vytvořte samostatný modul Bicep s virtuální sítí a pomocí parametrů můžete řídit konfiguraci virtuální sítě.
- Aktualizujte šablonu tak, aby nasadil modul do skupiny prostředků.
- Nasazení šablony
Toto cvičení vyžaduje, abyste měli oprávnění k nasazení prostředků s vymezeným předplatným. Pokud tento požadavek nemůžete splnit s aktuálním účtem Azure, můžete získat bezplatnou zkušební verzi a vytvořit nové předplatné a tenanta Azure. Případně můžete přeskočit kroky nasazení v tomto cvičení.
Vytvoření skupiny zdrojů
V editoru Visual Studio Code otevřete soubor main.bicep , který jste vytvořili v předchozím cvičení.
Do aktuálních definic proměnných přidejte následující definici proměnné:
var resourceGroupName = 'ToyNetworking'
Do dolní části souboru přidejte následující definici prostředku:
resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-01-01' = { name: resourceGroupName location: deployment().location }
Všimněte si, že definujete skupinu prostředků stejně, jako byste definovali jiný prostředek. Skupina prostředků je prostředek s vymezeným předplatným, který lze nasadit a spravovat v souborech Bicep s nastaveným
targetScope
nastavenímsubscription
.Uložte změny souboru.
Přidání modulu pro vytvoření virtuální sítě
Dále vytvoříte modul Bicep pro virtuální síť týmu R&D. Prostředky v modulu nasadíte do skupiny prostředků později v tomto cvičení.
V editoru Visual Studio Code vytvořte novou složku s názvem moduly ve stejné složce, ve které jste vytvořili soubor main.bicep .
Ve složce modulů vytvořte a uložte soubor s názvem virtualNetwork.bicep.
Do souboru virtualNetwork.bicep přidejte následující obsah:
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Všimněte si, že jste pro tento modul nezadali
targetScope
. Pokud se soubor Bicep zaměřuje na skupinu prostředků, nemusíte zadávat cílový obor.Uložte změny souboru.
Použití modulu v nasazení předplatného
Teď jste připraveni říct Bicep, aby modul nasadil do skupiny prostředků.
Do souboru main.bicep v editoru Visual Studio Code pod
targetScope
řádek přidejte následující definice parametrů:param virtualNetworkName string param virtualNetworkAddressPrefix string
Díky těmto parametrům bude šablona opakovaně použitelná. Kdykoli tým R&D potřebuje nové předplatné, můžete vytvořit virtuální síť s jedinečným názvem a rozsahem IP adres.
V dolní části souboru přidejte následující definici modulu:
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Všimněte si, že explicitně zadáváte
scope
modul. Bicep chápe, že prostředky v modulu by se měly nasadit do skupiny prostředků, kterou jste vytvořili dříve v souboru.
Ověření šablony
Soubor main.bicep by měl vypadat takto:
targetScope = 'subscription'
param virtualNetworkName string
param virtualNetworkAddressPrefix string
var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'
var resourceGroupName = 'ToyNetworking'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-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@2020-03-01' = {
name: policyAssignmentName
properties: {
policyDefinitionId: policyDefinition.id
}
}
resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-01-01' = {
name: resourceGroupName
location: deployment().location
}
module virtualNetwork 'modules/virtualNetwork.bicep' = {
scope: resourceGroup
name: 'virtualNetwork'
params: {
virtualNetworkName: virtualNetworkName
virtualNetworkAddressPrefix: virtualNetworkAddressPrefix
}
}
Soubor modules/virtualNetwork.bicep by měl vypadat takto:
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Pokud se některý soubor neshoduje s příkladem, zkopírujte příklad nebo upravte šablonu.
Nasazení šablony do Azure
V terminálu editoru Visual Studio Code nasaďte šablonu pomocí následujících příkazů 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
V terminálu editoru Visual Studio Code nasaďte šablonu pomocí následujících příkazů Azure PowerShellu:
$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
Všimněte si, že předáváte hodnoty pro virtualNetworkName
parametry a virtualNetworkAddressPrefix
parametry. Když vás jiný tým R&D požádá, abyste na ně připravili předplatné, budete moct tyto hodnoty změnit tak, aby tento tým měl vlastní virtuální síť.
Dokončení nasazení může trvat minutu nebo dvě a pak se zobrazí úspěšné nasazení.
Ověření nasazení
Teď zkontrolujete skupinu prostředků a nasazení, které modul vytvořil.
Přejděte na Azure Portal.
V levém podokně vyberte Skupiny prostředků. Všimněte si, že byla vytvořena skupina prostředků ToyNetworking .
Vyberte skupinu prostředků ToyNetworking. Všimněte si, že se modul úspěšně nasadil do skupiny prostředků a že byla vytvořena virtuální síť:
Vyčištění prostředků
Úspěšně jste nasadili prostředky s oborem předplatného, včetně skupiny prostředků, a použili jste modul k nasazení prostředku do vytvořené skupiny prostředků. Prostředky zásad a skupinu prostředků, které jste vytvořili, můžete odebrat.
Upozornění
Tento příkaz trvale odstraní skupinu prostředků s názvem ToyNetworking a všechny její prostředky. Pokud jste do této skupiny prostředků nasadili cokoli jiného, měli byste tento krok přeskočit.
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