IBM Cloud: Virtual Server for VPC (VSI for VPC) のシステム・バックアップ取得・リストア方法（代替策）〜Windows版〜

# 1. はじめに
IBM CloudのVirtual Server for VPCにおいては、現在システムバックアップを取得する機能がありません。

そこで、本記事では、IBM CloudのVPCのVSI(Virtual Server)のシステム・バックアップ方法について、Virtual Server for Classicとの違いを元に、Virtual Server for VPCの機能を利用したシステムバックアップの代替策を記載します。

後半では、いくつかのパラメータの変化を確認しました。
Image Templateを取得しているためデータや設定は基本的に変更されていないはずですが、Image templateという複数のサーバーを生成する仕組みの上で、元のサーバーと変わってしまっていないかという箇所を重点的に選択して確認してみました。

### RHEL版システムバックアップ・リストア代替案
RHEL版は以下に記載しておりますので、ご参照ください。
[IBM Cloud: VSI for VPC のシステム・バックアップ取得・リストア方法 (代替策) 〜RHEL版〜](https://qiita.com/takason/items/800ae329799a15e5b923)

### Virtual Private Cloud (VPC)のシステムバックアップ、及び、代替策
しかしながら、IBM CloudのVPC上のVSIにはClassicのような、イメージからブートする・ロードするといった機能に相当する機能がなく、VPCのVSIでOSのリカバリが必要となった場合、新たにVSIを作成する方法しかございません。この場合、通常のオペレーションでは、IPアドレスなどが変更されてしまい、システムバックアップとしては利用できないこととなります。

そこでシステムバックアップの代替策として、VSIのimage template機能を利用した手順をご案内いたします。この手順に則れば、OSの構成やソフトウェアの導入・構成など、起動ディスクに関する構成情報をリストアすることが可能となり、システムバックアップと同等の効果を得ることができます。（あくまで代替案ですので、ご理解ください...）

バックアップ手順：
　　1. boot volumeのイメージを作成

リストア手順：
　　1. リストア対象のVSIを削除
　　2. イメージリストア用のAPIコマンドの作成（そこで、IPアドレスを指定）
　　3. APIコマンドの実行

システムリストアで、元のVSIと同じIPアドレスを付与する場合、IPアドレスがかぶらないように、新規VSI作成前に古いVSIを削除しておく必要があります。

# 2. VPC上のVSIのバックアップ作成 ＆ リストアストア手順について

以下の流れに沿って、手順についてご紹介いたします。
　　1. 今回利用したバックアップ対象環境概要
　　2. イメージを利用したバックアップ手順
　　3. リストア手順
　　4. リストア後の確認（パラメータなどの変更点の確認）

### 2-1. 今回利用したバックアップ対象環境概要
今回利用したVSIの概要について説明いたします。イメージ作成するVSIのOSは以下の通りです。

   - OS: Windows Server 2019 Standard Edition (amd64)


### 2-2 バックアップの取得（boot volumeイメージの作成）
VSIの詳細画面からアクションメニュー → インスタンスの停止を選択し、対象のVSIを停止します。
**※ boot volumeイメージの作成する場合は、システム停止が必須となります。**
1. VSIの詳細画面から`アクションメニュー` → `インスタンスの停止`を選択し、対象のVSIを停止します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/9cc2ac0e-a42f-de47-1ac7-bc31495348ad.png" width=50%>
2. 同様に、VSIの詳細画面から`アクションメニュー` → `イメージの作成`を実行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/f364fa0c-9295-05fc-6f54-a9f3eef0b486.png" width=50%>
3. イメージが作成されました。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/e51b141a-5037-b581-5105-ccf3b8bc57f5.png width=80%>


# 3. システム・リストア方法
### 3-0.　削除前の注意
サーバーを削除する前に、以下をご確認ください。

- カスタム・イメージから作成された新規VSIにログインする際は、古いVSIのログインパスワードを使用する必要があります(2022年1月5日現在)。対応され次第、更新いたします。
- 可能であれば一度同じVPC or 異なるVPCで、Image templateを使ってサーバーが正しくプロビジョニングできることを確認する。
    - 異なるVPCであれば同じIPアドレスが使用可能です。
-  Boot volumeも自動削除を無効にしておき、万が一消去された設定があったときにリストアできるように備えておく。新環境の十分な確認を以って削除する。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/da8b05e4-c2ab-278c-4bdf-e4e5ccd36748.png width=80%>

### 3-1. リストア対象のVSIを削除

VSIの詳細画面から`アクションメニュー` → `インスタンスの削除`を選択し、対象のVSIを停止します。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/3b7e14ab-fe42-d944-4f05-6b06bdc86424.png width=50%>

### 3-2. イメージリストア用のAPIコマンドの作成（そこで、IPアドレスを指定）

1.インスタンス作成画面にて、`オペレーティング・システム` → `カスタム・イメージ`からリストア対象VSIのイメージを選択し、`サンプルAPI呼び出しの取得`をクリックします。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/0ba0ab59-1d27-22cd-951d-7175204e51b2.png width=80%>

2.以下のような画面が表示されるので赤枠部分をクリックしてコピーし、シェルスクリプトとして保存します。
（create_vsi.shファイルを作成し、コピーしたものを中にペースト）
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/74c0e5c7-e9b1-7d9d-4a98-0450dca2b299.png width=65%>

3.IPアドレスの指定がないので、`primary_netowork_interface`内に `primary_ipv4_address`フィールドを追加します。

```
（省略）
  "primary_network_interface": {
    "name": "eth0",
    "primary_ipv4_address": "10.1.0.8",　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　# <- この行を追加
    "allow_ip_spoofing": false,
    "subnet": {
      "id": "02e7-ff96ff2a-fa27-4d88-b855-98fb85112636"
    },
    "security_groups": [
      {
        "id": "r022-1a2bb9f2-7647-4332-8a1b-eb925fb6e160"
      }
    ]
  },
（省略）
```

### 3-3. リストアのAPIコマンドの実行
1.IAMトークンの取得 コピーしたAPIを実行する際に$iam_tokenを使用するので、以下のコマンドでIAMトークンを取得します。
アクセストークン取得に関しての詳細は[こちら](https://cloud.ibm.com/docs/key-protect?topic=key-protect-retrieve-access-token&locale=ja)。

```
# export iam_token=`ibmcloud iam oauth-tokens | awk '{printf $4}'`
```

2.シェルスクリプトを実行すると、VSIが作成されます。

```
# sh create_vsi.sh
{"bandwidth":4000,"boot_volume_attachment":......
(省略)
```

3.VSI作成されたことを確認
これで無事にリストアすることができました。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/b791651d-8a15-aa02-2ae0-726ec2dbff9b.png width=70%>

IPアドレスもリストア対象のVSIと同じものが割り当てられています。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2199676/751522ca-44dd-490c-ef2a-a49c581b5376.png width=80%>


# 4. リストア後の確認（パラメータなどの変更点の確認）
リストア前後の変更点を、以下のパラメータで確認してみます。
　　1. ホスト名
　　1. IPアドレス・MACアドレス
　　2. system uuid
　　3. WindowsのSID


### 4-1. ホスト名
ホスト名は変更されません。

```:リストア前VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> hostname
vsi-backup-wind
PS C:\Users\Administrator.VSI-BACKUP-WIND>
```
```:リストア後VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> hostname
vsi-backup-wind
PS C:\Users\Administrator.VSI-BACKUP-WIND>
```

### 4-2. IPアドレス、MACアドレス
MACアドレスは変更されています。

```:リストア前VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> ipconfig

Windows IP Configuration


Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::f46c:823:559d:ed1e%5
   IPv4 Address. . . . . . . . . . . : 10.1.0.8
   Subnet Mask . . . . . . . . . . . : 255.255.255.240
   Default Gateway . . . . . . . . . : 10.1.0.1
PS C:\Users\Administrator.VSI-BACKUP-WIND> getmac

Physical Address    Transport Name
=================== ==========================================================
02-00-09-12-7D-F4   \Device\Tcpip_{84A7D803-3165-45C3-9507-4A4901706286}
PS C:\Users\Administrator.VSI-BACKUP-WIND>
```


```:リストア後VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> ipconfig

Windows IP Configuration


Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::78cc:c448:f68:363c%5
   IPv4 Address. . . . . . . . . . . : 10.1.0.8
   Subnet Mask . . . . . . . . . . . : 255.255.255.240
   Default Gateway . . . . . . . . . : 10.1.0.1
PS C:\Users\Administrator.VSI-BACKUP-WIND> getmac

Physical Address    Transport Name
=================== ==========================================================
02-00-01-12-7D-F4   \Device\Tcpip_{84A7D803-3165-45C3-9507-4A4901706286}
PS C:\Users\Administrator.VSI-BACKUP-WIND>
```



### 4-3. system uuid
system uuidは異なるidが付与されていました。

```:リストア前VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> wmic csproduct
Caption                  Description              IdentifyingNumber  Name                               SKUNumber  UUID                                  Vendor  Version
Computer System Product  Computer System Product                     Standard PC (i440FX + PIIX, 1996)             C9DA2E0F-3DF7-4882-8E0C-DA5CBA37CF5F  QEMU    pc-i440fx-4.2

PS C:\Users\Administrator.VSI-BACKUP-WIND>
```

```:リストア後VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> wmic csproduct
Caption                  Description              IdentifyingNumber  Name                               SKUNumber  UUID                                  Vendor  Version
Computer System Product  Computer System Product                     Standard PC (i440FX + PIIX, 1996)             F198CB7B-B96D-4051-A1AB-F90EF89D4B47  QEMU    pc-i440fx-4.2

PS C:\Users\Administrator.VSI-BACKUP-WIND>
```


### 4-4. WindowsのSID
Windows SIDに変化はありませんでした。

```:リストア前VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> whoami /user

USER INFORMATION
----------------

User Name                     SID
============================= ==========================================
vsi-backup-wind\administrator S-1-5-21-717884812-772969075-746249257-500
PS C:\Users\Administrator.VSI-BACKUP-WIND>
```

```:リストア後VSI
PS C:\Users\Administrator.VSI-BACKUP-WIND> whoami /user

USER INFORMATION
----------------

User Name                     SID
============================= ==========================================
vsi-backup-wind\administrator S-1-5-21-717884812-772969075-746249257-500
PS C:\Users\Administrator.VSI-BACKUP-WIND>
```



# 5. リカバリの際にも元のVSIを残しておく運用方法を取りたいと言う場合
最初からCLIかAPIを使ってsecondary Interfaceを定義して利用するIP addressを明示的に指定してください。リカバリの際には、一旦異なるprimary IP addressで新たなVSIを作成し、元のVSIからsecondary IP addressを削除して、新たなVSIにsecondary interfaceとそのIP addressを明示的に指定して追加することで、secondary IP addressを旧VSIから新VSIに移動してください。

# 注意
Imageの作成の際には、VSIを停止する必要があるので、日常的なシステムバックアップとして使うことは難しいと思います。OSのupgradeなど、停止を伴う作業の際に、Imageの作成をし直すなどの工夫が必要でしょう。

## 参考
IPアドレス指定のプロビジョニングに関して、こちらを参考にさせていただきました。
[IBM Cloud: VPCのVSIをIPアドレス指定でプロビジョニングする方法](https://qiita.com/testnin2/items/337bc02892024fb684a3)