1. はじめに
1-1 ご挨拶
初めまして、井村と申します。
久しぶりにPowerShellで何かしたくmslearnを漁り、スクリプトを作成しようと決めました。「powershell」をキーワードとして、チェックボックスで「初級」、「ラーニングパス」を選ぶと1つヒットしました。とりあえず、ほぼこの知識だけで何か作成しようと考えた結果、件名の通りとなりました。
1-2 対象読者
- Azureに興味がある
- PowerShellに興味がる
1-3 ローカル環境について
私はWindows端末に以下をインストールました。
2. スクリプトの中身
2-1 作成したスクリプト
今回作成したスクリプトは以下になります。
vm.ps1
1 Write-Host "What do you want to do? `r`n 1. Show virtual machines. `r`n 2. Create virtual machines. `r`n 3. Delete virtual machine."
2
3 $action = Read-Host -Prompt "Please select number"
4
5 # Login Azure
6 if (($action -eq 1) -or ($action -eq 2) -or ($action -eq 3)) {
7 Connect-AzAccount
8 } else {
9 Write-Host "Good bye"
10 exit
11 }
12
13 # 1. Show virtual machines.
14 if ($action -eq 1)
15 {
16 # Verify the virtual machines
17 Get-AzVM | Format-Table
18
19 # 2. Create virtual machines.
20 } elseif ($action -eq 2) {
21 Write-Host "Please select resource group. `r`n 1. Create new resource group. `r`n 2. Select existing resource group."
22
23 # Select resource group
24 $ResourceGroupName = Read-Host -Prompt "Please select number"
25 if ($ResourceGroupName -eq 1){
26 $ResourceGroupName = Read-Host -Prompt "Please new resource group name"
27 New-AzResourceGroup -Name $ResourceGroupName -Location "japaneast"
28
29 } elseif ($ResourceGroupName -eq 2) {
30 Get-AzResourceGroup | Format-Table
31 $ResourceGroupName = Read-Host -Prompt "Select ResourceGroupName"
32
33 } else {
34 Write-Output "Good bye"
35 exit
36 }
37
38 # Create virtual machine.
39 Write-Host "Please select OS. `r`n 1. Windows `r`n 2. Linux"
40
41 $OS = Read-Host -Prompt "Please select number"
42 $VmNamePre = Read-Host -Prompt "Please Virtual machine name"
43
44 Write-Host "How many virtual machines do you want to create?(
1 or 2 or 3)"
45 $HowMany = Read-Host -Prompt "Please select number"
46
47 if (($HowMany -eq 1) -or ($HowMany -eq 2) -or ($HowMany -eq 3)) {
48 if ($OS -eq 1){
49 $cred = Get-Credential
50 For ($i = 1; $i -le $HowMany; $i++)
51 {
52 $VmName = $VmNamePre + $i
53 New-AzVm `
54 -ResourceGroupName $ResourceGroupName `
55 -Name $VmName `
56 -Location "japaneast" `
57 -Image "MicrosoftWindowsServer:WindowsServer:2022-datacenter-azure-edition-smalldisk:latest" `
58 -Size "Standard_B1s" `
59 -Credential $cred
60 }
61 } elseif ($OS -eq 2) {
62 $cred = Get-Credential
63 For ($i = 1; $i -le $HowMany; $i++)
64 {
65 $VmName = $VmNamePre + $i
66 New-AzVm `
67 -ResourceGroupName $ResourceGroupName `
68 -Name $VmName `
69 -Location "japaneast" `
70 -Image Debian `
71 -size "Standard_B1s" `
72 -Credential $cred
73 }
74 } else {
75 Write-Output "Good bye"
76 exit
77 }
78 } else {
79 Write-Host "Good bye"
80 exit
81 }
82 # 3. Delete virtual machine.
83 } elseif ($action -eq 3) {
84 # Verify the virtual machines
85 Get-AzVM | Format-Table
86
87 Write-Host "Please select the virtual machine you want to delete."
88 $VmName = Read-Host -Prompt "virtual machine name"
89
90 # Get information of the virtual machine.
91 $vm = Get-AzVM -Name $VmName
92
93 # Shut down the virtual machine.
94 Stop-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force
95
96 # Delete the virtual machine.
97 Remove-AzVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Force
98
99 # Delete the network interface.
100 $vm | Remove-AzNetworkInterface -Force
101
102 # Delete the managed OS disks and storage account.
103 Get-AzDisk -ResourceGroupName $vm.ResourceGroupName -DiskName
$vm.StorageProfile.OSDisk.Name | Remove-AzDisk -Force
104
105 # Delete the virtual network
106 Get-AzVirtualNetwork -ResourceGroupName $vm.ResourceGroupName
| Remove-AzVirtualNetwork -Force
107
108 # Delete the network security group
109 Get-AzNetworkSecurityGroup -ResourceGroupName $vm.ResourceGroupName | Remove-AzNetworkSecurityGroup -Force
110
111
112 } else {
113 Write-Host "Good bye"
114 exit
115 }
大枠の解説となります。「Write-Host」コマンドレットはコンソールにコメントを出力します。「Read-Host」コマンドレットはユーザからの入力を情報を取得します。その情報は左辺の変数に渡し利用します。
1行目の「Write-Host」にてユーザが「1.VM一覧情報取得、2.VM作成、3.VM削除」からどの処理を実施したいか確認します。
3行目の「Read-Host」にてユーザが選択した数字を変数「action」に渡します。
6行目のif分にて変数「action」が1、2、3のいずれかの場合、「Connect-AzAccount」を利用してAzureへログインします。1、2、3以外の値を入力した場合はスクリプト終了です。
14行目のifにて変数「action」が1の場合、vm一覧情報取得を取得して、スクリプトが終了します。
20行目のifにて変数「action」が2の場合、VM作成処理に入ります。vmを作成後、スクリプトが終了します。
83行目のifにて変数「action」が3の場合、VM削除処理に入ります。vmを削除後、スクリプトが終了します。
次章で各処理の動作確認します。
3. スクリプトの実行
PowerShellスクリプトの作り方はお気に入りのテキストエディタでファイルを起動します。ファイル名は任意、拡張子を「.ps1」として保存します。スクリプト実行はPowerShellの場合、スクリプトファイルと同じフォルダへ移動後、「.\vm.ps1」と入力しEnterキーで実行できます。
テキストエディタを利用されない方は、PowerShellにて「New-Item hogehoge.ps1」で新規ファイル作成、「code hogehoge.ps1」でファイルを開くことが出来ます。
3-1 VM一覧情報取得
スクリプト起動後、以下作業要求コメントがコンソール上に出力されます。VM一覧情報を取得するため、1を入力します。
What do you want to do?
1. Show virtual machines.
2. Create virtual machines.
3. Delete virtual machine.
Please select number:
認証画面がでますので、必要条件を入力後、Azureへログインします。
ログインが正常終了すると、「Get-AzVM | Format-Table」が実行されます。そして以下のVM一覧情報を取得することができます。現在はVMが2台あることがわかります。
ResourceGroupName Name Location VmSize OsType NIC
----------------- ---- -------- ------ ------ ---
rg-hoge hoge-vm japaneast Standard_B2s Windows …341
rg-sample sample-vm japaneast Standard_DS1_v2 Linux …c-1
3-2 VM作成
VM作成の流れになります。作業要求コメントにて2を入力し、Azureへログインします。その後、新規または既存のリソースグループ内にVMを作成するよ促されます。今回はリソースグループを新規で作成します。1を入力します。リソースグループ名は「rg-imura2」とします。
Please select resource group.
1. Create new resource group.
2. Select existing resource group.
Please select number: 1
Please new resource group name: rg-imura2
既存のリソースグループを選択した場合、現在作成されているリソースグループの一覧がでます。その中からリソースグループを選びます。新規、既存どちらにせよ変数「ResourceGroupName」に値が渡されます。
次にVMのOS、名前およびVMを作成する台数(1~3)を入力します。OSはWindows、名前は「vm-imura」、台数は2台とします。
Please select OS.
1. Windows
2. Linux
Please select number: 1
Please Virtual machine name: vm-imura
How many virtual machines do you want to create?( 1 or 2 or 3)
Please select number: 2
次にVMのログインユーザー名、ログインパスワードを入力します。
PowerShell credential request
Enter your credentials.
User: azureuser
Password for user azureuser: **************
途中経過。進捗バーでます。
Creating Azure resources [100% - ]
Creating Azure resources [18% / ]
2台作成できました。スクリプトとしてはFor文と変数iを回すどの言語にもよくある処理です。
3-3 VM削除
それでは作成したvmを削除します。「vm-imura1」に関連するAzureサービス群を削除します。
作業要求コメントにて3を入力し、Azureへログインします。削除対象となる「vm-imura1」を入力します。
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState Zone
----------------- ---- -------- ------ ------ --- ----------------- ----
rg-hoge hoge-vm japaneast Standard_B2s Windows red-fwtest-vm341 Succeeded
rg-sample sample-vm japaneast Standard_DS1_v2 Linux nic-1 Succeeded
RG-IMURA2 vm-imura1 japaneast Standard_B1s Windows vm-imura1 Succeeded
RG-IMURA2 vm-imura2 japaneast Standard_B1s Windows vm-imura2 Succeeded
Please select the virtual machine you want to delete.
virtual machine name: vm-imura1
削除されました。削除処理は97-109行目で各リソースを削除しています。
スクリプト説明は以上になります。
4. 終わりに
本記事を最後まで読んで頂きましてありがとうございます。
私自身、Azureリソースを作成する際にPowerShellを利用することはあるのですが、スクリプトは初めてでした。考慮したい部分は多々ありますが、深みにはまりそうなのでとりあえず最低限を動くもの作成した感じです。
他にも色々なmslearn教材がありますので精度を高めていきたいです。