はじめに
Veeamはバックアップツールとして非常に有名なソフトウェアで、ご存知の方、あるいはもうご利用になっている方も多いかと思います。
弊社でもインフラ設計構築の一環として、Veeamを利用したバックアップ環境及び環境移行設計・構築を対応させていただいております。
そんな案件対応の中で、時々大変な思いをしているのが「ジョブの作成」です。
Veeamでは、バックアップやレプリカ、またコピーなど、数々のジョブを定義することができ、その作成のために非常に使いやすいGUIも用意されています。ただ、例えば「100個のバックアップジョブをGUIで作る」となるとさすがにかなりげんなりしてしまうのも事実です。
そこで、ここではCLI(Powershell)を使ってのVeeamバックアップジョブの作成や運用についてご紹介します。
Powershellでのジョブの作り方
Powershellでバックアップジョブを大量に作る場合、やり方には大きく以下の2つがあるかと思います。
- テンプレートとなるジョブをGUIなどで作り、それをコピーして、設定を変更する
- 1からスクリプトでジョブを作成する
一般にGUIでジョブを作成する方が、細かい設定を直感的に設定できるので、ジョブに細かい設定が必要な場合は、GUIで作成する方が有利と思います。
これから上記2点における作り方について紹介しますが、その前に、VeeamでPowershell運用を行う場合について注意点です。
現行のVersion(11以降)では、Add-Snapin などでPoweshellのVeeam管理モジュールを読み込むことはできません。そのため、Veeamがインストールされていない環境からVeeam管理を行う場合、最低でも「Veeam Backup & Replication コンソール」をインストールする必要があります。
※裏技的な方法も存在しますが、本稿執筆時点では公式にはコンソールのインストールが必要とされています。
1.テンプレートジョブを作成し、そこからコピーする
まず、テンプレートジョブを(GUIなどで)作成します。
このテンプレートジョブをコピーして設定変更を行いますので、その変更内容を記載したCSVファイルを作成します。
今回は以下のような変更対象の情報を記載したcsvファイルを作成します。
それぞれの項目の説明は以下となります。
項目 | 説明 |
JobName | テンプレートからコピーして作成されるバックアップジョブの名称 |
VMName | バックアップ対象となる仮想マシン |
Time | バックアップ開始時間 |
vCenter | バックアップ対象となる仮想マシンが配置されている仮想基盤 (vCenter/ESXiなど。VeeamのInventoryに登録されている必要がある) |
上記の内容を保持したファイルをbackup.csvとして保存します。
その後、以下のようなPowershellスクリプトを作ります。
# テンプレートになるジョブ名
$templateJobName = "Backup Template Job"
# CSV読み込み
$jobList = Import-Csv "backup.csv"
# テンプレートとなるジョブ情報を取得
$templateJob = Get-VBRJob -Name $templateJobName
# csvファイルに登録されている情報分実行
foreach ($entry in $jobList) {
$newJobName = $entry.JobName
$vmName = $entry.VMName
$Time=$entry.Time
$vCenter=$entry.vCenter
# テンプレートのジョブを定義されているジョブ名称でコピー
Copy-VBRJob -Name $newJobName -Job $templateJob
# ジョブ内にて定義されているバックアップ対象の仮想マシンを一度全削除
Get-VBRJobObject -Job $newJobname| Remove-VBRJobObject
# ジョブにターゲットとなる仮想マシンを追加
Add-VBRViJobObject -job $newJobname -Entities (Find-VBRViEntity -server
$vCenter -name $vmName)
# ジョブのスケジュール変更
Set-VBRJobSchedule -Job $newJobname -Daily -At $Time -DailyKind Weekdays
# ジョブの有効化
Enable-VBRJob -Job $newJobname
}
何をしているかと言うと
- 「Copy-VBRJob」コマンドレットを使って、テンプレートジョブをcsvで指定されている名前のジョブにコピーする
- 「Remove-VBRJobObject」コマンドレットを使って、コピーしたジョブの中に記載されているバックアップ対象VMの情報をすべて削除する
- 「Add-VBRViJobObject」コマンドレットを使って、csvで登録されているVMをコピーしたバックアップジョブに追加(この時、この仮想マシンが存在している仮想基盤(vCenter)の情報を設定し、検索場所を指定している)
- 「Set-VBRJobSchedule」コマンドレットを使って、デイリーのバックアップ開始時間を設定
- 「Enable-VBRJob」コマンドレットを使って、作成したジョブを有効化
このようにすることで、テンプレートのジョブをコピーし、たくさんのバックアップジョブを設定変更にあわせて作成することが可能です。
2.最初からスクリプトでジョブを作る
次に最初からスクリプトでジョブを作成する場合の流れをご紹介します。
作業の流れは「1.テンプレートジョブを作成し、そこからコピーする」と同じです。
Veeamのジョブには、多岐にわたる細かい設定があり、それを実装する場合は複雑なスクリプトになりがちです。
実際には、基本的なバックアップ指定、例えばバックアップ対象、バックアップ開始時刻、格納レジストリ、バックアップ世代数など、一部の設定以外はデフォルトの構成で問題ない、などの場合などもあるかと思います。
その場合、まず設定・変更したい設定内容を記載したCSVファイルを作成します。具体的には以下のような情報を持ったcsvファイルを作成します。
今回のケースでは、以下のそれぞれについて個別に設定を行うことを想定しています(これはサンプルなので、これ以外でも設定の変更は可能です)。
項目 | 説明 |
JobName | バックアップジョブの名称 |
VMName | バックアップ対象となる仮想マシン |
Time | バックアップ開始時間(日次取得想定) |
Target | バックアップを格納するレポジトリ |
Retention | バックアップを保存する保持日数(保持世代日数) |
上記の内容を保持したファイルをbackup.csvとして保存します。
その後、以下のようなPowershellスクリプトを作ります。
# VM一覧CSV読み込み
$backups = Import-csv "backup.csv"
foreach ($entry in $backups){
$Repo = $entry.Target
$newJobName = $entry.JobName
$vmName = $entry.VMName
$Time=$entry.Time
$Retention=$entry.Retention
Add-VBRViBackupJob -Name $newJobName -BackupRepository (Get-VBRBackupRepository -Name $Repo) -Entity (Find-VBRViEntity -Name $vmName) >null
# ジョブにスケジュール設定
Set-VBRJobSchedule -Job $newJobname -Daily -At $Time -DailyKind Weekdays >null
Enable-VBRJobSchedule -Job $newJobname >null
# ジョブのReteintion変更
$JobOptions = Get-VBRJobOptions -job $newJobname
$JobOptions.BackupStorageOptions.RetentionType = "Days"
$JobOptions.BackupStorageOptions.RetainDaysToKeep = $Retention #Retention Policy
Set-VBRJobOptions -job $newJobname -Options $JobOptions >null
Enable-VBRJob -Job $newJobname >null
}
何をしているかと言うと
- 「Add-VBRViBackupJob」コマンドレットを使って、バックアップジョブを作成する。この時点でジョブ名、レポジトリ、バックアップ対象仮想マシン名などを設定する。
- 「Set-VBRJobSchedule」コマンドレットを使って、デイリーのバックアップ開始時間を設定
- 「Set-VBRJobOptions」コマンドレットを使って、ジョブに各種オプションを設定する。ここでは設定するオプションとして「バックアップ保持世代数」を設定している
- 「Set-VBRJobSchedule」コマンドレットを使って、デイリーのバックアップ開始時間を設定
- 「Enable-VBRJob」コマンドレットを使って、作成したジョブを有効化
このようにすることで、ジョブを1から作成することができます。
今回の設定は限られたものでしたが、Set-VBRJobOptionsを利用することでより細かな設定も可能です。
また、
このようにPowershellを利用してバックアップやレプリケーションジョブなどを作成し、運用することも可能となります。