IBM CloudのVirtual Server for VPCで取得したBlock Storage Snapshotから仮想サーバーをリストアする

# はじめに
IBM CloudのVirtual Server for VPCでは、Block Storageのスナップショットを取得することが可能です。この機能は仮想サーバーのある瞬間のデータコピーを取得することができるもので、バックアップ目的での利用を検討することも多いと思います。

しかし、記事執筆時点(2024/07/30)では、取得したスナップショットは直接既存のボリュームに対してリストアすることはできず、スナップショットから新規のボリュームを作成して仮想サーバーに割り当てる必要があります。また、OSのイメージが格納されているブート・ボリュームに関しては既存のサーバーに割り当てることはできず、新規のサーバーをデプロイする際に選択することができるのみになります。

そのため、この記事では上記の機能上の特徴を踏まえた上で実際にBlock Storage Snapshot for VPCをバックアップとして利用する際の注意点や運用方法について確認し、その手順をまとめていきます。

:::note info
現在はVNI(仮想ネットワークインターフェース)に対して2次IPアドレスを設定することが可能です。これから新しくデプロイするサーバーに関しては2次IPアドレスを利用する設計にしておくことで、新しいサーバーへの付け替えが可能となります。古いサーバーを削除せずに新しいサーバーから同じIPアドレスを利用するような構成も可能ですので、ぜひ利用をご検討ください。
:::

# スナップショットの取得方法
まずは、Block Storage Snapshot for VPCを活用してデータのスナップショットを取得します。

ハンバーガーメニューの「インフラストラクチャー」から「ストレージ」->「ブロック・ストレージ・スナップショット」を選択し、「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/7af2fcdb-2627-dde5-61d0-e483cda6986c.png)


VPCのBlock Storageでは、単一のボリュームに対するスナップショットだけでなく、複数のボリュームに対してデータ整合性を保った状態で同時にデータコピーを取得することも可能です。Consistency Group(整合性グループ)と呼ばれており、複数のスナップショットを1つのIDで管理する形になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/7c4d0821-f6bb-aa6c-275a-0f6f4c42d4a0.png)

ブート・ボリュームだけでなくデータ・ボリュームをアタッチしている場合など、1つの仮想サーバーに対して複数のボリュームが接続されている場合には整合性グループの利用を検討した方が良いと思います。

スナップショットを取得したいボリュームを選択し、右側の「ブロック・ストレージ・スナップショットの作成」をクリックすることでスナップショットの作成が実行されます。今回は整合性グループで取得しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/eedc29f6-c0ae-24fd-cd64-c16d69e46012.png)

:::note info
なお、Block Storage Snapshot for VPCでは、スナップショットを取得したいボリュームが接続されている仮想サーバーが停止状態の場合は取得することができませんので、ご注意ください。
:::

処理待ち(Pending) -> 安定(Stable)に状態が変化するとスナップショットの取得は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/b893dabb-6513-3cbd-2d66-4ce6e9160704.png)


# リストアの準備と考慮点
取得したスナップショットからサーバーをリストアする上で事前に実施、検討しておくべき項目について記載していきます。

前述した通り、Virtual Server for VPCのスナップショットではサーバー全体を元のサーバーにリストアすることができず、取得したスナップショットから新しいボリュームを作成し、新規インスタンスをデプロイすることで同じデータを持つ別のサーバーとして復旧します。

そのため、リストア後の新規サーバーに同じIPアドレスや同じ名前を利用したい場合は既存のサーバーを削除してから新しくデプロイする必要があり、通常のバックアップリストアとは異なる運用になります。


# リストアの手順について

ここからは、上記の考慮点を踏まえた上でどのように元の仮想サーバーを復元することができるか、その手順を下記にまとめます。

## 既存の仮想サーバーの情報を保存しておく

まず、既存のサーバーの情報を記録しておき、新しいサーバーをデプロイする際にその情報を再利用することで、同じ構成を持つサーバーをオーダーできるようにしておきます。
- サーバーの名前
- プロファイル(vCPU/メモリ/ネットワーク帯域幅)
- サーバーに登録するSSH Key
- ロケーション(データセンター/Pod)
- 構成のAdd-on(ホスト障害時の自動起動など)
- ストレージボリューム(サイズ/IOPS)
- ネットワークインターフェース(インターフェースの構成/それぞれのReserved IPアドレス/Floating IPアドレス)
- 各インターフェースに割り当てられているセキュリティーグループ

## 付与されているIPアドレスを維持できるように設定する
次に、新しいサーバーをデプロイした際にも同じIPアドレスを利用できるように設定をしておきます。

IBM CloudのVPC仮想サーバーではPrivate IPアドレスとしてReserved IPというものをサブネットから割り当てます。Reserved IPはデフォルトでは仮想サーバーがキャンセルされるのと同時に削除されてしまいますが、自動的に削除されないように設定変更をすることが可能です。

仮想サーバーの詳細画面から「ネットワーキング」タブから「詳細の編集」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/1be54465-9f8d-8b1c-b93e-f46fe41b0a83.png)


「自動開放(Auto-Release)」のトグルをオフにし、「保存」で設定を保存します。これにより、サーバーを削除した場合にもReserved IPを保持しておくことができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/05df3051-aa3c-8bb4-ba71-ad92dffc8145.png)

:::note info
左側のハンバーガーメニューの「サブネット」からサブネットを選択し、「予約済みIP(Reserved IPs)」の「自動開放」のトグルをオフにすることでも自動削除を解除することができます。
:::

ちなみに、インターネットに接続することのできる、いわゆるグローバルIPアドレスであるFloating IPについては仮想サーバーを削除した場合、Unboundという形でサーバーに紐づいていない状態で維持されます。事前にUnbindすることも可能です。


## サーバーのリストア

上記で事前準備は完了です。ここからは実際にリストアを実施します。上述した通り、リストアといっても新しいサーバーに建て替わることになりますので、まずは既存の仮想サーバーを削除します。

左側のハンバーガーメニューのインフラストラクチャーで「仮想サーバー・インスタンス」を選択します。該当のサーバーの右側にあるアクションメニューから「削除」を選択し、サーバーを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/b30b632b-cc0c-2d13-ae14-74d52e22be1d.png)


次に、先ほど取得したスナップショットと、事前に保存した情報を利用し、元のサーバーを再現した新しいサーバーをデプロイします。

仮想サーバーの一覧のページで「作成」をクリックします。

サーバーのイメージを選択する際に、「スナップショット」タブをクリックし、先ほど取得したスナップショットを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/00ac0f4d-c165-8f2b-5ac7-2437f21d18e0.png)


データボリュームについても「スナップショットからインポート」を有効にすることで取得したスナップショットを選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/f2279db7-d14f-b9f3-874b-17d17a4464f8.png)


また、ネットワークの設定では元々の仮想サーバーに付与されていたReserved IPを指定することで同じIPアドレスを利用できます。また、セキュリティーグループについても忘れずに指定しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/879a97cf-5b97-f22f-003f-6c7de444de44.png)


Floating IPについてはオーダー後に追加することが可能となります。サーバーの詳細画面から「ネットワーキング」タブに遷移し、該当のvNICの「浮動IPの編集」から選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103277/5efba177-936a-8229-f493-692aa210e540.png)


オーダーが完了すると、リストア完了です。同じ設定を持った別のサーバーがデプロイされます。

# 接続確認

最後に、リストアした新しいサーバーへのアクセスを確認します。sshで接続しようとすると、別のサーバーに変更された旨のエラーが出ると思います。`ssh-keygen`コマンドでローカルに保存されている接続情報を削除することでアクセスできるようになります。

```shell:
$ ssh root@<IP Address>

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
...


$ ssh-keygen -R <IP Address>
Host <IP Address> found: line xx type RSA
/Users/ytada/.ssh/known_hosts updated.
Original contents retained as /Users/ytada/.ssh/known_hosts.old

$ ssh root@<IP Address>
The authenticity of host 'xxxxxxx (IP Address)' can't be established.
RSA key fingerprint is XX:xx:xx:xx:xx....
Are you sure you want to continue connecting (yes/no)?

```