Alıştırma - Modülleri kullanarak kaynakları birden çok kapsama dağıtma
Dekont
Bu alıştırma için bir Azure aboneliği gerekir. Henüz bir aboneliğiniz yoksa ücretsiz bir abonelik alabilirsiniz.
R&D ekibi, Project Teddybear aboneliğinde sanal ağ oluşturmak için yardımınızı istedi. Gelecekte takıma daha fazla abonelikle yardımcı olacağınızı bildiğiniz için, yeniden kullanılabilir Bicep şablonunuzu ekip üyelerinin kullanması için bir sanal ağ dağıtmak üzere genişletmeye karar verirsiniz.
Bu alıştırmada, son alıştırmada oluşturmaya başladığınız şablonu güncelleştireceksiniz.
İşlem sırasında şunları yapacaksınız:
- Yeni bir kaynak grubu oluşturmak için abonelik kapsamlı şablonu güncelleştirin.
- Sanal ağ ile ayrı bir Bicep modülü oluşturun ve sanal ağın nasıl yapılandırıldığını denetlemek için parametreleri kullanın.
- Modülü kaynak grubuna dağıtmak için şablonu güncelleştirin.
- Şablonu dağıtma.
Bu alıştırma, abonelik kapsamındaki kaynakları dağıtma izninizin olmasını gerektirir. Geçerli Azure hesabınızla bu gereksinimi karşılayamazsanız ücretsiz deneme sürümü alabilir ve yeni bir Azure aboneliği ve kiracısı oluşturabilirsiniz. Alternatif olarak, bu alıştırmadaki dağıtım adımlarını atlayabilirsiniz.
Kaynak grubu oluşturma
Visual Studio Code'da, önceki alıştırmada oluşturduğunuz main.bicep dosyasını açın.
Geçerli değişken tanımlarının altına aşağıdaki değişken tanımını ekleyin:
var resourceGroupName = 'ToyNetworking'
Dosyanın en altına aşağıdaki kaynak tanımını ekleyin:
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = { name: resourceGroupName location: deployment().location }
Kaynak grubunu, aynı başka bir kaynağı tanımladığınız gibi tanımladığınıza dikkat edin. Kaynak grubu, olarak ayarlanmış Bicep dosyalarında
targetScope
dağıtılabilen ve yönetilebilen abonelik kapsamlı bir kaynaktırsubscription
.Dosyadaki değişiklikleri kaydedin.
Sanal ağ oluşturmak için modül ekleme
Ardından Ar-Ge ekibinin sanal ağı için bir Bicep modülü oluşturacaksınız. Bu alıştırmanın devamında modüldeki kaynakları kaynak grubuna dağıtacaksınız.
Visual Studio Code'da, main.bicep dosyanızı oluşturduğunuz klasörde modules adlı yeni bir klasör oluşturun.
modules klasöründe virtualNetwork.bicep adlı bir dosya oluşturun ve kaydedin.
virtualNetwork.bicep dosyasına aşağıdaki içeriği ekleyin:
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Bu modül için bir belirtmediğinize
targetScope
dikkat edin. Bicep dosyası bir kaynak grubunu hedeflerken hedef kapsam belirtmeniz gerekmez.Dosyadaki değişiklikleri kaydedin.
Abonelik dağıtımında modülünü kullanma
Artık Bicep'e modülü kaynak grubuna dağıtmasını söylemeye hazırsınız.
Visual Studio Code'daki main.bicep dosyasındaki satırın
targetScope
altına aşağıdaki parametre tanımlarını ekleyin:param virtualNetworkName string param virtualNetworkAddressPrefix string
Bu parametreler şablonu yeniden kullanılabilir hale getirir. Ar-Ge ekibinin yeni bir aboneliğe ihtiyaç duyduğunda, benzersiz bir ad ve IP adresi aralığına sahip bir sanal ağ oluşturabilirsiniz.
Dosyanın en altına aşağıdaki modül tanımını ekleyin:
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Modül için öğesini açıkça belirttiğinize
scope
dikkat edin. Bicep, modüldeki kaynakların daha önce dosyada oluşturduğunuz kaynak grubuna dağıtılması gerektiğini anlar.
Şablonunuzu doğrulama
main.bicep dosyanız aşağıdaki gibi görünmelidir:
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 dosyanız aşağıdaki gibi görünmelidir:
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Dosyalardan biri örnekle eşleşmiyorsa, örneği kopyalayın veya şablonunuzu ayarlayın.
Şablonu Azure’a dağıtma
Visual Studio Code terminalinde aşağıdaki Azure CLI komutlarını kullanarak şablonu dağıtın:
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 terminalinde aşağıdaki Azure PowerShell komutlarını kullanarak şablonu dağıtın:
$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
ve virtualNetworkAddressPrefix
parametreleri için değerleri geçirdiğiniz dikkat virtualNetworkName
edin. Başka bir Ar-Ge ekibi sizden onlar için bir abonelik hazırlamanızı istediğinde, bu değerleri bu ekiliğe kendi sanal ağını verecek şekilde değiştirebilirsiniz.
Dağıtımın tamamlanması bir veya iki dakika sürebilir ve başarılı bir dağıtım görürsünüz.
Dağıtımı doğrulama
Şimdi kaynak grubunu ve modülün oluşturduğu dağıtımı denetleyeceksiniz.
Azure portalına gidin.
Sol bölmede Kaynak grupları'nı seçin. ToyNetworking kaynak grubunun oluşturulduğuna dikkat edin.
ToyNetworking kaynak grubunu seçin. Modülün kaynak grubuna başarıyla dağıtıldığına ve sanal ağın oluşturulduğuna dikkat edin:
Kaynakları temizleme
Kaynak grubu dahil olmak üzere abonelik kapsamındaki kaynakları başarıyla dağıttınız ve kaynağı oluşturduğunuz kaynak grubuna dağıtmak için bir modül kullandınız. Oluşturduğunuz ilke kaynaklarını ve kaynak grubunu kaldırabilirsiniz.
Dikkat
Bu komut, ToyNetworking adlı kaynak grubunu ve tüm kaynaklarını kalıcı olarak siler. Bu kaynak grubuna başka bir şey dağıttıysanız bu adımı atlamalısınız.
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