vCenter環境における仮想マシンの管理は、運用規模が拡大するにつれて手作業では困難になります。特に、スナップショットの取得やクローンの作成などの管理業務を個別に実施すると、多大な時間と労力を要します。
そこで有効なのが PowerShell と PowerCLI を活用した自動化です。特に vCenter のタグ機能 を用いることで、仮想マシンを効率的に分類し、特定の条件に基づいたバッチ処理が可能になります。タグを使えば、「特定の環境に属する仮想マシンのみスナップショットを取得する」「開発用マシンのみクローンを作成する」といった柔軟な管理が簡単に行えます。
本記事では、PowerCLI を使用して vCenter 環境における タグベースのスナップショット管理やクローン作成のテクニック を詳しく解説します。さらに、スクリプトをスケジュール実行することで、定期的なバックアップや環境の複製を自動化する方法も紹介します。
本記事を読むことで、次のようなことができるようになります。
- PowerCLI の導入と設定
- vCenter のタグを作成・管理する方法
- タグを利用したスナップショットの一括管理
- クローンの自動作成
- スケジュール実行による自動化
運用効率を向上させ、安定した仮想環境を維持するために、PowerShell による vCenter のバッチ管理を活用していきましょう。
vCenterタグの基本概念と活用メリット
仮想環境の規模が拡大すると、管理対象の仮想マシンが増え、手動での運用が困難になります。そのような状況に対応するため、vCenter のタグ機能 を活用すると、仮想マシンを柔軟に分類し、効率的な管理が可能になります。
vCenterタグとは?
vCenterタグとは、仮想マシン(VM)、ホスト、データストアなどの vCenter オブジェクトに対して割り当てられるラベルのようなものです。特定のプロジェクト、環境、用途に応じてカスタマイズでき、検索やフィルタリングを簡単にする役割を持ちます。
例えば、以下のようなタグを作成することで、仮想マシンを整理できます。
タグ名 | 説明 |
---|---|
Production | 本番環境の仮想マシン |
Development | 開発環境の仮想マシン |
Database | データベースサーバー |
WebServer | Webサーバー |
BackupTarget | バックアップ対象 |
タグはカテゴリーに分けることも可能で、例えば「環境」というカテゴリーの中に Production
、Development
などのタグを作成することで、より直感的な管理ができます。
タグを活用するメリット
vCenter のタグを活用することで、以下のようなメリットがあります。
① 仮想マシンの分類・検索が容易になる
タグを使用することで、仮想マシンをカテゴリーごとに整理し、必要なリソースをすばやく検索できます。特に、管理対象のVMが増えると、名前やフォルダ構成だけでは把握しづらくなりますが、タグを付与することで直感的に管理できます。
② バッチ処理が簡単に実行できる
タグを基準にスナップショットやクローンの作成を一括で実行できるため、業務の自動化が可能になります。例えば、「バックアップ対象(BackupTarget)」タグが付いたVMのみスナップショットを作成する といった処理をスクリプトで実装できます。
③ 運用の統一とチーム間の管理がしやすくなる
タグを使用すれば、運用ルールを標準化し、チーム内で統一された管理が可能になります。例えば、「開発環境のVMには必ず Development
タグを付与する」といったルールを適用すれば、管理の属人化を防ぐことができます。
④ タグを活用したアクセス制御が可能
vSphere のロールベースアクセス制御(RBAC)と組み合わせることで、特定のタグを持つVMに対してのみ操作権限を設定することもできます。例えば、「Production
タグが付いたVMは、管理者のみがスナップショットを作成できる」といった権限管理が可能です。
タグを活用したバッチ処理の概要
タグを活用することで、以下のようなバッチ処理が容易になります。
- 特定のタグが付いたVMに対してスナップショットを一括作成
- バックアップ用のVMのみを選択し、定期的にクローンを作成
- 開発環境のVMを一括削除・再作成
- 本番環境のVMの状態を毎週アーカイブ
次のセクションでは、PowerCLI の導入と設定方法 を解説し、実際に vCenter タグを活用したバッチ処理を実行する準備を整えます。
PowerCLIのインストールと設定方法
PowerShell を使用して vCenter を操作するためには、VMware が提供する PowerCLI をインストールする必要があります。PowerCLI は、vSphere 環境を管理するためのコマンドレットを提供し、vCenter への接続、仮想マシンの管理、スナップショットやクローン作成などの自動化を可能にします。
本セクションでは、PowerCLI のインストール手順と、vCenter への接続方法を解説します。
PowerCLI のインストール
PowerCLI は PowerShell のモジュールとして提供されており、Windows 上で簡単にインストールできます。
1. PowerShell を管理者権限で起動
「スタートメニュー」→「PowerShell」と検索し、「管理者として実行」 を選択します。
2. PowerCLI をインストール
以下のコマンドを実行して PowerCLI をインストールします。
Install-Module -Name VMware.PowerCLI -Scope CurrentUser
-Scope CurrentUser
を指定することで、管理者権限なしでもインストールできます(全ユーザー向けにインストールする場合は AllUsers
に変更)。
3. モジュールの読み込みと初期設定
インストール後、以下のコマンドを実行し、PowerCLI モジュールを読み込みます。
Import-Module VMware.PowerCLI
また、初回実行時に SSL 証明書の警告が表示されることがあります。その場合は、以下のコマンドで警告を無視できます。
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false
vCenter への接続
PowerCLI をインストールしたら、vCenter に接続して操作できるように設定します。
1. vCenter へログイン
以下のコマンドを実行し、vCenter へ接続します。
Connect-VIServer -Server <vcenter_server> -User <username> -Password <password>
例:
Connect-VIServer -Server vcenter.example.com -User admin -Password P@ssw0rd
認証が成功すると、PowerShell から vCenter を操作できるようになります。
2. 接続の確認
現在の接続状況を確認するには、以下のコマンドを実行します。
Get-VIServer
接続中の vCenter サーバー情報が表示されれば、正常に接続されています。
3. 接続を切断
作業終了後、セッションを切断する場合は、以下のコマンドを実行します。
Disconnect-VIServer -Confirm:$false
PowerCLI のバージョン確認とアップデート
PowerCLI のバージョンを確認するには、以下のコマンドを使用します。
Get-Module -Name VMware.PowerCLI -ListAvailable
最新バージョンへ更新する場合は、以下のコマンドを実行します。
Update-Module -Name VMware.PowerCLI
PowerCLI の環境設定(オプション)
特定の環境設定を行うことで、PowerCLI の動作をより快適にすることができます。
- 警告メッセージの無効化
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false
VMware の CEIP(カスタマーエクスペリエンス向上プログラム)に参加しないよう設定します。
- 詳細ログの有効化
Set-PowerCLIConfiguration -DisplayDeprecationWarnings $false -Confirm:$false
非推奨の警告メッセージを無効にします。
まとめ
ここまでで、PowerCLI のインストールと基本的な設定方法について解説しました。
Install-Module
コマンドで PowerCLI をインストールConnect-VIServer
コマンドで vCenter に接続Set-PowerCLIConfiguration
で警告を無視Disconnect-VIServer
で接続を切断
次のセクションでは、vCenter のタグを作成・管理する方法 を具体的に解説し、タグを活用したバッチ処理の準備を進めます。
vCenterタグの作成・管理方法
PowerCLI を利用することで、vCenter のタグを簡単に作成・管理できます。本セクションでは、タグの作成・付与・削除・一覧取得 の方法を解説し、PowerShell を使った自動化の基礎を学びます。
タグの基本概念
vCenter のタグは、仮想マシンやデータストアなどのオブジェクトに付与できるメタデータの一種です。タグを使用すると、特定の属性を持つオブジェクトを素早く識別し、一括操作を容易に行えます。タグは 「カテゴリー」 にグループ化でき、適切な管理が可能になります。
例えば、以下のようなカテゴリーとタグを作成できます。
カテゴリー名 | タグ名 | 説明 |
---|---|---|
環境 | Production | 本番環境の仮想マシン |
環境 | Development | 開発環境の仮想マシン |
サーバー種別 | WebServer | Web サーバーを識別 |
サーバー種別 | Database | データベースサーバーを識別 |
タグの作成
新しいタグを作成するには、まずタグを分類するカテゴリーを作成し、その後タグを作成します。
1. カテゴリーの作成
以下の PowerCLI コマンドを使用して、新しいカテゴリーを作成します。
New-TagCategory -Name "環境" -Cardinality Single -EntityType VirtualMachine
-Cardinality Single
:各オブジェクトに1つのタグのみ付与可能-EntityType VirtualMachine
:このカテゴリーは仮想マシンに適用
2. タグの作成
カテゴリーを作成したら、その中にタグを追加します。
New-Tag -Name "Production" -Category "環境"
New-Tag -Name "Development" -Category "環境"
これにより、Production
と Development
という2つのタグが「環境」カテゴリーの中に作成されます。
仮想マシンにタグを付与
作成したタグを仮想マシンに適用するには、次のコマンドを使用します。
$vm = Get-VM "WebServer01"
New-TagAssignment -Tag "Production" -Entity $vm
このコマンドは、「WebServer01」という仮想マシンに「Production」タグを付与します。
タグの一覧取得
現在 vCenter に登録されているタグを確認するには、次のコマンドを実行します。
Get-Tag
特定のカテゴリー内のタグを取得したい場合は、以下のようにします。
Get-Tag -Category "環境"
また、特定の仮想マシンに付与されているタグを確認するには、次のコマンドを実行します。
$vm = Get-VM "WebServer01"
Get-TagAssignment -Entity $vm
タグの削除
不要になったタグを削除する場合は、以下のコマンドを使用します。
Remove-Tag -Name "Development" -Confirm:$false
カテゴリーごと削除する場合は、以下のコマンドを実行します。
Remove-TagCategory -Name "環境" -Confirm:$false
タグを活用したフィルタリング
タグを使って特定の仮想マシンをフィルタリングし、特定の操作を実行できます。例えば、「Production」タグが付いているすべての仮想マシンを取得するには、次のコマンドを使用します。
Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq "Production" }
また、スナップショットやクローンの作成をタグを元に一括実行することも可能です。
まとめ
ここまでで、vCenter のタグを PowerCLI を使って作成・管理する方法を学びました。
- カテゴリーとタグの作成
- 仮想マシンへのタグ付与
- タグの取得と削除
- タグを活用した仮想マシンのフィルタリング
次のセクションでは、タグを使用したスナップショット管理 について詳しく解説し、実際にバッチ処理を行うスクリプトを作成します。
タグを使用したスナップショット管理
vCenter では、スナップショットを活用することで仮想マシン(VM)の状態を保存し、障害発生時に迅速に復元できます。しかし、運用環境が大規模になると、個別のVMに手動でスナップショットを作成・削除するのは非効率です。
そこで、vCenter のタグを活用し、特定の条件を満たすVMに対して一括でスナップショットを作成・削除する方法 を解説します。
スナップショットの基本概念
スナップショットは、仮想マシンの 現在の状態(ディスク、メモリ、構成) を保存する機能です。スナップショットを作成することで、変更を加える前の状態に簡単にロールバックできます。
ただし、スナップショットを過剰に保存するとストレージを圧迫し、パフォーマンスが低下するため、適切な管理が必要です。
タグを使ったスナップショットの一括作成
特定のタグ(例: BackupTarget
)が付与された仮想マシンのみを対象に、一括でスナップショットを作成するスクリプトを紹介します。
1. スナップショットを作成するスクリプト
# タグが "BackupTarget" の仮想マシンを取得
$tag = "BackupTarget"
$vms = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $tag } | Select-Object -ExpandProperty Entity
# 取得したVMに対してスナップショットを作成
foreach ($vm in $vms) {
$snapshotName = "$($vm.Name)-Snapshot-$(Get-Date -Format 'yyyyMMddHHmmss')"
New-Snapshot -VM $vm -Name $snapshotName -Description "Automated snapshot via PowerCLI" -Quiesce -Memory:$false
Write-Host "スナップショット作成: $snapshotName for VM: $($vm.Name)"
}
スクリプトのポイント
Get-VM | Get-TagAssignment
でタグを元に仮想マシンをフィルタリングNew-Snapshot
でスナップショットを作成- スナップショット名には
VM名-日付時刻
を付加して管理しやすくする
2. スナップショット作成の確認
作成したスナップショットの一覧を取得するには、以下のコマンドを実行します。
Get-VM | Get-Snapshot
また、特定のVMのスナップショットを確認したい場合は、次のように指定します。
Get-Snapshot -VM "WebServer01"
タグを使ったスナップショットの一括削除
不要になったスナップショットを一括削除するには、次のスクリプトを使用します。
1. スナップショットを削除するスクリプト
# タグが "BackupTarget" の仮想マシンを取得
$tag = "BackupTarget"
$vms = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $tag } | Select-Object -ExpandProperty Entity
# 取得したVMのスナップショットを削除
foreach ($vm in $vms) {
$snapshots = Get-Snapshot -VM $vm
foreach ($snapshot in $snapshots) {
Remove-Snapshot -Snapshot $snapshot -Confirm:$false
Write-Host "スナップショット削除: $($snapshot.Name) for VM: $($vm.Name)"
}
}
スクリプトのポイント
- タグ
BackupTarget
の仮想マシンのみ対象 Get-Snapshot
で取得したスナップショットをRemove-Snapshot
で削除-Confirm:$false
を指定することで確認プロンプトをスキップ
スケジュール実行で定期的にスナップショットを管理
スナップショットの作成や削除を Windows タスクスケジューラ に登録することで、自動化できます。以下の手順で PowerShell スクリプトを定期的に実行できます。
1. PowerShell スクリプトを保存
例えば C:\Scripts\CreateSnapshots.ps1
にスクリプトを保存します。
2. タスクスケジューラを開く
「スタートメニュー」→「タスクスケジューラ」を検索して開きます。
3. 新しいタスクを作成
- 「基本タスクの作成」→ 「名前を入力」
- 「トリガー」→ 「毎日」「特定の時間」を設定
- 「操作」→ 「プログラムの開始」→
powershell.exe
を指定 - 引数に
-File "C:\Scripts\CreateSnapshots.ps1"
を入力
この設定により、指定時間にスナップショット作成スクリプトが自動実行されます。
まとめ
本セクションでは、タグを活用したスナップショット管理の自動化 について解説しました。
- タグを使用してスナップショットの対象VMをフィルタリング
- PowerCLI を活用して一括スナップショット作成・削除
- スケジュール実行で自動化を実現
次のセクションでは、タグを使ったクローン作成テクニック を解説し、仮想マシンの複製を自動化する方法を紹介します。
タグベースのクローン作成テクニック
仮想マシンのクローンを作成することで、新しい環境の構築やバックアップ用の複製を素早く作成できます。しかし、複数の仮想マシンを手作業でクローンするのは非効率です。そこで、vCenter のタグ機能を活用し、特定のタグが付いた仮想マシンを自動でクローンする方法 を解説します。
タグを利用したクローンの概要
vCenter のタグを使用すると、特定の目的に応じて仮想マシンを分類し、一括でクローン作成を実行できます。例えば、次のようなタグを活用できます。
カテゴリー名 | タグ名 | 説明 |
---|---|---|
クローン対象 | CloneTarget | クローン作成対象の仮想マシン |
環境 | Development | 開発環境用の仮想マシン |
環境 | Testing | テスト環境用の仮想マシン |
ここでは、タグ CloneTarget
が付いた仮想マシンのみを対象に、一括でクローンを作成するスクリプトを紹介します。
タグを利用したクローン作成スクリプト
1. クローンを作成するスクリプト
# クローン対象のタグ名
$tag = "CloneTarget"
# クローンを作成するフォルダ名
$cloneFolder = "Cloned_VMs"
# タグが "CloneTarget" の仮想マシンを取得
$vms = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $tag } | Select-Object -ExpandProperty Entity
# クローン作成処理
foreach ($vm in $vms) {
$cloneName = "$($vm.Name)-Clone-$(Get-Date -Format 'yyyyMMddHHmmss')"
# クローン作成コマンド
New-VM -Name $cloneName -VM $vm -Datastore "Datastore1" -ResourcePool "Resources" -Location $cloneFolder
Write-Host "クローン作成: $cloneName from VM: $($vm.Name)"
}
スクリプトのポイント
Get-TagAssignment
を使用してCloneTarget
タグが付いた仮想マシンを取得New-VM
を用いてクローンを作成(対象のDatastore
やResourcePool
を指定)- クローンの名前に
VM名-Clone-日付時刻
を付加して管理しやすくする
2. クローンの作成状況を確認
クローンされた仮想マシンを一覧表示するには、次のコマンドを実行します。
Get-VM | Where-Object { $_.Name -like "*-Clone-*" }
これにより、クローンされた仮想マシンの一覧を取得できます。
クローン作成後のネットワーク設定
クローンした仮想マシンのネットワーク設定を自動で変更することで、IP の重複を回避できます。以下のスクリプトでは、クローン後に IP をDHCP に設定します。
# クローンされた仮想マシンのネットワーク設定変更
$clonedVMs = Get-VM | Where-Object { $_.Name -like "*-Clone-*" }
foreach ($vm in $clonedVMs) {
Get-NetworkAdapter -VM $vm | Set-NetworkAdapter -NetworkName "VM Network" -Confirm:$false
Invoke-VMScript -VM $vm -ScriptText "netsh interface ip set address name='Ethernet' source=dhcp" -GuestCredential (Get-Credential)
Write-Host "ネットワーク設定を変更: $($vm.Name)"
}
スクリプトのポイント
Set-NetworkAdapter
でネットワークを変更Invoke-VMScript
を使用し、仮想マシン内で DHCP 設定を実行
タグを利用した古いクローンの自動削除
定期的にクローンを作成する場合、古いクローンを削除しないとストレージを圧迫します。以下のスクリプトで 3日以上前のクローンを自動削除 できます。
$daysOld = 3
$oldClones = Get-VM | Where-Object { $_.Name -like "*-Clone-*" -and $_.ExtensionData.Config.CreateDate -lt (Get-Date).AddDays(-$daysOld) }
foreach ($vm in $oldClones) {
Remove-VM -VM $vm -DeletePermanently -Confirm:$false
Write-Host "古いクローンを削除: $($vm.Name)"
}
スクリプトのポイント
Get-Date
で現在の日付を取得し、3日以上経過したクローンを検索Remove-VM
を使用して対象の仮想マシンを削除
スケジュール実行でクローン作成を自動化
定期的にクローンを作成する場合、Windows タスクスケジューラ に登録すると、自動でクローンが作成されます。手順は次の通りです。
1. PowerShell スクリプトを保存
例えば C:\Scripts\CreateClones.ps1
にスクリプトを保存します。
2. タスクスケジューラを開く
「スタートメニュー」→「タスクスケジューラ」を検索して開きます。
3. 新しいタスクを作成
- 「基本タスクの作成」→ 「名前を入力」
- 「トリガー」→ 「毎日」「特定の時間」を設定
- 「操作」→ 「プログラムの開始」→
powershell.exe
を指定 - 引数に
-File "C:\Scripts\CreateClones.ps1"
を入力
これにより、指定時間にクローン作成スクリプトが自動で実行されます。
まとめ
本セクションでは、タグを活用したクローン作成の自動化 について解説しました。
- タグ
CloneTarget
を使用して対象VMを選択 - PowerCLI で一括クローン作成
- ネットワーク設定の変更で IP 重複を防止
- 古いクローンの自動削除
- タスクスケジューラを利用した定期実行
次のセクションでは、スケジュール実行による自動化 について詳しく解説し、スナップショットやクローンの管理をさらに効率化する方法を紹介します。
スケジュール実行による自動化
スナップショットやクローンの作成を手動で実行するのは非効率であり、忘れてしまう可能性もあります。そのため、Windows タスクスケジューラを利用して、PowerShell スクリプトを定期的に実行することで、管理を自動化 するのが理想的です。
このセクションでは、タスクスケジューラを使用した PowerCLI スクリプトのスケジュール実行方法について解説します。
スケジュール実行のメリット
スケジュール実行を設定すると、次のようなメリットがあります。
- 運用の自動化:手動でスナップショットやクローンを作成する必要がなくなる
- 管理の安定化:決められたスケジュールで処理が実行され、抜け漏れがなくなる
- 作業の効率化:管理者の作業負担を軽減し、他の業務に集中できる
Windows タスクスケジューラでスクリプトを定期実行する手順
ここでは、スナップショット作成スクリプトを毎晩 2:00 に実行する 例を紹介します。
1. PowerShell スクリプトの保存
PowerShell スクリプトを作成し、以下のような内容で保存します。
# タグ "BackupTarget" のVMを取得し、スナップショットを作成
$tag = "BackupTarget"
$vms = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $tag } | Select-Object -ExpandProperty Entity
foreach ($vm in $vms) {
$snapshotName = "$($vm.Name)-Snapshot-$(Get-Date -Format 'yyyyMMddHHmmss')"
New-Snapshot -VM $vm -Name $snapshotName -Description "Automated snapshot via PowerCLI" -Quiesce -Memory:$false
Write-Host "スナップショット作成: $snapshotName for VM: $($vm.Name)"
}
# スナップショットが古くなったものを削除(7日以上前のものを削除)
$oldSnapshots = Get-Snapshot | Where-Object { $_.Created -lt (Get-Date).AddDays(-7) }
foreach ($snapshot in $oldSnapshots) {
Remove-Snapshot -Snapshot $snapshot -Confirm:$false
Write-Host "スナップショット削除: $($snapshot.Name)"
}
このスクリプトは、
BackupTarget
タグが付いた仮想マシンのスナップショットを作成- 7日以上前のスナップショットを自動削除
する処理を実行します。
スクリプトを C:\Scripts\AutoSnapshot.ps1
に保存します。
2. タスクスケジューラを開く
「スタートメニュー」→「タスクスケジューラ」を検索して開きます。
3. 新しいタスクの作成
- 「タスクの作成」 をクリック
- 「全般」タブ
- 名前:
AutoSnapshotTask
- 「最上位の特権で実行する」にチェックを入れる(管理者権限が必要)
- 「ユーザーがログオンしているかどうかにかかわらず実行する」を選択
4. 実行スケジュールの設定
- 「トリガー」タブを選択し、「新規」ボタンをクリック
- 以下のスケジュールを設定
- 「毎日」を選択
- 時刻を
02:00
に設定(任意の時間でOK) - 「有効」にチェックを入れる
5. 実行するプログラムの設定
- 「操作」タブを選択し、「新規」ボタンをクリック
- 以下の内容を設定
- プログラム/スクリプト:
powershell.exe
- 引数の追加:
-File "C:\Scripts\AutoSnapshot.ps1"
- 「開始」に
C:\Scripts\
を指定(スクリプトのあるディレクトリ)
6. タスクの確認と保存
- 「OK」ボタンをクリックし、タスクを保存
- タスクが正しく設定されたかを確認
- 「タスクスケジューラ ライブラリ」に新しいタスクが追加されているかチェック
- 「右クリック」→「実行」で手動実行して正常に動作するか確認
スナップショットの自動管理とスケジュール
用途に応じて、以下のようなスケジュールを設定すると、さらに運用がスムーズになります。
タスク | スクリプト | 実行頻度 | 備考 |
---|---|---|---|
スナップショット作成 | AutoSnapshot.ps1 | 毎日 2:00 | BackupTarget タグのVMを対象 |
クローン作成 | AutoClone.ps1 | 毎週 日曜 3:00 | CloneTarget タグのVMを対象 |
古いスナップショット削除 | CleanOldSnapshots.ps1 | 毎週 土曜 4:00 | 7日以上前のスナップショット削除 |
古いクローン削除 | CleanOldClones.ps1 | 毎月 1日 5:00 | 10日以上前のクローン削除 |
このように、定期的にタスクを実行することで、スナップショットやクローンの管理を完全自動化 できます。
まとめ
本セクションでは、PowerShell スクリプトを Windows タスクスケジューラで自動実行する方法 を解説しました。
- スケジュール実行のメリット:手作業を削減し、運用の自動化が可能
- PowerShell スクリプトの作成:タグを利用したスナップショット管理
- タスクスケジューラの設定:指定時間にスクリプトを自動実行
- スケジュールの最適化:スナップショット・クローンの作成と削除を適切に管理
次のセクションでは、具体的な PowerShell スクリプトの実例 を紹介し、実際に使えるコードを詳しく解説します。
PowerShellスクリプトの実例
ここでは、実際に運用可能な PowerShell スクリプト を紹介し、vCenter のタグを活用したスナップショット管理・クローン作成を自動化 する方法を解説します。
タグを活用したスナップショット管理スクリプト
このスクリプトは、タグ “BackupTarget” が付与された仮想マシンのスナップショットを作成し、7日以上前のスナップショットを自動削除 します。
# vCenter 接続情報
$vcServer = "vcenter.example.com"
$vcUser = "admin"
$vcPassword = "P@ssw0rd"
# vCenterへ接続
Connect-VIServer -Server $vcServer -User $vcUser -Password $vcPassword
# タグ "BackupTarget" の仮想マシンを取得
$tag = "BackupTarget"
$vms = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $tag } | Select-Object -ExpandProperty Entity
foreach ($vm in $vms) {
$snapshotName = "$($vm.Name)-Snapshot-$(Get-Date -Format 'yyyyMMddHHmmss')"
New-Snapshot -VM $vm -Name $snapshotName -Description "Automated snapshot via PowerCLI" -Quiesce -Memory:$false
Write-Host "スナップショット作成: $snapshotName for VM: $($vm.Name)"
}
# 7日以上前のスナップショットを削除
$oldSnapshots = Get-Snapshot | Where-Object { $_.Created -lt (Get-Date).AddDays(-7) }
foreach ($snapshot in $oldSnapshots) {
Remove-Snapshot -Snapshot $snapshot -Confirm:$false
Write-Host "スナップショット削除: $($snapshot.Name)"
}
# vCenterの接続を切断
Disconnect-VIServer -Confirm:$false
スクリプトのポイント
Get-TagAssignment
で特定のタグを持つ仮想マシンを取得New-Snapshot
でスナップショットを作成(Quiesce
を有効にしてファイルシステムの整合性を確保)Get-Snapshot
を利用して、7日以上経過したスナップショットを削除
タグを活用したクローン作成スクリプト
このスクリプトは、タグ “CloneTarget” が付与された仮想マシンのクローンを作成し、10日以上前のクローンを削除 します。
# vCenter 接続情報
$vcServer = "vcenter.example.com"
$vcUser = "admin"
$vcPassword = "P@ssw0rd"
# vCenterへ接続
Connect-VIServer -Server $vcServer -User $vcUser -Password $vcPassword
# タグ "CloneTarget" の仮想マシンを取得
$tag = "CloneTarget"
$vms = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $tag } | Select-Object -ExpandProperty Entity
# クローンを作成するフォルダ名
$cloneFolder = "Cloned_VMs"
foreach ($vm in $vms) {
$cloneName = "$($vm.Name)-Clone-$(Get-Date -Format 'yyyyMMddHHmmss')"
New-VM -Name $cloneName -VM $vm -Datastore "Datastore1" -ResourcePool "Resources" -Location $cloneFolder
Write-Host "クローン作成: $cloneName from VM: $($vm.Name)"
}
# 10日以上前のクローンを削除
$daysOld = 10
$oldClones = Get-VM | Where-Object { $_.Name -like "*-Clone-*" -and $_.ExtensionData.Config.CreateDate -lt (Get-Date).AddDays(-$daysOld) }
foreach ($vm in $oldClones) {
Remove-VM -VM $vm -DeletePermanently -Confirm:$false
Write-Host "古いクローンを削除: $($vm.Name)"
}
# vCenterの接続を切断
Disconnect-VIServer -Confirm:$false
スクリプトのポイント
Get-TagAssignment
で特定のタグが付いた仮想マシンを選択New-VM
でクローンを作成(データストア・リソースプールを指定)Get-VM
で古いクローンを特定し、削除
スナップショット & クローンのスケジュール実行スクリプト
このスクリプトは、スナップショット作成とクローン作成を一度に実行する ものです。
# vCenter 接続情報
$vcServer = "vcenter.example.com"
$vcUser = "admin"
$vcPassword = "P@ssw0rd"
Connect-VIServer -Server $vcServer -User $vcUser -Password $vcPassword
# スナップショット作成
$backupTag = "BackupTarget"
$vmsBackup = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $backupTag } | Select-Object -ExpandProperty Entity
foreach ($vm in $vmsBackup) {
$snapshotName = "$($vm.Name)-Snapshot-$(Get-Date -Format 'yyyyMMddHHmmss')"
New-Snapshot -VM $vm -Name $snapshotName -Description "Automated snapshot via PowerCLI" -Quiesce -Memory:$false
Write-Host "スナップショット作成: $snapshotName for VM: $($vm.Name)"
}
# クローン作成
$cloneTag = "CloneTarget"
$vmsClone = Get-VM | Get-TagAssignment | Where-Object { $_.Tag -eq $cloneTag } | Select-Object -ExpandProperty Entity
foreach ($vm in $vmsClone) {
$cloneName = "$($vm.Name)-Clone-$(Get-Date -Format 'yyyyMMddHHmmss')"
New-VM -Name $cloneName -VM $vm -Datastore "Datastore1" -ResourcePool "Resources" -Location "Cloned_VMs"
Write-Host "クローン作成: $cloneName from VM: $($vm.Name)"
}
Disconnect-VIServer -Confirm:$false
スクリプトの実行方法
- スクリプトを保存(例:
C:\Scripts\AutoManageVMs.ps1
) - PowerShell で手動実行
powershell.exe -File "C:\Scripts\AutoManageVMs.ps1"
- タスクスケジューラに登録して定期実行
- 「トリガー」で
毎日 2:00
に設定 - 「操作」で
powershell.exe
を実行し、引数に-File "C:\Scripts\AutoManageVMs.ps1"
を追加
まとめ
本セクションでは、実運用に即した PowerShell スクリプト を紹介しました。
- スナップショット作成 & 7日以上前のスナップショット削除
- クローン作成 & 10日以上前のクローン削除
- スナップショット・クローンを一括管理するスクリプト
次のセクションでは、トラブルシューティングとベストプラクティス を紹介し、エラー発生時の対応策を解説します。
トラブルシューティングとベストプラクティス
PowerShell を活用して vCenter のスナップショットやクローンの管理を自動化する際、スクリプトエラーや環境依存の問題 が発生することがあります。本セクションでは、よくあるトラブルとその解決策、さらに安全で効率的に運用するためのベストプラクティスを紹介します。
よくあるトラブルと解決策
1. `Connect-VIServer` の認証エラー
エラーメッセージ:
Connect-VIServer : Could not connect using the specified username and password.
原因:
- vCenter の認証情報が間違っている
- アカウントに必要な権限がない
解決策:
- 認証情報を手動で確認
Connect-VIServer -Server "vcenter.example.com" -User "admin" -Password "P@ssw0rd"
これで手動接続ができるか確認します。
- 認証情報を保存し、安全に呼び出す
$cred = Get-Credential
Connect-VIServer -Server "vcenter.example.com" -Credential $cred
Get-Credential
を使うことで、パスワードを直接スクリプトに書かずに済みます。
- 必要な権限を確認する
vCenter の管理者がアカウントに適切なロールを付与しているかチェックします。最低限Read
とPowerCLI
の実行権限が必要です。
2. `Get-VM` で仮想マシンが見つからない
エラーメッセージ:
Get-VM : The operation returned no results.
原因:
- vCenter に正しく接続されていない
- 指定した仮想マシンが存在しない
- アカウントに VM へのアクセス権限がない
解決策:
- vCenter への接続を確認する
Get-VIServer
このコマンドで、正しく vCenter に接続されているかを確認します。
- 仮想マシンの名前を確認する
Get-VM | Select Name
vCenter 上の仮想マシンの名前がスクリプトで指定したものと一致しているかチェックします。
- タグが付与されているかを確認する
Get-TagAssignment -Entity (Get-VM "MyVM")
指定した仮想マシンにタグが正しく設定されているか確認します。
3. `New-Snapshot` や `New-VM` の処理が遅い
原因:
- vCenter の負荷が高い
- ストレージの空き容量が不足している
- 仮想マシンのスナップショットがすでに多数存在する
解決策:
- 現在のスナップショット数を確認
Get-VM | Get-Snapshot | Select VM, Name, Created
不要なスナップショットがある場合は、削除してストレージの空きを確保します。
- クローン作成の最適化
Linked Clone
(差分クローン)を使用すると、ストレージの消費を抑えながらクローンを作成できます。New-VM -LinkedClone
を試すことで、パフォーマンスを向上できます。
4. `Remove-Snapshot` で削除が失敗する
エラーメッセージ:
Remove-Snapshot : The snapshot could not be removed.
原因:
- スナップショットがロックされている
- スナップショットの統合(Consolidation)が必要
解決策:
- スナップショットの統合を試す
Get-VM "MyVM" | Get-Snapshot | Remove-Snapshot -Confirm:$false
これで削除できない場合は、次のコマンドを試します。
Get-VM "MyVM" | Set-VM -SnapshotRemove -Confirm:$false
これにより、スナップショットの統合を試みます。
- vSphere クライアントで削除を試す
PowerCLI で削除できない場合は、vSphere クライアントから手動で削除を試します。
ベストプラクティス
スクリプトを安全に運用し、エラーを最小限に抑えるためのベストプラクティスを紹介します。
1. vCenter 接続情報を暗号化して保存
パスワードをスクリプトに直接記述すると、セキュリティリスクが高まります。代わりに、資格情報を暗号化して保存し、スクリプト内で安全に読み込む方法を推奨します。
資格情報を保存するスクリプト:
$cred = Get-Credential
$cred | Export-Clixml -Path "C:\Scripts\vcenter_credentials.xml"
スクリプト内での読み込み:
$cred = Import-Clixml -Path "C:\Scripts\vcenter_credentials.xml"
Connect-VIServer -Server "vcenter.example.com" -Credential $cred
2. ログを記録する
スクリプトの実行履歴をログファイルに記録すると、トラブル発生時の分析が容易になります。
ログ出力を追加する:
$logFile = "C:\Scripts\log.txt"
Function Write-Log {
param ([string]$message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $message" | Out-File -Append -FilePath $logFile
}
Write-Log "スクリプトを開始しました。"
# スナップショット作成
$vmName = "MyVM"
$snapshotName = "$vmName-Snapshot-$(Get-Date -Format 'yyyyMMddHHmmss')"
New-Snapshot -VM $vmName -Name $snapshotName
Write-Log "スナップショット作成: $snapshotName"
Write-Log "スクリプトを終了しました。"
まとめ
本セクションでは、PowerShell スクリプトの実行時に発生しやすいトラブルとその解決策 を紹介しました。
- 認証エラーの対策:
Get-Credential
を使用 - VM が見つからない場合の確認方法:
Get-VM
やGet-TagAssignment
の活用 - スナップショットやクローン処理が遅い問題の解決策
- ログを記録し、スクリプトのトラブルシューティングを容易にする
次のセクションでは、まとめ を行い、本記事のポイントを整理します。
まとめ
本記事では、PowerShell(PowerCLI)を活用して vCenter のタグベースでスナップショットやクローンを管理する方法 を詳しく解説しました。
学んだポイント
- vCenter タグの基本概念とメリット
- タグを活用することで、仮想マシンの分類・検索・管理が容易になる。
- タグを基準にスナップショットやクローンをバッチ処理できる。
- PowerCLI のインストールと設定方法
- PowerCLI を PowerShell にインストールし、vCenter へ接続する手順。
Connect-VIServer
を使用して vCenter にログインする方法。- タグの作成・管理方法
New-TagCategory
やNew-Tag
でタグを作成。New-TagAssignment
で仮想マシンにタグを付与。Get-TagAssignment
でタグ情報を取得し、管理を効率化。- タグを使用したスナップショット管理
New-Snapshot
を使用し、タグBackupTarget
を持つ仮想マシンにスナップショットを作成。Remove-Snapshot
で古いスナップショットを削除。- タスクスケジューラで定期実行し、スナップショット管理を自動化。
- タグベースのクローン作成テクニック
New-VM
を使用し、タグCloneTarget
を持つ仮想マシンのクローンを作成。Remove-VM
で一定期間経過したクローンを削除し、ストレージを最適化。- スケジュール実行による自動化
- タスクスケジューラを活用し、定期的にスナップショット作成・クローン管理を自動化。
powershell.exe -File "C:\Scripts\AutoManageVMs.ps1"
をタスクに登録して定期実行。- PowerShell スクリプトの実例
- スナップショット管理・クローン管理の自動化スクリプトを実装。
Write-Log
関数を利用してログを記録し、エラー発生時の対応を容易にする。- トラブルシューティングとベストプラクティス
Connect-VIServer
の認証エラー対策としてGet-Credential
を使用。Get-VM
で仮想マシンが見つからない場合の対処法。Remove-Snapshot
が失敗する場合の統合処理(Consolidation)の実施。- セキュリティを考慮し、認証情報を
Export-Clixml
で暗号化して保存。
今後の活用
PowerShell を活用することで、vCenter 環境の管理を自動化し、運用負担を大幅に削減 できます。本記事で紹介した手法を応用すれば、さらに柔軟なバッチ処理や高度な仮想マシン管理が可能になります。
- 監視・通知の追加
- スクリプトの実行結果をメール通知する機能を追加することで、運用監視の負担を軽減できます。
- バックアップ自動化の強化
- タグを活用し、バックアップ対象の仮想マシンを柔軟に管理できるようにする。
- 環境の拡張
- PowerCLI でホスト管理やネットワーク設定の自動化も可能。
- vSphere API を活用して、さらに高度な管理を実装。
本記事で学んだ内容を基に、自社環境に最適な運用方法を設計し、より効率的な vCenter 管理を実現していきましょう!
コメント