【自動シャットダウンスクリプト】PowerCLIを使用してvSphereを自動シャットダウンする方法(vCSA / ESXi / 仮想マシン)
こんにちは!インフラ関連のシステムエンジニアをやっているカユラ(@kayura_SE)です。
本記事では、PowerCLIを使用してvSphere環境(vCSA / ESXi / 仮想マシン)を自動シャットダウンする方法を解説します。UPSにvSphere仮想基盤を接続し、停電発生時に安全に停止させたいという要件をお持ちの方はぜひご参照ください。復旧時の自動スタートアップスクリプトは別記事で紹介します。
本記事で想定している構成
vCSA・ESXi・仮想マシンはどの企業でも使用されている構成です。環境に応じて部分的に流用できるよう解説しています。

設計時に考慮しなければならないポイント
自動シャットダウンを設計する上で考慮すべきポイントは以下の3点です。
- vSphere DRSやvSphere HAを使用しているか
- 仮想マシンを停止する順序
- 停電してからどのくらいの時間が経過してから停止するか
vSphere DRSやvSphere HAを使用しているか
これが最も重要な設計観点です。vSphere DRS / HA 環境では運用中に仮想マシンがクラスタ内のESXi上を移動するため、停電時にどのESXi上に存在するかが事前に特定できません。昔よく使われた「vMA」はvSphere DRSおよびvSphere HA環境での使用をサポートしていないため、PowerCLIを使った自動シャットダウンが有効です。
仮想マシンを停止する順序
多くのシステムでは停止順序が重要です。「DNSのセカンダリ→プライマリ」「WEBサーバー→DBサーバー」など、システム要件に合わせた順序制御が必要です。vMAでは異なるESXi上の仮想マシンを順序を意識して停止することができませんが、PowerCLIはこの点を克服できます。
停電してからどのくらいの時間が経過してから停止するか
3秒程度の短時間停電でスクリプトが動作してしまうとUPSの意味がほぼ失われます。「自動シャットダウンに要する時間」と「UPSのバッテリー稼働可能時間」(日々の劣化も考慮)を元に、UPS側でスクリプト実行タイミングを設定してください。
自動シャットダウンスクリプトの流れ
スクリプトは以下の流れで動作します。環境に応じてチューニングしてご使用ください。

スクリプトの配置
「.ps1」拡張子のスクリプトをバックアップサーバー(物理)に配置し、UPS側から実行できるよう設定してください。PowerCLIはWindowsでもLinuxでも動作します。PowerCLIを初めて使用する方は別記事「初めてPowerCLIを使用する方法」をご参照ください。
各機能のスクリプト内容(PowerCLI: Shutdown-VM.ps1)
ログ取得設定・変数の宣言(IPアドレス・パスワードなど)
vCSAにログインする
Write-Host はログ出力コメント用(英語推奨)、Get-Date は実行時間記録用です。
【任意】停止前の仮想マシンの稼働状態の確認
事前に定義した順番で仮想マシンをシャットダウン
停止順序は同一ディレクトリ内の「Shutdown-VMlist.txt」に上から順に記載します。仮想マシンのインベントリ名を記載してください。最終行に空行を入れないよう注意してください。
自動シャットダウンの除外定義(vCSAなど)
本項目以降は無差別に仮想マシンを停止するため、除外する仮想マシンのインベントリ名を「,」区切りで定義します。
その他の仮想マシンのゲストOSシャットダウン(VMware Tools導入済み)
その他の仮想マシンのパワーオフ(VMware Tools導入無し)
パワーオフは強制停止となるため最後の手段として使用します。
【任意】停止後の仮想マシンの稼働状態の確認
【任意】停止前のESXiの稼働状態の確認
vCSAのシャットダウン&切断
ESXiのログイン → メンテナンスモード → シャットダウン → 切断
まとめ(スクリプト全量)
各フェーズの動作を理解するとPowerCLIを使った自動化がより楽しくなります。スクリプト全量は以下の通りです。「.ps1」として保存してご使用ください。
まとめ
本記事ではPowerCLIを使用してvSphere環境(vCSA / ESXi / 仮想マシン)を自動シャットダウンする手順を解説しました。vSphere DRS / HA 環境での課題を克服し、停止順序を柔軟に制御できる点がPowerCLIを使う最大のメリットです。同様の設定で困っている方はTwitterでご連絡ください。
カユラ(@kayura_SE)

コメント