PowerShell استعمال ڪندي Azure VMs کي تبديل ڪرڻ ۽ ختم ڪرڻ

PowerShell استعمال ڪندي، انجنيئرز ۽ آئي ٽي ايڊمنسٽريٽر ڪاميابيءَ سان مختلف ڪمن کي خودڪار ڪندا آهن جڏهن نه صرف آن پريمسس سان، پر ڪلائوڊ انفراسٽرڪچر سان، خاص طور تي Azure سان. ڪجهه حالتن ۾، PowerShell ذريعي ڪم ڪرڻ تمام گهڻو آسان ۽ تيز آهي Azure پورٽل ذريعي ڪم ڪرڻ کان. ان جي ڪراس پليٽ فارم فطرت جي مهرباني، PowerShell ڪنهن به آپريٽنگ سسٽم تي استعمال ڪري سگهجي ٿو.

چاهي توهان Ubuntu، Red Hat، يا Windows هلائي رهيا آهيو، PowerShell توهان جي ڪلائوڊ وسيلن کي ڪنٽرول ڪرڻ ۾ توهان جي مدد ڪري سگهي ٿي. ماڊل استعمال ڪندي Azure PowerShell، مثال طور، توهان مجازي مشينن جي ڪنهن به ملڪيت کي سيٽ ڪري سگهو ٿا.

هن آرٽيڪل ۾، اسان ڏسنداسين ته توهان ڪيئن استعمال ڪري سگهو ٿا PowerShell Azure ڪلائوڊ ۾ هڪ VM کي ٻيهر ڪرڻ لاء، انهي سان گڏ هڪ VM ۽ ان سان لاڳاپيل شيون حذف ڪريو.

PowerShell استعمال ڪندي Azure VMs کي تبديل ڪرڻ ۽ ختم ڪرڻ

اھم! ڪم لاءِ تيار ٿيڻ لاءِ پنهنجي هٿن کي صفائيءَ واري مشين سان صاف ڪرڻ نه وساريو:

  • توھان کي ھڪڙي ماڊل جي ضرورت پوندي Azure PowerShell ماڊل - اهو حڪم سان PowerShell گيلري مان ڊائون لوڊ ڪري سگھجي ٿو Install-Module Az.
  • توهان کي Azure بادل ۾ تصديق ڪرڻ جي ضرورت آهي جتي مجازي مشين هلائي رهي آهي حڪم هلائڻ سان Connect-AzAccount.

پهرين، اچو ته هڪ اسڪرپٽ ٺاهي جيڪا هڪ Azure VM کي تبديل ڪندي. اچو ته VS ڪوڊ کوليون ۽ هڪ نئين PowerShell اسڪرپٽ محفوظ ڪريو جنهن کي سڏيو ويندو آهي Resize-AzVirtualMachine.ps1 - اسان ان ۾ ڪوڊ جا ٽڪرا شامل ڪنداسين جيئن مثال اڳتي وڌندو.

اسان دستياب VM سائيز جي درخواست ڪريون ٿا

VM سائيز کي تبديل ڪرڻ کان اڳ، توھان کي اھو معلوم ڪرڻو پوندو ته Azure ڪلائوڊ ۾ ورچوئل مشينن لاءِ قابل قبول سائز ڪھڙا آھن. هن کي ڪرڻ لاء توهان کي حڪم هلائڻ جي ضرورت آهي Get-AzVMSize.

تنهن ڪري مجازي مشين لاء devvm01 وسيلن جي گروپ کان شيطان اسان سڀني ممڪن قابل قبول سائيز جي درخواست ڪريون ٿا:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(حقيقي مسئلن ۾، يقينا، بدران ResourceGroupName=dev и VMName=devvm01 توھان انھن پيرا ميٽرز لاءِ پنھنجون قيمتون بيان ڪندا.)

حڪم هن طرح ڪجهه واپس ڪندو:

PowerShell استعمال ڪندي Azure VMs کي تبديل ڪرڻ ۽ ختم ڪرڻ

اهي سڀ ممڪن سائيز جا اختيار آهن جيڪي مقرر ڪري سگھجن ٿيون هڪ ڏنل ورچوئل مشين لاءِ.

اچو ته ڪار جي ماپ ڪريون

مثال طور، اسان کي نئين سائيز ۾ تبديل ڪنداسين معياري_B1ls - هو مٿي ڏنل فهرست ۾ پهرين جڳهه تي آهي. (حقيقي زندگي جي ايپليڪيشنن ۾، يقينا، توهان چونڊيو جيڪو توهان کي گهربل هجي.)

  1. پهريون حڪم استعمال ڪندي Get-AzVM اسان پنهنجي شئي (ورچوئل مشين) بابت معلومات حاصل ڪندا آهيون ان کي متغير ۾ محفوظ ڪري $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. ان کان پوء اسان هن اعتراض کان ملڪيت وٺي .HardwareProfile.VmSize ۽ مطلوب نئين قيمت مقرر ڪريو:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. ۽ ھاڻي اسان صرف VM اپڊيٽ ڪمانڊ تي عمل ڪريون ٿا. Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. اسان پڪ ڪريون ٿا ته سڀ ڪجھ ٺيڪ ٿي ويو - هن کي ڪرڻ لاء، اسان ٻيهر درخواست ڪريون ٿا اسان جي اعتراض بابت معلومات ۽ ملڪيت کي ڏسو $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

جيڪڏهن اسان اتي ڏسون ٿا معياري_B1ls - مطلب ته هر شي ترتيب ۾ آهي، ڪار جي سائيز تبديل ڪئي وئي آهي. توھان اڳتي وڌو ۽ پنھنجي ڪاميابي تي تعمير ڪري سگھوٿا ڪيترن ئي VMs کي ٻيهر ترتيب ڏيڻ سان ھڪڙي صف استعمال ڪندي.

Azure ۾ VM کي حذف ڪرڻ بابت ڇا؟

ختم ڪرڻ سان، هر شيء بلڪل سادو ۽ سڌو ناهي جيترو اهو لڳي سگهي ٿو. سڀ کان پوء، هن مشين سان لاڳاپيل وسيلن جي هڪ انگ کي ختم ڪرڻ ضروري آهي، جنهن ۾ شامل آهن:

  • بوٽن جي تشخيصي اسٽوريج ڪنٽينرز
  • نيٽورڪ انٽرنيٽ
  • عوامي IP پتي
  • سسٽم ڊسڪ ۽ بلب جتي ان جي حيثيت رکيل آهي
  • ڊيٽا ڊسڪ

تنهن ڪري، اسان هڪ فنڪشن ٺاهينداسين ۽ ان کي سڏينداسين Remove-AzrVirtualMachine - ۽ اهو حذف ڪندو نه صرف Azure VM، پر مٿي ڏنل سڀني کي پڻ.

اسان معياري طريقي سان وڃون ٿا ۽ پهريون ڀيرو اسان جو اعتراض (VM) حاصل ڪريو حڪم استعمال ڪندي Get-AzVm. مثال طور، اچو ته هڪ ڪار هجي WINSRV19 وسيلن جي گروپ کان MyTestVMs.

اچو ته هن اعتراض کي ان جي سڀني ملڪيتن سان گڏ هڪ متغير ۾ محفوظ ڪريون $vm:

$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs

بوٽ جي تشخيص واري فائلن سان ڪنٽينر کي هٽائڻ

جڏهن Azure ۾ هڪ VM ٺاهيندي، صارف کي پڻ چيو ويندو آهي ته هڪ ڪنٽينر ٺاهي بوٽن جي تشخيص (بوٽ تشخيص ڪنٽينر) کي محفوظ ڪرڻ لاء، انهي ڪري ته جيڪڏهن بوٽنگ سان مسئلا آهن، اتي ڪجهه آهي ته مسئلو حل ڪرڻ لاء. جڏهن ته، جڏهن VM کي ختم ڪيو ويو آهي، اهو ڪنٽينر ڇڏي ويو آهي ان جي هاڻي بي مقصد وجود کي جاري رکڻ لاء. اچو ته هن صورتحال کي درست ڪريون.

  1. پهرين، اچو ته اهو معلوم ڪريون ته هي ڪنٽينر ڪهڙي اسٽوريج اڪائونٽ سان تعلق رکي ٿو - ان لاءِ اسان کي ملڪيت ڳولڻ جي ضرورت آهي storageUri اعتراض جي آنڊن ۾ DiagnosticsProfile اسان جي VM. ان لاءِ آئون هي باقاعده اظهار استعمال ڪريان ٿو:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. ھاڻي توھان کي معلوم ڪرڻ جي ضرورت آھي ڪنٽينر جو نالو، ۽ ھن لاء توھان کي حاصل ڪرڻ جي ضرورت آھي VM ID حڪم استعمال ڪندي Get-AzResource:
    
    if ($vm.Name.Length -gt 9) {
        $i = 9
    } else {
        $i = $vm.Name.Length - 1
    }
     
    $azResourceParams = @{
        'ResourceName' = WINSRV
        'ResourceType' = 'Microsoft.Compute/virtualMachines'
        'ResourceGroupName' = MyTestVMs
    }
     
    $vmResource = Get-AzResource @azResourceParams
    $vmId = $vmResource.Properties.VmId
    $diagContainerName = ('bootdiagnostics-{0}-{1}' -f $vm.Name.ToLower().Substring(0, $i), $vmId)
    
  3. اڳيون، اسان وسيلن جي گروپ جو نالو حاصل ڪندا آهيون جنهن سان ڪنٽينر تعلق رکي ٿو:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. ۽ ھاڻي اسان وٽ سڀ ڪجھ آھي جيڪو اسان کي حڪم سان ڪنٽينر کي ختم ڪرڻ جي ضرورت آھي Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM کي هٽائڻ

ھاڻي اچو ته ورچوئل مشين کي ئي ختم ڪريون، ڇو ته اسان اڳ ۾ ئي ھڪ ويريبل ٺاھيو آھي $vm لاڳاپيل اعتراض لاء. خير، اچو ته حڪم هلائي Remove-AzVm:

$null = $vm | Remove-AzVM -Force

نيٽ ورڪ انٽرفيس ۽ عوامي IP پتي کي هٽائڻ

اسان جي VM وٽ اڃا تائين ھڪڙو (يا ڪيترائي) نيٽ ورڪ انٽرفيس (NICs) آھن - انھن کي غير ضروري سمجھڻ لاءِ، اچو ته ملڪيت جي ذريعي وڃو NetworkInterfaces اسان جو VM اعتراض ۽ NIC کي حڪم سان حذف ڪريو Remove-AzNetworkInterface. صورت ۾ اتي هڪ کان وڌيڪ نيٽ ورڪ انٽرفيس آهي، اسان هڪ لوپ استعمال ڪندا آهيون. ساڳئي وقت، هر NIC لاءِ اسان ملڪيت جي جانچ ڪنداسين IpConfiguration اهو طئي ڪرڻ لاءِ ته ڇا انٽرفيس وٽ عوامي IP پتو آهي. جيڪڏهن هڪ مليو آهي، اسان ان کي حڪم سان ختم ڪنداسين Remove-AzPublicIpAddress.

هتي صرف اهڙي ڪوڊ جو هڪ مثال آهي، جتي اسان هڪ لوپ ۾ سڀني NICs ذريعي ڏسو، انهن کي حذف ڪريو، ۽ چيڪ ڪريو ته ڪو عوامي IP آهي. جيڪڏهن آهي، ته ملڪيت کي پارس ڪريو PublicIpAddress, ڳوليو لاڳاپيل وسيلن جو نالو ID ذريعي ۽ ان کي حذف ڪريو:


foreach($nicUri in $vm.NetworkProfile.NetworkInterfaces.Id) {
    $nic = Get-AzNetworkInterface -ResourceGroupName $vm.ResourceGroupName -Name $nicUri.Split('/')[-1]
    Remove-AzNetworkInterface -Name $nic.Name -ResourceGroupName $vm.ResourceGroupName -Force

    foreach($ipConfig in $nic.IpConfigurations) {
        if($ipConfig.PublicIpAddress -ne $null) {
            Remove-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('/')[-1] -Force
        }
    }
}

سسٽم ڊسڪ کي هٽائڻ

او ايس ڊسڪ هڪ بلب آهي، جنهن لاءِ ان کي ختم ڪرڻ جو حڪم آهي Remove-AzStorageBlob - پر ان تي عمل ڪرڻ کان اڳ، توھان کي ان جي پيٽرولن لاءِ گھربل قدر مقرر ڪرڻ جي ضرورت پوندي. هن کي ڪرڻ لاء، خاص طور تي، توهان کي سسٽم ڊسڪ تي مشتمل اسٽوريج ڪنٽينر جو نالو حاصل ڪرڻ جي ضرورت آهي، ۽ پوء ان کي لاڳاپيل اسٽوريج اڪائونٽ سان گڏ هن حڪم ڏانهن موڪليو.

$osDiskUri = $vm.StorageProfile.OSDisk.Vhd.Uri
$osDiskContainerName = $osDiskUri.Split('/')[-2]
$osDiskStorageAcct = Get-AzStorageAccount | where { $_.StorageAccountName -eq $osDiskUri.Split('/')[2].Split('.')[0] }
$osDiskStorageAcct | Remove-AzStorageBlob -Container $osDiskContainerName -Blob $osDiskUri.Split('/')[-1]

سسٽم ڊسڪ اسٽيٽس بلب کي هٽائڻ

ائين ڪرڻ لاءِ، جيئن توهان اڳ ۾ ئي اندازو لڳايو آهي، اسان اهو اسٽوريج ڪنٽينر کڻون ٿا جنهن ۾ هي ڊسڪ محفوظ ٿيل آهي، ۽ ان جو مطلب اهو آهي ته آخر ۾ بلب شامل آهي. status، لاڳاپيل پيرا ميٽرز کي حذف ڪرڻ واري حڪم ڏانهن منتقل ڪريو Remove-AzStorageBlob:

$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob

۽ نيٺ، اسان ڊيٽا ڊسڪ کي هٽايو

اسان جي VM اڃا تائين ڊيٽا سان گڏ ڊسڪ ٿي سگهي ٿي جيڪا ان سان ڳنڍيل هئي. جيڪڏهن اهي گهربل نه آهن، اسان انهن کي پڻ ختم ڪنداسين. اچو ته پهرين ان کي پارس ڪريون StorageProfile اسان جي VM ۽ ملڪيت ڳوليو Uri. جيڪڏهن ڪيترائي ڊسڪ آهن، اسان هڪ چڪر کي ترتيب ڏيون ٿا URI. هر يو آر آءِ لاءِ، اسان استعمال ڪندي لاڳاپيل اسٽوريج اڪائونٽ ڳولينداسين Get-AzStorageAccount. پوءِ اسٽوريج URI کي پارس ڪريو گھربل بلب جو نالو ڪڍڻ لاءِ ۽ ان کي پاس ڪريو ڊليٽ ڪمانڊ ڏانھن Remove-AzStorageBlob اسٽوريج اڪائونٽ سان گڏ. اھو اھو آھي جيڪو اھو ڪوڊ ۾ نظر ايندو:

if ($vm.DataDiskNames.Count -gt 0) {
    foreach ($uri in $vm.StorageProfile.DataDisks.Vhd.Uri) {
        $dataDiskStorageAcct = Get-AzStorageAccount -Name $uri.Split('/')[2].Split('.')[0]
        $dataDiskStorageAcct | Remove-AzStorageBlob -Container $uri.Split('/')[-2] -Blob $uri.Split('/')[-1]
    }
}

۽ ھاڻي ”اسان خوشيءَ جي پڄاڻيءَ تي پھتا آھيون! ھاڻي اسان کي انھن سڀني ٽڪرن مان ھڪڙو سڄو گڏ ڪرڻ جي ضرورت آھي. مهربان ليکڪ ايڊم برٽرام صارفين کي اڌ رستي سان مليو ۽ اهو پاڻ ڪيو. هتي فائنل اسڪرپٽ جي هڪ لنڪ آهي جنهن کي سڏيو ويندو آهي هٽايو-AzrVirtualMachine.ps1:

GitHub

مون کي اميد آهي ته توهان اهي عملي صلاحون توهان جي ڪوشش، وقت، ۽ پئسا بچائڻ ۾ مددگار ثابت ٿينديون جڏهن Azure VMs سان ڪم ڪندي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو