PowerShell ã䜿çšãããšããšã³ãžãã¢ã IT 管çè ã¯ããªã³ãã¬ãã¹ã ãã§ãªããã¯ã©ãŠã ã€ã³ãã©ã¹ãã©ã¯ãã£ãç¹ã« Azure ã䜿çšããå Žåã§ããããŸããŸãªã¿ã¹ã¯ãèªååã§ããŸãã å Žåã«ãã£ãŠã¯ãPowerShell ã䜿çšããŠäœæ¥ããæ¹ããAzure portal ã䜿çšããŠäœæ¥ãããããã¯ããã«äŸ¿å©ã§é«éã§ãã PowerShell ã¯ã¯ãã¹ãã©ãããã©ãŒã ã§ãããããã©ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ã䜿çšã§ããŸãã
UbuntuãRed HatãWindows ã®ããããå®è¡ããŠããå Žåã§ããPowerShell ã¯ã¯ã©ãŠã ãªãœãŒã¹ã®å¶åŸ¡ã«åœ¹ç«ã¡ãŸãã ã¢ãžã¥ãŒã«ã®äœ¿çš
ãã®èšäºã§ã¯ãPowerShell ã䜿çšã㊠Azure ã¯ã©ãŠãå ã® VM ã®ãµã€ãºãå€æŽããVM ãšãã®é¢é£ãªããžã§ã¯ããåé€ããæ¹æ³ã説æããŸãã
éèŠïŒ äœæ¥ã®æºåãšããŠãæ¶æ¯å€ã§æãæãããšãå¿ããªãã§ãã ããã
- ã¢ãžã¥ãŒã«ãå¿
èŠã«ãªããŸã Azure PowerShell ã¢ãžã¥ãŒã« - ã³ãã³ãã䜿çšã㊠PowerShell ã®ã£ã©ãªãŒããããŠã³ããŒãã§ããŸãã
Install-Module Az
. - ã³ãã³ããå®è¡ããŠãä»®æ³ãã·ã³ãå®è¡ãããŠãã Azure ã¯ã©ãŠãã§èªèšŒããå¿
èŠããããŸãã
Connect-AzAccount
.
ãŸããAzure VM ã®ãµã€ãºãå€æŽããã¹ã¯ãªãããäœæããŸãããã VS Code ãéããŠããšããååã®æ°ãã PowerShell ã¹ã¯ãªãããä¿åããŸãããã ãµã€ãºå€æŽ-AzVirtualMachine.ps1 â äŸã®é²è¡ã«åãããŠã³ãŒããè¿œå ããŠãããŸãã
å©çšå¯èœãª VM ãµã€ãºããªã¯ãšã¹ãããŸã
VM ãµã€ãºãå€æŽããåã«ãAzure ã¯ã©ãŠãå
ã®ä»®æ³ãã·ã³ã®èš±å®¹å¯èœãªãµã€ãºã確èªããå¿
èŠããããŸãã ãããè¡ãã«ã¯ã次ã®ã³ãã³ããå®è¡ããå¿
èŠããããŸã Get-AzVMSize
.
ãããã£ãŠãä»®æ³ãã·ã³ã®å Žå㯠devvm01 ãªãœãŒã¹ã°ã«ãŒããã devã® å¯èœãªãã¹ãŠã®èš±å®¹å¯èœãªãµã€ãºããªã¯ãšã¹ãããŸãã
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(å®éã®åé¡ã§ã¯ããã¡ããã ãªãœãŒã¹ã°ã«ãŒãå=dev О VMå=devvm01 ãããã®ãã©ã¡ãŒã¿ã«ã¯ç¬èªã®å€ãæå®ããŸãã)
ã³ãã³ãã¯æ¬¡ã®ãããªãã®ãè¿ããŸãã
ãããã¯ãã¹ãŠãç¹å®ã®ä»®æ³ãã·ã³ã«èšå®ã§ãããµã€ãº ãªãã·ã§ã³ã§ãã
è»ã®ãµã€ãºãå€æŽããŠã¿ãŸããã
ããšãã°ãæ°ãããµã€ãºã«ãªãµã€ãºããŸã æšæº_B1ls - 圌ã¯äžã®ãªã¹ã㧠XNUMX äœã§ãã (å®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¡ãããå¿ èŠãªãµã€ãºãéžæããŸãã)
- æåã«ã³ãã³ãã䜿çšãã
Get-AzVM
ãªããžã§ã¯ã (ä»®æ³ãã·ã³) ã«é¢ããæ å ±ãå€æ°ã«æ ŒçŽããããšã§ååŸããŸãã$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- 次ã«ããã®ãªããžã§ã¯ãããããããã£ãååŸããŸã
.HardwareProfile.VmSize
ãããŠãå¿ èŠãªæ°ããå€ãèšå®ããŸãã$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- ããã§ãVM æŽæ°ã³ãã³ããå®è¡ããã ãã§ãã
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- ãã¹ãŠãããŸããã£ãããšã確èªããŸãããããè¡ãããã«ããªããžã§ã¯ãã«é¢ããæ
å ±ãå床ãªã¯ãšã¹ãããããããã£ã確èªããŸãã
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
ãããèŠãã æšæº_B1ls - ã€ãŸãããã¹ãŠãé 調ã§ãè»ã®ãµã€ãºãå€æŽãããŸããã ã¢ã¬ã€ã䜿çšããŠè€æ°ã® VM ã®ãµã€ãºãäžåºŠã«å€æŽãããšãããã«åé²ããŠæåãããã«é²ããããšãã§ããŸãã
Azure 㧠VM ãåé€ããå Žåã¯ã©ãããã°ããã§ãããã?
åé€ã®å Žåããã¹ãŠãæã£ãã»ã©åçŽã§åçŽãªããã§ã¯ãããŸããã çµå±ã®ãšããããã®ãã·ã³ã«é¢é£ä»ããããŠãã次ã®ãããªå€ãã®ãªãœãŒã¹ãåé€ããå¿ èŠããããŸãã
- ããŒã蚺æã¹ãã¬ãŒãžã³ã³ãã
- ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹
- ãããªãã¯IPã¢ãã¬ã¹
- ã·ã¹ãã ãã£ã¹ã¯ãšãã®ã¹ããŒã¿ã¹ãä¿åããã BLOB
- ããŒã¿ãã£ã¹ã¯
ãããã£ãŠãé¢æ°ãäœæããŠåŒã³åºããŸã Remove-AzrVirtualMachine
- Azure VM ã ãã§ãªããäžèšã®ãã¹ãŠãåé€ãããŸãã
æšæºçãªæ¹æ³ã§ããŸã次ã®ã³ãã³ãã䜿çšããŠãªããžã§ã¯ã (VM) ãååŸããŸãã Get-AzVm
ã ããšãã°ãè»ã ãšããŸã WINSRV19 ãªãœãŒã¹ã°ã«ãŒããã MyTestVMs.
ãã®ãªããžã§ã¯ãããã®ãã¹ãŠã®ããããã£ãšãšãã«å€æ°ã«ä¿åããŸããã $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
ããŒã蚺æãã¡ã€ã«ãå«ãã³ã³ãããŒã®åé€
Azure 㧠VM ãäœæãããšãããŠãŒã¶ãŒã¯ããŒã蚺æãä¿åããããã®ã³ã³ãã㌠(ããŒã蚺æã³ã³ãããŒ) ãäœæããããšãæ±ããããŸããããã«ãããããŒãã«åé¡ãçºçããå Žåã«ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãè¡ãããšãã§ããŸãã ãã ããVM ãåé€ããããšããã®ã³ã³ãããŒã¯ç®çã®ãªãååšãç¶ç¶ããããšã«ãªããŸãã ãã®ç¶æ³ã解決ããŸãããã
- ãŸãããã®ã³ã³ãããŒãã©ã®ã¹ãã¬ãŒãž ã¢ã«ãŠã³ãã«å±ããŠãããã調ã¹ãŸãããããã®ããã«ã¯ãããããã£ãèŠã€ããå¿
èŠããããŸãã
storageUri
ãªããžã§ã¯ãã®è žåDiagnosticsProfile
ç§ãã¡ã®VMã ãã®ããã«ãç§ã¯æ¬¡ã®æ£èŠè¡šçŸã䜿çšããŸãã$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- 次ã«ãã³ã³ããã®ååã確èªããå¿
èŠããããŸãããã®ããã«ã¯ã次ã®ã³ãã³ãã䜿çšã㊠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)
- 次ã«ãã³ã³ãããŒãå±ãããªãœãŒã¹ ã°ã«ãŒãã®ååãååŸããŸãã
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- ããã§ãã³ãã³ãã䜿çšããŠã³ã³ãããåé€ããããã«å¿
èŠãªãã®ããã¹ãŠæããŸããã
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 ã«ã¯ãŸã XNUMX 〠(ãŸãã¯è€æ°) ã®ãããã¯ãŒã¯ ã€ã³ã¿ãŒãã§ã€ã¹ (NIC) ããããŸããããããäžèŠãªãã®ãšããŠåé€ããã«ã¯ãããããã£ã調ã¹ãŠã¿ãŸãããã NetworkInterfaces
VM ãªããžã§ã¯ããåé€ãã次ã®ã³ãã³ã㧠NIC ãåé€ããŸãã Remove-AzNetworkInterface
ã è€æ°ã®ãããã¯ãŒã¯ ã€ã³ã¿ãŒãã§ã€ã¹ãããå Žåã¯ãã«ãŒãã䜿çšããŸãã åæã«ãNICããšã«ããããã£ã確èªããŸãã IpConfiguration
ã€ã³ã¿ãŒãã§ã€ã¹ã«ãããªã㯠IP ã¢ãã¬ã¹ããããã©ããã確èªããŸãã èŠã€ãã£ãå Žåã¯ãã³ãã³ãã§åé€ããŸãã Remove-AzPublicIpAddress
.
以äžã¯ãŸãã«ãã®ãããªã³ãŒãã®äŸã§ããã«ãŒãå
ã®ãã¹ãŠã® NIC ã調ã¹ãŠåé€ãããããªã㯠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
}
}
}
ã·ã¹ãã ãã£ã¹ã¯ã®åãå€ã
OS ãã£ã¹ã¯ã¯ BLOB ãªã®ã§ããããåé€ããã³ãã³ãããããŸãã 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 ã®åé€
ãããè¡ãã«ã¯ããããããã§ã«ãæ³åã®ãšããããã®ãã£ã¹ã¯ãä¿åãããŠããã¹ãã¬ãŒãž ã³ã³ãããŒãååŸããæåŸã® BLOB ã«æ¬¡ã®å
容ãå«ãŸããŠããããšãæå³ããŸãã status
ã察å¿ãããã©ã¡ãŒã¿ãåé€ã³ãã³ãã«æž¡ããŸã Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
æåŸã«ãããŒã¿ ãã£ã¹ã¯ãåé€ããŸã
VM ã«ã¯ãããŒã¿ãæ¥ç¶ããããã£ã¹ã¯ããŸã ååšããå¯èœæ§ããããŸãã äžèŠãªå Žåã¯ãã¡ããåé€ãããŠããã ããŸãã ãŸãã¯è§£æããŠã¿ãŸããã StorageProfile
VM ãæ€çŽ¢ããŠããããã£ãèŠã€ããŸã Uri
ã è€æ°ã®ãã£ã¹ã¯ãããå Žåã¯ã次ã«åŸã£ãŠãµã€ã¯ã«ãç·šæããŸãã URI
ã å URI ã«ã€ããŠã次ã䜿çšããŠå¯Ÿå¿ããã¹ãã¬ãŒãž ã¢ã«ãŠã³ããèŠã€ããŸãã Get-AzStorageAccount
ã 次ã«ãã¹ãã¬ãŒãž URI ã解æããŠç®çã® BLOB åãæœåºãããããåé€ã³ãã³ãã«æž¡ããŸãã 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 VM ã䜿çšããéã®åŽåãæéãã³ã¹ãã®ç¯çŽã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
åºæïŒ habr.com