التمرين - نشر الموارد إلى نطاقات متعددة باستخدام الوحدات النمطية

مكتمل

إشعار

يتطلب هذا التمرين اشتراكًا في Azure. إذا لم يكن لديك اشتراك بالفعل، يمكنك الحصول على اشتراك مجاني.

طلب فريق البحث والتطوير مساعدتك لإنشاء شبكة ظاهرية في اشتراك مشروع Teddybear. تعرف أنك ستساعد الفريق مع المزيد من الاشتراكات في المستقبل، لذلك تقرر توسيع قالب Bicep القابل لإعادة الاستخدام لنشر شبكة ظاهرية لأعضاء الفريق لاستخدامها.

في هذا التمرين، ستقوم بتحديث القالب الذي بدأت في إنشائه في التمرين الأخير.

أثناء العملية، ستقوم بما يلي:

  • تحديث قالب ذي نطاق اشتراك لإنشاء مجموعة موارد جديدة.
  • إنشاء وحدة نمطية Bicep منفصلة مع شبكة ظاهرية واستخدام معلمات للتحكم في كيفية تكوين الشبكة الظاهرية.
  • تحديث القالب لنشر الوحدة النمطية إلى مجموعة الموارد.
  • نشر القالب.

يتطلب هذا التمرين أن يكون لديك إذن لنشر موارد ذات نطاق اشتراك. إذا لم تتمكن من تلبية هذا المتطلب باستخدام حسابك الحالي في Azure، يمكنك الحصول على تجربة مجانية وإنشاء اشتراك ومستأجر جديد في Azure. بدلا من ذلك، يمكنك تخطي خطوات النشر في هذا التمرين.

إنشاء مجموعة موارد

  1. في Visual Studio Code، افتح الملف main.bicep الذي قمت بإنشائه في التمرين السابق.

  2. ضمن تعريفات المتغيّر الحالي، أضف تعريف المتغير التالي:

    var resourceGroupName = 'ToyNetworking'
    
  3. في أسفل الملف، أضف تعريف المورد التالي:

    resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-01-01' = {
      name: resourceGroupName
      location: deployment().location
    }
    

    لاحظ أنك تقوم بتحديد مجموعة الموارد تمامًا كما يمكنك تحديد مورد آخر. مجموعة الموارد هي مورد نطاق الاشتراك الذي يمكن نشره وإدارته في ملفات Bicep مع targetScope تعيين إلى subscription.

  4. حفظ التغييرات على الملف.

إضافة وحدة نمطية لإنشاء شبكة ظاهرية

بعد ذلك، ستقوم بإنشاء وحدة Bicep النمطية للشبكة الظاهرية للفريق الخاص بالبحث والتطوير. ستقوم بنشر الموارد في الوحدة النمطية إلى مجموعة الموارد لاحقًا في هذا التمرين.

  1. في Visual Studio Code، قم بإنشاء مجلد جديد باسم modules في المجلد نفسه حيث قمت بإنشاء ملف main.bicep.

  2. في مجلد الوحدات النمطية، قم بإنشاء وحفظ ملف يسمى virtualNetwork.bicep.

  3. في ملف virtualNetwork.bicep ، أضف المحتوى التالي:

    param virtualNetworkName string
    param virtualNetworkAddressPrefix string
    
    resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = {
      name: virtualNetworkName
      location: resourceGroup().location
      properties: {
        addressSpace: {
          addressPrefixes: [
            virtualNetworkAddressPrefix
          ]
        }
      }
    }
    

    لاحظ أنك لم تحدد targetScope لهذه الوحدة النمطية. لا تحتاج إلى تحديد نطاق هدف عندما يستهدف ملف Bicep مجموعة موارد.

  4. حفظ التغييرات على الملف.

استخدام الوحدة النمطية في نشر الاشتراك

الآن أنت مستعد لإعلام Bicep بنشر الوحدة النمطية إلى مجموعة الموارد.

  1. في ملف main.bicep في Visual Studio Code، أسفل السطر targetScope، قم بإضافة تعريفات المعلمة التالية:

    param virtualNetworkName string
    param virtualNetworkAddressPrefix string
    

    تجعل هذه المعلمات القالب قابلاً لإعادة الاستخدام. في أي وقت يحتاج فريق البحث والتطوير إلى اشتراك جديد، يمكنك إنشاء شبكة ظاهرية باسم فريد ونطاق عناوين IP.

  2. في أسفل الملف، أضف تعريف الوحدة النمطية التالي:

    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@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
  }
}

يجب أن يبدو ملف الوحدات النمطية/virtualNetwork.bicep كما يلي:

param virtualNetworkName string
param virtualNetworkAddressPrefix string

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-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

انشر القالب باستخدام أوامر Azure PowerShell التالية في المحطة الطرفية Visual Studio Code:

$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 . عندما يطلب منك فريق آخر للبحث والتطوير إعداد اشتراك لهم، ستتمكن من تغيير هذه القيم لإعطاء هذا الفريق شبكته الظاهرية الخاصة.

قد يستغرق النشر ذلك دقيقة أو دقيقتين، ثم ستشهد عملية نشر ناجحة.

تحقق من التوزيع

الآن عليك التحقق من مجموعة الموارد والنشر الذي أنشأته الوحدة النمطية.

  1. انتقل إلى مدخل Azure.

  2. في الجزء الأيسر، حدد Resource groups. لاحظ أنه تم إنشاء مجموعة موارد ToyNetworking .

  3. حدد مجموعة موارد ToyNetworking. لاحظ أنه قد تم نشر الوحدة النمطية إلى مجموعة الموارد بنجاح، وأنه قد تم إنشاء الشبكة الظاهرية:

    Screenshot of the Azure portal, showing the ToyNetworking resource group.

تفريغ مجموعة الموارد

لقد نجحت في نشر الموارد ذات نطاق الاشتراك، بما في ذلك مجموعة موارد، وقد استخدمت وحدة نمطية لنشر المورد إلى مجموعة الموارد التي أنشأتها. يمكنك إزالة موارد النهج ومجموعة الموارد التي قمت بإنشائها.

تنبيه

سيؤدي هذا الأمر إلى حذف مجموعة الموارد المسماة 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