عيادي طاهر | إنشاء أجهزة إفتراضية على Azure باستخدام Powershell

إنشاء أجهزة إفتراضية على Azure باستخدام Powershell

تاريخ النشر: 2022-02-08


في هذا المقال المختصر ، سنتعلم الخطوات المتضمنة في إعداد جهاز افتراضي باستخدام Azure PowerShell مع اظهار المراحل والاحتمالات الممكنة .

يمكن تنفيذ الخطوات والمراحل القادمة بالتجربة التفاعلية المقدمة من خلال Azure Cloud Shell ، أو يمكنك تثبيت Azure PowerShell محليًا.

الاتصال بالحساب

في حالة استعمال Azure Cloud Shell فأنت متصل مباشرة بحسابك، ويمكنك تخطي هذه المرحلة.

أما إذا كنت تستعمل نسخة Azure PowerShell مثبتة محليًا، فستحتاج الى تثبيت حزمة أوامر Azure عن طريق الأمر التالي :


install-module -name az -scope CurrentUser -Repository PSGallery -Force

بعدها يمكنك تسجيل الدخول عن طريق الأمر التالي :


Connect-AzAccount

بحيث ستفتح تلقائيا نافذة المتصفح ( Mozilla Firefox مثلا ) لإدخال اسم المستخدم وكلمة المرور (هذه الخطوة تطبق مرة واحدة فقط ).

azure_sign_in

بعد نجاح العملية ستظهر هذه النافذة التي تؤكد ذلك:

azure_sign_in_confirm

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

في Azure ، يمكن تخصيص جميع الموارد المنشئة في مجموعة إدارة موارد resource group منطقية، إذ توفر سهولة العمل معها (أي الموارد) كمجموعة. بالنسبة لحالتنا نحن ، تدخل جميع الموارد التي سنقوم بإنشاؤها في مجموعة واحدة تسمى VmsGroup ( يمكن أن تختار أي إسم تريد):


New-AzResourceGroup -Name VMsGroup -Location eastus

ResourceGroupName : VMsGroup
Location          : eastus
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/VMsGroup

إنشاء كائن بيانات credential object

سنقوم بإنشاء نسخة Windows . لكن قبل أن نتمكن من إنشاء جهاز وهمي (Virtual Machine ) جديد ، يجب علينا إنشاء كائن بيانات ( credential object ) ، وعو عبارة عن متغير يحتوي على اسم المستخدم وكلمة المرور للحساب المسؤول الخاص بـإدارة Windows VM ، وذلك عن طريق الأمر التالي:

$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

أدخل اسم المستخدم وكلمة المرور عندما يُطلب منك ذلك. يتم تمرير كائن الاعتماد الناتج كمعامل في الخطوة التالية:


PowerShell credential request
Enter a username and password for the virtual machine.
User: AhmedAli
Password for user AhmedAli: *********

إنشاء الجهاز الإفتراضي DemoVM1

تحتوي الأجهزة الافتراضية في Azure على عدد كبير من التبعيات والمرفقات ( dependencies ). يقوم Azure PowerShell بإنشاء هذه الموارد نيابة عنا ،بناءً على وسيطات ( arguments ) سطر الأوامر التي نحددها. لسهولة القراءة ، نحن نستخدم PowerShell splatting لتمرير المعلمات ( parameters ) إلى أوامر Azure PowerShell cmdvlets.

سنقوم بإنشاء آلة افتراضية جديدة تعمل بنظام Windows Server 2019 :


$vmParams = @{
        ResourceGroupName = 'VMsGroup'
        Name = 'DemoVM1'
        Location = 'eastus'
        ImageName = 'Win2019Datacenter'
        PublicIpAddressName = 'DemoPublicIp'
        Credential = $cred
        OpenPorts = 3389
    }

$newVM1 = New-AzVM @vmParams

أثناء إنشاء الجهاز الافتراضي ، تظهر قيم المعلمات ( parameter ) المستخدمة مع إنشاء موارد Azure. سيعرض PowerShell شريط تقدم كما هو موضح أدناه:


$newVM1
    Creating Azure resources
    No Size value has been provided. The VM will be created with the default size Standard_D2s_v3.
    Creating Azure resources [21% |.....................                                                     ]

بمجرد أن يصبح الجهاز الإفتراضي جاهزًا ، يمكننا عرض النتائج في Azure Portal كما هو مبين في الصورة التالية:

azure_portal_demovm1.png

أو عن طريق فحص المتغير newVM1 :


$newVM1

ResourceGroupName        : VMsGroup
Id                       :
/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/VMsGroup/providers/Microsoft.Compute/virtualMachines/DemoVM1
VmId                     : cae645d7-2471-4633-aeb9-504d5b2a5bfa
Name                     : DemoVM1
Type                     : Microsoft.Compute/virtualMachines
Location                 : eastus
Tags                     : {}
HardwareProfile          : {VmSize}
NetworkProfile           : {NetworkInterfaces}
OSProfile                : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations,
RequireGuestProvisionSignal}
ProvisioningState        : Succeeded
StorageProfile           : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : demovm1-cdc6cf.eastus.cloudapp.azure.com


قيم الخصائص المدرجة داخل الأقواس هي كائنات متداخلة. في الخطوة التالية سوف نوضح كيفية عرض قيم محددة في هذه الكائنات المتداخلة.

الحصول على معلومات ال VM مع الاستفسارات

دعنا نحصل على بعض المعلومات التفصيلية من الجهاز الإفتراضي الذي أنشأناه للتو. في هذا المثال ، نتحقق من اسم الجهاز وحساب المسؤول الذي أنشأناه:


$newVM1.OSProfile | Select-Object ComputerName,AdminUserName

ComputerName AdminUsername
------------ -------------
DemoVM1      AhmedAli

يمكننا استخدام أوامر Azure PowerShell الأخرى للحصول على معلومات محددة حول تكوين الشبكة:


$newVM1 | Get-AzNetworkInterface | Select-Object -ExpandProperty IpConfigurations | Select-Object Name,PrivateIpAddress

Name    PrivateIpAddress
----    ----------------
DemoVM1 192.168.1.4

في هذا المثال ، نستخدم خط إمداد PowerShell لإرسال الكائن newVM1 إلى الأمر Get-AzNetworkInterface. نختار كائن IpConfigurations المتداخل من نتيجة الأمر السابق. من عنصر IpConfigurations إخترنا الاسم Name والخصائص PrivateIpAddress .

للتأكد من أن الجهاز الوهمي يشتغل ، نحتاج إلى الاتصال عبر سطح المكتب البعيد (Remote Desktop ). لذلك ، نحتاج إلى معرفة عنوان IP العام:


$publicIp = Get-AzPublicIpAddress -Name DemoPublicIp -ResourceGroupName VMsGroup
في هذا المثال ، نستخدم Get-AzPublicIpAddress ونخزن النتائج في المتغير publicIp$ . من هذا المتغير نختار الخصائص ونستخدم تعبيرًا لاسترداد خاصية الإسم الكامل Fqdn (Fully qualified domain name ) المتداخلة.

$publicIp | Select-Object Name,IpAddress,@{label='FQDN';expression={$_.DnsSettings.Fqdn}}

Name         IpAddress     FQDN
----         ---------     ----
DemoPublicIp X.X.X.X       demovm1-eb2cbf.eastus.cloudapp.azure.com

من جهازك المحلي(إذا كنت تستعمل Windows ) ، يمكنك تشغيل الأمر التالي للاتصال بـ demoVM1 عبر سطح المكتب:


mstsc.exe /v X.X.X.X

يمكنك إستعمال أي برنامج ( remote desktop client )يتيح لك خاصية الاتصال بالواجهة الرسومية للأنظمة التي تدعم سطح المكتب.

إنشاء جهاز افتراضي جديد على شبكة فرعية موجودة مسبقا.

في بعض الأحيان قد نرغب في إنشاء جهاز افتراضي جديد على شبكة فرعية حالية موجودة أو تم إنشائها مسبقا.

يستخدم الجهاز الظاهري الثاني الشبكة الفرعية الموجودة التي تم إنشائها في القسم الأول من الشرح (إنشاء DemoVm1 ) .

في العادة في حالة لم نقم بتحديد حجم الجهاز الإفتراضي المراد إنشاءه ، يتم تحديد الحجم بالقيمة Standard_D2s_v3 والتي تعادل 2 معالجات (cores) و 8 جيغا ذاكرة داخلية.

في هذا المثال سنقوم بتحديد الحجم بالقيمة Standard_B4ms والتي تعادل 4 معالجات و 16 جيغا ذاكرة داخلية:


$vm2Params = @{
        ResourceGroupName = 'VMsGroup'
        Name = 'DemoVM2'
        ImageName = 'Win2019Datacenter'
        Size = 'Standard_B4ms'
        VirtualNetworkName = 'DemoVM1'
        SubnetName = 'DemoVM1'
        PublicIpAddressName = 'DemoPublicIp2'
        Credential = $cred
        OpenPorts = 3389
    }
$newVM2 = New-AzVM @vm2Params
Creating Azure resources [15% \                                                                                      ]

يمكن أن نلاحظ في هذه الصورة أنه تم إنشاء موارد أخرى ذات علاقة بالجهاز الذي أنشأناه DemoVM2 :

azure_portal_demovm2.png

أو عن طريق تفحص المتغير newVM2 :


$newVM2

ResourceGroupName        : VMsGroup
Id                       :
/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourceGroups/VMsGroup/providers/Microsoft.Compute/virtualMachines/DemoVM2
VmId                     : 81775363-8642-4f10-ad16-f70f375b8d5a
Name                     : DemoVM2
Type                     : Microsoft.Compute/virtualMachines
Location                 : eastus
Tags                     : {}
HardwareProfile          : {VmSize}
NetworkProfile           : {NetworkInterfaces}
OSProfile                : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations,
RequireGuestProvisionSignal}
ProvisioningState        : Succeeded
StorageProfile           : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : demovm2-8a7a8c.eastus.cloudapp.azure.com


يمكنك تخطي بضع خطوات للحصول على عنوان IP العام لجهاز VM الجديد حيث يتم إرجاعه في خاصية FullyQualifiedDomainName للكائن $ newVM2. استخدم الأمر التالي للاتصال مباشرة دون الحاجة الى عنوان IP عام، لإستخدام الواجهة الرسومية لسطح المكتب للجهاز DemoVM2 :


mstsc.exe /v $newVM2.FullyQualifiedDomainName

يمكن إيقاف أو تشغيل الأجهزة الإفتراضية حسب الحاجة، عن طريق إستعمال الأر التالي:


Stop-AzVM -ResourceGroupName 'VMsGroup' Name = 'DemoVM1'
Start-AzVM -ResourceGroupName 'VMsGroup' Name = 'DemoVM2'
 

إزالة وحذف الأجهزة الإفتراضية والموارد المنشئة

الآن وبعد اكتمال الشرح التعليمي ، حان الوقت لتنظيف الوضعية وحذف الموارد التي تم إنشاؤها لتجنب أعباء تكلفة إضافية في حالة لم نحتج إليها.

يمكنك حذف الموارد الفردية باستخدام الأمر Remove-AzResource ، ولكن الطريقة الأكثر أمانًا لإزالة جميع الموارد في مجموعة الموارد هي حذف المجموعة باستخدام الأمر Remove-AzResourceGroup.


$job = Remove-AzResourceGroup -Name VMsGroup -Force -AsJob
$job

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      Long Running O… AzureLongRunni… Running       True            localhost            Remove-AzResourceGroup
 

يحذف هذا الأمر الموارد التي تم إنشاؤها أثناء الشرح التعليمي ، ويضمن إلغاء تخصيصها بالترتيب الصحيح. تحافظ المعلمة -AsJob على منع PowerShell من الإختناق (block) أثناء إجراء الحذف. للانتظار حتى اكتمال الحذف ، استخدم الأمر التالي:


Wait-Job -Id $job.Id

    Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
    --     ----            -------------   -----         -----------     --------             -------
    1      Long Running O… AzureLongRunni… Completed     True            localhost            Remove-AzResourceGroup

 

مع اكتمال عملية الحذف والتنظيف ، وصلنا الى نهاية المقال.

خاتمة

• تهانينا! لقد تعلمنا في هذا المقال المختصر كيفية إنشاء أجهزة إفتراضية باستخدام موارد جديدة أو حالية ، والتعبيرات المستخدمة وأوامر Azure PowerShell الأخرى لالتقاط البيانات و تخزينها في متغيرات الصدفة ( shell) ، وألقينا نظرة على بعض الموارد التي تم إنشاؤها لأجهزة Azure VM.

سنتستعرض في مقال مفصل لاحقا إن شاء الله جميع الطرق الممكنة لاستعمال وتشغيل PowerShell تحت مختلف أنظمة وبيئات التشغيل.