はじめに
AzureVMの自動シャットダウンはポータル上で簡単に設定できますが、マシンの自動起動はポータル画面のGUIでは簡単設定できず、Azure Automationを活用するのが一般的かと思いますが、PowerShellでVM情報やバックアップの結果を取得しておりましたので、あえてPowerShellで実装してみました。
PowerShellで自動起草させるうえで知っておくべきポイントとサンプルスクリプトをまとめます。
本実装における前提
- AzurePowerShellを利用するため、Azモジュールが実行環境として整っていること
- 実行場所はAzure環境内のVMであること
- サービスプリンシパルで非対話でWindowsのタスクスケジューラで実行する
上記が整っていない場合は、過去記事にまとめてますので参考にしてください。
AzureDNSでつまずいた人はこちらも参考としてください
構築手順
Azureポータルでの作業
起動するVMに対してロールの付与が必要です。具体的には「仮想マシン共同作成者」をサービスプリンシパルに付与してあげれば実行することが可能となります。
やり方は2通りありますが、より範囲を狭めたい場合はVMごとに付与してあげればよいです。
- 自動起動が必要なVMに対して「仮想マシン共同作成者」を付与
- VMが属するリソースグループに「仮想マシン共同作成者」を付与
詳細な手順は過去記事をご覧いただければと思いますが、アクセス制御(IAM)から設定ください。


また検証はしてませんが、サービスプリンシパルが上位のサブスクリプションへの閲覧者権限があることも必要だと思われます。
これらが揃えば準備完了です。
サンプルスクリプト
Start-AzVM コマンドを実行すればOKです。以下サンプルを応用すれば、例えばCSVファイルをインプットとすることでまとめて起動できたり、必要なタイミングの起動日だけ動かすように制御できたりします。
#作成したアプリケーションID
$user = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
#クライアントシークレットの値、スクリプトに直接書き込むのが嫌な場合はパスワードファイルを
#準備することをお勧めします。
$password = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
#テナントID
$tenantId = "cccccccc-cccc-cccc-cccc-cccccccccccc"
#パスワードをセキュアな文字列に変換
$SecureStringPwd = $password | ConvertTo-SecureString -AsPlainText -Force
#接続情報作成
$pscredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$SecureStringPwd
#Azureに接続
Connect-AzAccount -ServicePrincipa -Credential $pscredential -Tenant $tenantId
#自動起動VMが属するリソースグループ
$resourceGroupName = "yourResourseGroupName"
#自動起動対象のVM
$vmName = "yourTargetVmName"
#起動コマンド
Start-AzVM -ResourceGroupName $resourceGroupName -Name $vmName
Disconnect-AzAccount
まとめ
以上で、『【Azure】VMをPowerShell(サービスプリンシパル)で自動起動させるための環境設定およびサンプルスクリプト』でした。
PowerShellの方がAzure Automationよりも応用しやすいので、PowerShellが苦でない方は是非参考にしてください。




コメント