Hoʻololi a hoʻopau i nā VM Azure me ka hoʻohana ʻana i PowerShell

Me ka hoʻohana ʻana iā PowerShell, nā mea ʻenekinia a me nā luna hoʻokele IT e hoʻomaʻamaʻa i nā hana like ʻole i ka hana ʻana ʻaʻole wale me ka hale, akā me nā ʻōnaehana kapuaʻi, ʻoiai me Azure. I kekahi mau hihia, ʻoi aku ka maʻalahi o ka hana ʻana ma PowerShell a ʻoi aku ka wikiwiki ma mua o ka hana ʻana ma o ka Azure portal. Mahalo i kona ʻano cross-platform, hiki ke hoʻohana ʻia ʻo PowerShell ma kekahi ʻōnaehana hana.

Inā ʻoe e holo ana i ka Ubuntu, Red Hat, a i ʻole Windows, hiki i ka PowerShell ke kōkua iā ʻoe e hoʻomalu i kāu kumuwaiwai ao. Ke hoʻohana nei i ka module ʻO Azure PowerShell, no ka laʻana, hiki iā ʻoe ke hoʻonohonoho i nā waiwai o nā mīkini virtual.

Ma kēia ʻatikala, e nānā mākou pehea e hiki ai iā ʻoe ke hoʻohana i ka PowerShell e hoʻololi i kahi VM i ke ao Azure, a me ka holoi ʻana i kahi VM a me kāna mau mea pili.

Hoʻololi a hoʻopau i nā VM Azure me ka hoʻohana ʻana i PowerShell

Mea nui! Mai poina e holoi i kou mau lima me ka sanitizer e hoʻomākaukau ai no ka hana:

  • Pono ʻoe i kahi module ʻO Azure PowerShell Module - hiki ke hoʻoiho ʻia mai PowerShell Gallery me ke kauoha Install-Module Az.
  • Pono ʻoe e hōʻoia i ke ao Azure kahi e holo ai ka mīkini virtual ma ka holo ʻana i ke kauoha Connect-AzAccount.

ʻO ka mea mua, e hana mākou i kahi palapala e hoʻololi i kahi Azure VM. E wehe kākou i ka VS Code a mālama i kahi palapala PowerShell hou i kapa ʻia Hoʻololi i ka nui-AzVirtualMachine.ps1 - e hoʻohui mākou i nā ʻāpana code iā ia e like me ka holomua o ka laʻana.

Noi mākou i nā nui VM i loaʻa

Ma mua o kou hoʻololi ʻana i ka nui o ka VM, pono ʻoe e ʻike i nā nui e ʻae ʻia no nā mīkini virtual i ke ao Azure. No ka hana ʻana i kēia pono ʻoe e holo i ke kauoha Get-AzVMSize.

No laila no ka mīkini virtual devvm01 mai ka hui waiwai make Noi mākou i nā nui ʻae ʻia a pau:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Ma nā pilikia maoli, ʻoiaʻiʻo, ma kahi o ResourceGroupName=dev и VMName=devvm01 e kuhikuhi ʻoe i kāu mau waiwai ponoʻī no kēia mau ʻāpana.)

E hoʻihoʻi ke kauoha e like me kēia:

Hoʻololi a hoʻopau i nā VM Azure me ka hoʻohana ʻana i PowerShell

ʻO kēia nā koho nui hiki ke hoʻonohonoho ʻia no kahi mīkini virtual i hāʻawi ʻia.

E hoʻololi hou i ke kaʻa

No ka laʻana, e hoʻololi mākou i ka nui hou Kūlana_B1ls - aia ʻo ia ma kahi mua ma ka papa inoa ma luna. (Ma nā noi ola maoli, ʻoiaʻiʻo, koho ʻoe i ka nui āu e makemake ai.)

  1. E hoʻohana mua i ke kauoha Get-AzVM loaʻa iā mākou ka ʻike e pili ana i kā mākou mea (mekini virtual) ma ka mālama ʻana iā ia i kahi loli $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. A laila lawe mākou i ka waiwai mai kēia mea .HardwareProfile.VmSize a hoʻonoho i ka waiwai hou i makemake ʻia:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. A i kēia manawa, hoʻokō wale mākou i ke kauoha VM update - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Hoʻomaopopo mākou ua holo pono nā mea a pau - no ka hana ʻana i kēia, noi hou mākou i ka ʻike e pili ana i kā mākou mea a nānā i ka waiwai $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Inā mākou e ʻike ma laila Kūlana_B1ls - 'o ia ho'i ua pololei nā mea a pau, ua ho'ololi 'ia ka nui o ke ka'a. Hiki iā ʻoe ke hele hou a kūkulu i kāu kūleʻa ma ka hoʻololi ʻana i kekahi mau VM i ka manawa hoʻokahi me ka hoʻohana ʻana i kahi array.

Pehea e hoʻopau ai i kahi VM ma Azure?

Me ka holoi ʻana, ʻaʻole maʻalahi a maʻalahi nā mea āpau e like me ka mea i manaʻo ʻia. Ma hope o nā mea a pau, pono e wehe i kekahi mau kumuwaiwai e pili ana i kēia mīkini, me:

  • Nā pahu hoʻopaʻa diagnostics boot
  • Nā pūnaewele kikowaena
  • Helu IP lehulehu
  • Pūnaehana disk a me ka blob kahi i mālama ʻia ai kona kūlana
  • Nā diski ʻikepili

No laila, e hana mākou i kahi hana a kāhea aku Remove-AzrVirtualMachine - a e holoi ia ʻaʻole wale ʻo Azure VM, akā ʻo nā mea a pau i luna.

Hele mākou i ke ala maʻamau a loaʻa mua i kā mākou mea (VM) me ka hoʻohana ʻana i ke kauoha Get-AzVm. Eia kekahi laʻana, e lilo ia i kaʻa WINSRV19 mai ka hui waiwai MyTestVMs.

E mālama kākou i kēia mea me kona mau waiwai a pau i loko o ka loli $vm:

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

Ke wehe nei i ka pahu me nā faila diagnostic boot

I ka hana ʻana i kahi VM ma Azure, noi ʻia ka mea hoʻohana e hana i kahi pahu no ka mālama ʻana i nā diagnostics boot (boot diagnostics container), no laila inā he pilikia me ka booting, aia kekahi mea e huli ai no ka hoʻoponopono pilikia. Eia naʻe, ke holoi ʻia ka VM, waiho ʻia kēia pahu e hoʻomau i kona ola kumu ʻole. E hoʻoponopono kākou i kēia kūlana.

  1. ʻO ka mea mua, e ʻike kākou i ka waihona waihona no kēia pahu - no kēia pono mākou e ʻimi i ka waiwai storageUri i loko o ka ʻōpū o ka mea DiagnosticsProfile ko makou VM. No kēia, hoʻohana wau i kēia ʻōlelo maʻamau:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. I kēia manawa pono ʻoe e ʻike i ka inoa o ka pahu, a no kēia pono ʻoe e kiʻi i ka VM ID me ka hoʻohana ʻana i ke kauoha 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. A laila, loaʻa iā mākou ka inoa o ka pūʻulu waiwai nona ka ipu:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. A i kēia manawa, loaʻa iā mākou nā mea a pau e pono ai mākou e holoi i ka pahu me ke kauoha Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Ke wehe nei i ka VM

I kēia manawa, e holoi mākou i ka mīkini virtual ponoʻī, ʻoiai ua hana mākou i kahi loli $vm no ka mea pili. ʻAe, e holo kāua i ke kauoha Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Ke wehe nei i ke kikowaena pūnaewele a me ka helu IP lehulehu

Loaʻa i kā mākou VM hoʻokahi (a i ʻole kekahi) mau kikowaena pūnaewele (NIC) - no ka wehe ʻana iā lākou me he mea pono ʻole, e hele kāua i ka waiwai. NetworkInterfaces kā mākou mea VM a holoi i ka NIC me ke kauoha Remove-AzNetworkInterface. Inā ʻoi aku ma mua o hoʻokahi kikowaena pūnaewele, hoʻohana mākou i kahi loop. I ka manawa like, no kēlā me kēia NIC e nānā mākou i ka waiwai IpConfiguration e hoʻoholo inā loaʻa i ka interface kahi IP IP lehulehu. Inā loaʻa kekahi, e wehe mākou me ke kauoha Remove-AzPublicIpAddress.

Eia kekahi laʻana o ia code, kahi e nānā ai mākou i nā NIC a pau i loko o kahi loop, holoi iā lākou, a nānā inā he IP lehulehu. Inā loaʻa, e hoʻokaʻawale i ka waiwai PublicIpAddress, e huli i ka inoa o ka punawai e pili ana ma ka ID a holoi ia:


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

Ke wehe nei i ka disk system

He blob ka OS disk, nona ke kauoha e holoi Remove-AzStorageBlob - akā ma mua o ka hoʻokō ʻana, pono ʻoe e hoʻonohonoho i nā waiwai i koi ʻia no kāna mau ʻāpana. No ka hana ʻana i kēia, pono ʻoe e kiʻi i ka inoa o ka pahu waihona i loaʻa i ka disk system, a laila e hāʻawi iā ia i kēia kauoha me ka waihona waihona e pili ana.

$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]

Ke wehe nei i ka System Disk Status Blob

No ka hana ʻana i kēia, e like me kāu i manaʻo mua ai, lawe mākou i ka pahu waihona kahi i mālama ʻia ai kēia disk, a, e hōʻike ana aia ka blob ma ka hopena. status, hāʻawi i nā ʻāpana pili i ke kauoha holoi Remove-AzStorageBlob:

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

A ʻo ka hope, wehe mākou i nā disks data

Hiki i kā mākou VM ke loaʻa nā disks me nā ʻikepili i hoʻopili ʻia me ia. Inā ʻaʻole pono lākou, e holoi pū mākou iā lākou. E wehewehe mua kākou StorageProfile kā mākou VM a loaʻa ka waiwai Uri. Inā nui nā disks, hoʻonohonoho mākou i kahi pōʻai e like me URI. No kēlā me kēia URI, e ʻike mākou i ka waihona waihona e hoʻohana ai Get-AzStorageAccount. A laila e hoʻokaʻawale i ka waihona URI e wehe i ka inoa blob i makemake ʻia a hāʻawi iā ia i ke kauoha holoi Remove-AzStorageBlob me kahi waihona waihona. ʻO kēia ke ʻano o ke code:

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

A i kēia manawa "ua hiki mākou i ka hopena hauʻoli!" I kēia manawa pono mākou e hōʻuluʻulu i kahi hoʻokahi mai kēia mau ʻāpana āpau. Ua hui ka mea kākau ʻoluʻolu ʻo Adam Bertram i nā mea hoʻohana i ka hapalua a hana iā ia iho. Eia kahi loulou i ka palapala hope i kapa ʻia Wehe-AzrVirtualMachine.ps1:

GitHub

Manaʻo wau e ʻike ʻoe i kēia mau ʻōlelo aʻoaʻo kōkua i ka mālama ʻana i kāu hoʻoikaika, manawa, a me ke kālā ke hana pū me Azure VMs.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka