Azure PowerShell にて新ポータル (ARM) の VM を自動的に停止・開始・再起動する
こんにちは、石井です。
ひとつ前の投稿の、Azure PowerShell に自動ログインするスクリプトを用いて、VM を自動的にシャットダウン・起動・再起動するといった方法をご紹介します。
まずは、以下の 2 つの内容をご確認ください。
<事前にお読みいただきたい内容>
1. Azure PowerShell で自動ログインする方法は以下でご説明していますので、まずはご一読ください。
Azure PowerShell スクリプトにて認証画面を出さずログインし、実行したい
https://blogs.technet.microsoft.com/jpaztech/2016/02/23/azure-powershell-autologin/
2. Azure VM は、割り当てられた時だけ課金対象になります。不要な時に停止し、必要な時のみ起動することは、使っていない期間「割り当て解除」つまり課金対象外になり、節約になります。
ただし、Windows の VM では、このように割り当て解除を繰り返すと、不要な NIC 情報が OS の中に溜まってしまい、問題につながるケースがあります。以下情報をお読みいただき、回避策を併用することが重要です。 Azure 仮想マシンにおける不要な NIC を削除する方法
https://blogs.technet.microsoft.com/jpaztech/2016/02/18/delete-nic/
(2017 年 2 月 28 日追記) 割り当て解除に伴う不要な NIC の情報の蓄積は、現在は発生しないように機能改善されております。
Azure PowerShell のコマンドレットはそれぞれ、1 つのシンプルなもので OK です。
いずれも、対話型ウィンドウを出さずに強制的に行うオプションを指定しておきました。
- VM を停止
Stop-AzureRmVM -ResourceGroupName "testRG" -Name "myMachine" -Force
- VM の開始
Start-AzureRmVM -ResourceGroupName "testRG" -Name "myMachine"
- VM の再起動
Restart-AzureRmVM -ResourceGroupName "testRG" -Name "myMachine"
- 自動実行スクリプト化するには
PowerShell で作成したスクリプトを .ps1 形式で保存し、Windows のタスク スケジューラーに登録します。
(本 Windows システム上に Azure PowerShell をインストールしておく必要があります。)
<停止する .ps1 ファイルのサンプル>
$secpasswd = ConvertTo-SecureString "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("ABCdefgh-1234-abcd-abcd-abcd1234abcd ", $secpasswd)
Login-AzureRmAccount -ServicePrincipal -Tenant AbCdE-1A2B-1234-1234ABCD1234 -Credential $mycreds
Stop-AzureRmVM -ResourceGroupName "testRG" -Name "myMachine" -Force | Out-File C:\test\output.txt
<開始する .ps1 ファイルのサンプル>
$secpasswd = ConvertTo-SecureString "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("ABCdefgh-1234-abcd-abcd-abcd1234abcd ", $secpasswd)
Login-AzureRmAccount -ServicePrincipal -Tenant AbCdE-1A2B-1234-1234ABCD1234 -Credential $mycreds
Start-AzureRmVM -ResourceGroupName "testRG" -Name "myMachine" | Out-File C:\test\output.txt
最後の Out-File の部分は、記録を残すログ用ですので、無くてもかまいません。
上記を、"C:\test\StopRMVM.ps1" といったパスに保存します。
Windows のタスク スケジューラーに登録する場合、作成するタスクにおいて、[操作] には以下の登録をしておきます。
プログラム: powershell.exe
引数の追加: "C:\test\StopRMVM.ps1"
※ 引数には、スクリプト ファイルのフルパスを指定
上記のスクリプトのように、生のパスワードを記載したスクリプトをファイルとして保持しなければなりませんので、資格情報を Azure 上に保存できる Azure Automation を使ったほうが安全かもしれません。
ただし、PowerShell のスクリプトの開発・自動化という意味で、手元で行えるというメリットを感じられるお客様は多いかと存じます。
Azure Automation については、また機会をみて本ブログでもご紹介させていただきます。