PowerShellን በመጠቀም Azure VMን ይቀይሩ እና ያስወግዱ

PowerShellን በመጠቀም መሐንዲሶች እና የአይቲ አስተዳዳሪዎች በግቢው ውስጥ ብቻ ሳይሆን ከደመና መሰረተ ልማቶች ጋር በተለይም ከ Azure ጋር ሲሰሩ የተለያዩ ስራዎችን በተሳካ ሁኔታ በራስ ሰር ያዘጋጃሉ። በአንዳንድ አጋጣሚዎች በPowerShell በኩል መስራት በ Azure portal በኩል ከመሥራት የበለጠ ምቹ እና ፈጣን ነው። ለተሻጋሪ ባህሪው ምስጋና ይግባውና PowerShell በማንኛውም ስርዓተ ክወና ላይ ጥቅም ላይ ሊውል ይችላል።

ኡቡንቱ፣ ቀይ ኮፍያ ወይም ዊንዶውስ እያሄዱም ይሁኑ PowerShell የደመና ሃብቶችዎን እንዲቆጣጠሩ ያግዝዎታል። ሞጁሉን በመጠቀም Azure PowerShellለምሳሌ, ማንኛውንም የቨርቹዋል ማሽኖች ባህሪያት ማዘጋጀት ይችላሉ.

በዚህ ጽሑፍ ውስጥ፣ በአዙሬ ደመና ውስጥ ያለውን ቪኤም መጠን ለመቀየር፣ እንዲሁም VMን እና ተያያዥ ነገሮችን ለመሰረዝ PowerShellን እንዴት መጠቀም እንደሚችሉ እንመለከታለን።

PowerShellን በመጠቀም Azure VMን ይቀይሩ እና ያስወግዱ

አስፈላጊ! ለስራ ለመዘጋጀት እጅዎን በሳኒታይዘር ማጽዳትን አይርሱ፡-

  • ሞጁል ያስፈልግዎታል Azure PowerShell ሞዱል - በትእዛዙ ከፓወር ሼል ጋለሪ ማውረድ ይችላል። Install-Module Az.
  • ትዕዛዙን በማስኬድ ቨርቹዋል ማሽኑ በሚሰራበት በ Azure ደመና ውስጥ ማረጋገጥ ያስፈልግዎታል Connect-AzAccount.

በመጀመሪያ የ Azure VMን መጠን የሚቀይር ስክሪፕት እንፍጠር። VS ኮድን እንክፈትና አዲስ የPowerShell ስክሪፕት እናስቀምጥ መጠን ቀይር-AzVirtualMachine.ps1 - ምሳሌው እየገፋ ሲሄድ ኮድ ቁርጥራጮች እንጨምራለን.

ያሉትን ቪኤም መጠኖች እንጠይቃለን።

የቪኤም መጠኑን ከመቀየርዎ በፊት በ Azure ደመና ውስጥ ለምናባዊ ማሽኖች ተቀባይነት ያላቸው መጠኖች ምን እንደሆኑ ማወቅ ያስፈልግዎታል። ይህንን ለማድረግ ትዕዛዙን ማስኬድ ያስፈልግዎታል Get-AzVMSize.

ስለዚህ ለምናባዊው ማሽን devvm01 ከመርጃ ቡድን dev ሁሉንም ተቀባይነት ያላቸውን መጠኖች እንጠይቃለን-

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(በተጨባጭ ችግሮች, በእርግጥ, በምትኩ ResourceGroupName=dev и VMName=devvm01 ለእነዚህ መመዘኛዎች የራስዎን ዋጋዎች ይግለጹ.)

ትዕዛዙ እንደዚህ ያለ ነገር ይመልሳል

PowerShellን በመጠቀም Azure VMን ይቀይሩ እና ያስወግዱ

እነዚህ ሁሉ ለአንድ ምናባዊ ማሽን ሊዘጋጁ የሚችሉ የመጠን አማራጮች ናቸው።

የመኪናውን መጠን እንቀይር

ለምሳሌ፣ ወደ አዲስ መጠን እንቀይራለን መደበኛ_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 - ያ ማለት ሁሉም ነገር በቅደም ተከተል ነው, የመኪናው መጠን ተለውጧል. ድርድር በመጠቀም ብዙ ቪኤምዎችን በአንድ ጊዜ በመቀየር የበለጠ መሄድ እና ስኬትዎን ማጎልበት ይችላሉ።

በ Azure ውስጥ ቪኤም ስለመሰረዝስ?

በመሰረዝ, ሁሉም ነገር የሚመስለውን ያህል ቀላል እና ቀላል አይደለም. ከሁሉም በኋላ, ከዚህ ማሽን ጋር የተያያዙ በርካታ ሀብቶችን ማስወገድ አስፈላጊ ነው, የሚከተሉትን ጨምሮ:

  • የቡት መመርመሪያ ማጠራቀሚያ መያዣዎች
  • የአውታረ መረብ በይነገጽ።
  • ይፋዊ አይፒ አድራሻዎች
  • ሁኔታው የተከማቸበት የስርዓት ዲስክ እና ብሎብ
  • የውሂብ ዲስኮች

ስለዚህ, ተግባር እንፈጥራለን እና እንጠራዋለን Remove-AzrVirtualMachine - እና Azure VMን ብቻ ሳይሆን ከላይ ያሉትን ሁሉ ይሰርዛል።

መደበኛውን መንገድ እንሄዳለን እና መጀመሪያ ትዕዛዙን ተጠቅመን እቃችንን (VM) እናገኛለን Get-AzVm. ለምሳሌ, መኪና ይሁን WINSRV19 ከመርጃ ቡድን MyTestVMs.

ይህንን ነገር ከሁሉም ንብረቶቹ ጋር ወደ ተለዋዋጭ እናስቀምጠው $vm:

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

መያዣውን በቡት ዲያግኖስቲክ ፋይሎች ማስወገድ

በ Azure ውስጥ ቪኤም ሲፈጥሩ ተጠቃሚው የቡት ዲያግኖስቲክስ (ቡት ዲያግኖስቲክስ ኮንቴይነር) ለማከማቸት መያዣ እንዲፈጥር ይጠየቃል, ስለዚህ በማስነሳት ላይ ችግሮች ካሉ, ለመላ ፍለጋ የሚዞር ነገር አለ. ነገር ግን፣ ቪኤም ሲሰረዝ፣ ይህ መያዣ አሁን ዓላማ የሌለው ሕልውናውን እንዲቀጥል ተትቷል። ይህንን ሁኔታ እናስተካክለው.

  1. በመጀመሪያ ፣ ይህ መያዣ በየትኛው የማከማቻ መለያ ውስጥ እንዳለ እንወቅ - ለዚህም ንብረቱን መፈለግ አለብን storageUri በእቃው አንጀት ውስጥ DiagnosticsProfile የእኛ ቪኤም. ለዚህም ይህንን መደበኛ አገላለጽ እጠቀማለሁ-
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. አሁን የእቃውን ስም ማወቅ ያስፈልግዎታል, ለዚህም ትዕዛዙን በመጠቀም የ VM መታወቂያውን ማግኘት ያስፈልግዎታል 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 ለተዛማጅ ነገር. ደህና ፣ ትዕዛዙን እናሂድ Remove-AzVm:

$null = $vm | Remove-AzVM -Force

የአውታረ መረብ በይነገጽ እና ይፋዊ አይፒ አድራሻን በማስወገድ ላይ

የእኛ ቪኤም አሁንም አንድ (ወይም እንዲያውም በርካታ) የአውታረ መረብ በይነገጾች (NICs) አለው - እነሱን እንደ አላስፈላጊ ለማስወገድ፣ በንብረቱ ውስጥ እንሂድ NetworkInterfaces የእኛ ቪኤም ነገር እና NIC ን በትእዛዙ ይሰርዙት። Remove-AzNetworkInterface. ከአንድ በላይ የአውታረ መረብ በይነገጽ ካለ፣ loop እንጠቀማለን። በተመሳሳይ ጊዜ፣ ለእያንዳንዱ NIC ንብረቱን እንፈትሻለን። IpConfiguration በይነገጹ ይፋዊ አይፒ አድራሻ እንዳለው ለማወቅ። አንዱ ከተገኘ በትእዛዙ እናስወግደዋለን Remove-AzPublicIpAddress.

የእንደዚህ አይነት ኮድ ምሳሌ እዚህ አለ፣ ሁሉንም NIC በ loop ውስጥ የምንመለከትበት፣ የምንሰርዛቸው እና ይፋዊ አይፒ ካለ ያረጋግጡ። ካለ, ከዚያም ንብረቱን ይተንትኑ PublicIpAddress, የተዛማጁን መገልገያ ስም በመታወቂያ ይፈልጉ እና ይሰርዙት:


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]

የስርዓት ዲስክ ሁኔታ Blobን በማስወገድ ላይ

ይህንን ለማድረግ ፣ ምናልባት እርስዎ አስቀድመው እንደገመቱት ፣ ይህ ዲስክ የተከማቸበትን የማከማቻ መያዣ እንወስዳለን ፣ እና በመጨረሻው ላይ ያለው እብጠት ይይዛል። status, ተዛማጅ መለኪያዎችን ወደ ሰርዝ ትዕዛዝ ያስተላልፉ Remove-AzStorageBlob:

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

እና በመጨረሻም የውሂብ ዲስኮችን እናስወግዳለን

የእኛ ቪኤም አሁንም ከሱ ጋር የተያያዘ ውሂብ ያላቸው ዲስኮች ሊኖሩት ይችላል። የማያስፈልጉ ከሆነ እኛም እንሰርዛቸዋለን። አስቀድመን እንተነተን StorageProfile የእኛ ቪኤም እና ንብረቱን ያግኙ Uri. ብዙ ዲስኮች ካሉ, በዚህ መሠረት ዑደት እናደራጃለን URI. ለእያንዳንዱ URI፣ ተጓዳኝ የማከማቻ መለያን ተጠቅመን እናገኛለን Get-AzStorageAccount. ከዚያ የተፈለገውን የብሎብ ስም ለማውጣት የማከማቻ ዩአርአይን ይተነተን እና ወደ ሰርዝ ትዕዛዝ ያስተላልፉ 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:

የፊልሙ

ከ Azure VMs ጋር ሲሰሩ ጉልበትን፣ ጊዜን እና ገንዘብን ለመቆጠብ እነዚህ ተግባራዊ ምክሮች አጋዥ ሆነው እንደሚያገኙ ተስፋ አደርጋለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ