ネコの耳に念仏

ネコの耳に念仏

ガンバらない技術ブログを目指します

【Azure】リソースグループ内の全VMSSの全インスタンスの電源状態を一括確認する方法【PowerShell】

Azure の複数のリソースグループに分散した複数の VMSS をまとめて管理している場合、どのインスタンスが起動してるの?停止してるの?を確認するだけでも大変ですよね。

そこで今回、リソースグループ名を指定するだけで、指定したリソースグループに含まれる全ての VMSS の全てのインスタンスの電源状態を自動的に一括取得して確認することができる PowerShell スクリプトをご紹介します。

VMSS ではなく、VM の電源を一括確認したいよって人は、別の記事で方法を説明しているのでそちらをご覧ください。

別記事:【Azure】リソースグループ内の全VMの電源状態を一括確認する方法【PowerShell】

前提条件

Azure PowerShell Az モジュールのコマンドレットを利用しますので、あらかじめ Azure PowerShell Az モジュールをインストールしてください。

インストール方法は、別の記事で手順を説明しているのでそちらをご覧ください。

別記事:Azure PowerShell (Az モジュール) のインストール方法

指定したリソースグループに含まれる全ての VMSS の全てのインスタンスの電源状態を一括確認する方法

PowerShell で、指定したリソースグループに含まれる全ての VMSS の全てのインスタンスの電源状態を一括取得して確認するためのスクリプトは、下記のとおりです。

# 確認対象のリソースグループ名
$resourceGroupName = "MyResourceGroupName"

# Azureに接続
Connect-AzAccount

# リソースグループに含まれる全てのVMSS名を取得
$VmssProperty = Get-AzVmss -ResourceGroupName $ResourceGroupName
$VmssNameArray = $VmssProperty.Name

# VMSSごとに処理
foreach ($VmssName in $VmssNameArray){
    # VMSSのインスタンスビューからVMSSにある全てのインスタンスのインスタンスIDを取得
    $VmssInstanceView = Get-AzVmssVM -InstanceView -ResourceGroupName $ResourceGroupName -VMScaleSetName $VmssName
    $InstanceIdArray = $VmssInstanceView.InstanceId

    # インスタンスごとに処理
    foreach ($InstanceId in $InstanceIdArray)
    {
        # インスタンスビューから電源状態のステータスコードを取得
        $VmInstanceView = Get-AzVmssVM -InstanceView -ResourceGroupName $ResourceGroupName -VMScaleSetName $VmssName -InstanceId $InstanceId
        $VMDisplayStatus = $VmInstanceView.Statuses[1].DisplayStatus
        
        # インスタンスの電源状態を判別
        if ($VMDisplayStatus -eq "VM starting")
        {
            "$VmssName $InstanceId 開始処理中"
        }
        elseif ($VMDisplayStatus -eq "VM running")
        {
            "$VmssName $InstanceId 実行中"
        }
        elseif ($VMDisplayStatus -eq "VM stopping")
        {
            "$VmssName $InstanceId リソースを保持したまま停止処理中"
        }
        elseif ($VMDisplayStatus -eq "VM stopped")
        {
            "$VmssName  $InstanceId リソースを保持したまま停止中"
        }
        elseif ($VMDisplayStatus -eq "VM deallocating")
        {
            "$VmssName  $InstanceId 割り当て解除処理中"
        }
        elseif ($VMDisplayStatus -eq "VM deallocated")
        {
            "$VmssName $InstanceId 割り当て解除済み"
        }
        else
        {
            "$VmssName $InstanceId 電源状態不明"
        }
    }
}

以上、ご参考ください。