Azure Recovery Services コンテナーを作ってみた

 

Azure Recovery Services コンテナーはAzure Virtual Machine等のバックアップやリストアに使用されるAzure上のサービスです。

色々な機能が提供されていますので、機能内容はマイクロソフト様のサイトでご確認下さい。自分はシンプルにバックアップソフトとバックアップストレージがセットで提供されるサービスと理解しています。

https://docs.microsoft.com/ja-jp/azure/backup/backup-azure-recovery-services-vault-overview

 

今回は、Azure Recovery Services コンテナー作成を、Azure PortalとAzure Resource Manager(ARM)テンプレートを利用して実施してみました。

Azure Portalで実施した内容を踏まえて、ARMテンプレートでのデプロイをやっていみました。

ARMテンプレートを使ってデプロイするにあたっては、以下の3つのファイルを作成しています。ARMテンプレートを使った場合は、複数のコンテナーを一括でデプロイできるようにパラメータをCSVから読み込むようにしています。

    • Azure Recovery Services コンテナーを定義するARMテンプレート(JSONファイル)
    • Azure Recovery Services コンテナーのパラメータを指定するCSV
    • ARMテンプレートをデプロイするPower Shell

今回はAzure Recovery Services コンテナーの作成のみとなっております。Virtual Machineのバックアップ設定やバックアップスケジュール設定は別の機会に実施したいと思います。

作成したものは GitHub上にも公開しております。

https://github.com/Tama-negi/Li-akb-branch-office/tree/PowerShell_Azure/RecoveryServices_20200522

1 .Azure Portal上でRecovery Services コンテナーを新規作成する

Azure Portalを利用したRecovery Services コンテナーを作成は以下の手順で実施しました。

    • Recovery Services コンテナーの作成
    • バックアップ ストレージの冗長選択(ローカル冗長ストレージ (LRS) と Geo 冗長ストレージ (GRS))
    • 論理削除(14日間保持)、物理削除(即時削除)の選択

バックアップストレージの冗長選択はバックアップ設定した後では変更不可である為最初に設定します。また、論理削除にしておくと、Recovery Services コンテナーが削除が論理的にデータ保存されている14日間出来なくなります。その為必要に応じて設定変更します。

Azure Portalを利用した作成手順はマイクロソフト様のサイトに公開されています。今回は勉強もかねて実施してみました。

https://docs.microsoft.com/ja-jp/azure/backup/backup-create-rs-vault

 

最初に、Recovery Services コンテナーの作成を行います。

Azure Portal上のすべてのサービスでRecoveryと入力すると、Recovery Services コンテナーのメニューが表示されれますのでこれを選択します。

Recovery Services コンテナーに移動しますので、+追加をクリックします。

一般的な使い方で指定するのは、以下の内容になるかと思います。実際に利用するリソースに合わせて設定します。

    • リソースグループ
    • 資格情報コンテナー名(名前ですね。)
    • リージョン
    • タグ(プレビューで追加になってました。)

まず、リソースグループ、資格情報コンテナー名、リージョンを選択し、次へクリックします。

次にタグの設定を必要に応じて実施します。

設定したら、確認および作成をクリックします。確認画面が表示されますので、作成をクリックします。Recovery Services コンテナーが作成されます。

Recovery Services コンテナーが作成されましたので、最初にやっておくべき設定を行います。

作成したRecovery Services コンテナーのメニューにあるプロパティを選択します。

バックアップ構成という項目が表示されているかと思います。ここで更新をクリックします。下記画面が表示されます。ストレージレプリケーションの種類を選択します。

デフォルトGeo冗長になっております。

別リージョンにリカバリするやDCが全部吹っ飛んでもリカバリするんだ、というような別リージョンに保管する要件が無い場合はローカル冗長(LRS)に変更します。

マイクロソフト様のサイトを見て頂ければわかりますが、料金が2倍違います。(保管場所が2重になるので、容量も2倍。という事で料金も2倍という事だと思います。。。)

https://azure.microsoft.com/ja-jp/pricing/details/backup/

設定変更した場合は、忘れずに保存します。

次に、セキュリティ設定を行います。(なお、こちらは後からでも変更可能です。)

即時物理削除したい場合は、論理削除を無効に設定します。

設定変更した場合は保存します。論理削除の保存期間は14日間固定のようで変更はできないようです。

.Recovery Services コンテナーのAzure Resource Manager(ARM)テンプレート

マイクロソフト様が公開されているARMテンプレートを参考にし、デフォルト値のみを変更しています。

https://github.com/Azure/azure-quickstart-templates/blob/master/101-recovery-services-vault-create/azuredeploy.json

https://docs.microsoft.com/ja-jp/azure/site-recovery/quickstart-create-vault-template?tabs=CLI

基本は参考通りなのですが、以下の点だけ修正しています。

    • バックアップ構成のデフォルト値をローカル冗長になるようにしています。
    • バックアップアラート部分等は設定してません。
    • TAGの設定はしていません。
    • 論理削除はデフォルトの通り有効になります。(無効にする方法が見当たりませんでした。)

skuNameと、skuTierは固定値になります。その為、Parametersの指定ではなく、variablesでの指定としています。

ARMテンプレートでは、バックアップポリシーの規定をしてませんが、Azure Portalを利用して作成した時と同様に、HourlyLogBackupとDefaultPolicyは作成されます。

Recovery Services コンテナーのARMテンプレートはこういう形になりました。

{
  “$schema”: “https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#”,
  “contentVersion”: “1.0.0.0”,
  “parameters”: {
    “vaultName”: {
      “type”: “string”,
      “metadata”: {}
   },
    “changeStorageType”: {
      “type”: “bool”,
      “defaultValue”: true ,
      “metadata”: {}
    },
    “vaultStorageType”: {
      “type”: “string”,
      “defaultValue”: “LocallyRedundant”,
      “allowedValues”: [
        “LocallyRedundant”,
        “GloballyRedundant”
      ],
      “metadata”: {}
    },
    “location”: {
      “type”: “string”,
      “defaultValue”: “[resourceGroup().location]”,
      “metadata”: {}
    }
  },
  “variables”: {
    “skuName”: “RS0”,
    “skuTier”: “Standard”
  },
 “resources”: [
   {
     “type”: “Microsoft.RecoveryServices/vaults”,
     “apiVersion”: “2018-01-10”,
     “name”: “[parameters(‘vaultName’)]”,
     “location”: “[parameters(‘location’)]”,
     “sku”: {
       “name”: “[variables(‘skuName’)]”,
       “tier”: “[variables(‘skuTier’)]”
     },
   “properties”: {}
   },
   {
     “condition”: “[parameters(‘changeStorageType’)]”,
     “type”: “Microsoft.RecoveryServices/vaults/backupstorageconfig”,
     “apiVersion”: “2018-01-10”,
     “name”: “[concat(parameters(‘vaultName’), ‘/vaultstorageconfig’)]”,
     “dependsOn”: [
         “[resourceId(‘Microsoft.RecoveryServices/vaults/’, parameters(‘vaultName’))]”
     ],
     “properties”: {
         “StorageModelType”:”[parameters(‘vaultStorageType’)]”
     }
   }
 ]
}

 

3.Azure Recovery Services コンテナーのパラメータ設定CSV作成する

Azure Recovery Services コンテナーを作成する為にCSVから読み込むパラメータは以下の通りになります。リソースグループ名はデプロイ先のリソースグループ名になります。

    • リソースグループ(ResourceGroupName)
    • リージョン(location)
    • コンテナー名(vaultName)
    • ストレージの種類の変更(changeStorageType)
    • コンテナー ストレージの種類(vaultStorageType)

ストレージの種類の変更と、コンテナーストレージの種類の組み合わせは下記の通りになります。

    • ローカル冗長の場合は、changeStorageTypeをTrue、vaultStorageTypeをLocallyRedundantに指定します。
    • Geo冗長のの場合は、changeStorageTypeをfalse、vaultStorageTypeをGloballyRedundantに指定します。

上記を踏まえてCSVをサンプルで作成以下のようになります。

RG1にローカル冗長、RG2にGeo冗長でデプロイする想定にしています。

ResourceGroupName,location,vaultName,changeStorageType,vaultStorageType
RG1,japaneast,rsc-01,true,LocallyRedundant
RG2,japanwest,rsc-02,false,GloballyRedundant

4.Azure Recovery Services コンテナーをARMテンプレート+Power Shellでデプロイする

ARMテンプレートのパス、CSVのパスを指定してデプロイを実施します。

changeStorageTypeについては、bool形式である為そのままCSVを読み込むとエラーになりました。調べた結果、明示的にBool指定が必要だという事がわかりましたので、# Bool Value行でStriingからBoolに変換しエラーにならないようにしています。

#RecoveryServicesコンテナー Template Deploy

$TemplateFilePath = “ARMテンプレートファイルのパス”
$ImportCSVPath = “パラメータを指定するCSVファイルのパス”

# Inclued Configure Entries
$csv = Import-Csv -path $ImportCSVPath 

# Template Deploy
foreach( $c in $csv ){

# Bool Value
[Bool]$boolValue = [System.Convert]::ToBoolean($c.changeStorageType)

# Deploy Command
New-AzResourceGroupDeployment `
  -ResourceGroupName $c.ResourceGroupName `
  -TemplateFile $TemplateFilePath `
  -location $c.location `
  -changeStorageType $boolValue `
  -vaultStorageType $c.vaultStorageType `
  -vaultName $c.vaultName
}

デプロイが成功すると、Power Shellの実行ログにProvisioningState : Succeededと表示され、実際にAzure Portal上で確認すると設定通り出来ている事が確認できました。

ARMテンプレートを使った場合は、論理削除の設定は有効になっています。