2026年8月1日
2026年8月1日
VPSのスナップショットを取得する方法:管理画面・CLIでの手順と自動取得、取得後の確認
VPSのスナップショットは、事業者の管理画面から対象サーバーを選んで取得するのが基本で、APIやCLIに対応した事業者なら、コマンド1つで取得したり、毎日決まった時刻に自動で取ったりもできます。大切なのは取得ボタンを押すことよりも、その前の準備と、取ったスナップショットから本当に起動できるかの確認です。この記事では、取得前の準備、管理画面とCLIでの取得手順、古い世代を消しながら自動取得する方法、取得後の起動テストまでを説明します。
取得する前に確認すること
事業者の仕様を確かめる
スナップショットの仕様は事業者によって大きく違います(2026年10月現在)。名称も「スナップショット」「イメージ保存」「バックアップ」などさまざまです。作業前に、公式ドキュメントで次の点を確認してください。
- 稼働中のまま取得できるか、サーバーの停止が必要か
- 保存できる世代数や容量の上限、保存にかかる費用の仕組み
- 自動取得の機能があるか、有料オプションか
- 復元が「今のディスクを上書き」か「新しいサーバーとして作成」か、その両方か
- 追加ディスク(ブロックストレージ)も対象に含まれるか
最後の点は見落としやすいところです。データベースやアップロードファイルを追加ディスクに置いている構成で、起動ディスクだけのスナップショットを取ると、肝心のデータが含まれません。
データベースのダンプを取っておく
稼働中のサーバーのスナップショットは、電源を急に切ったときと同じ状態の保存です。MySQL/MariaDB(InnoDB)は多くの場合その状態からでも起動できますが、念のため直前にダンプを取っておくと、データファイルが回復できなかったときの保険になります。
mysqldump --single-transaction --routines --triggers \
-u backup_user -p wordpress_db > ~/wordpress_db_before_snapshot.sql
ダンプはディスク上に置かれるので、そのままスナップショットにも含まれます。停止できる時間が取れるなら、Webサーバーとデータベースを止めてから取得すると、より安全です。
名前の付け方を決めておく
あとで「どれが何のためのスナップショットか」分からなくなるのは、よくある失敗です。サーバー名、目的、日時を入れた名前に統一しておくと、整理や復元のときに迷いません。
web01-before-php84-20261018web01-auto-20261018-0330
自動取得の分には共通の接頭辞(ここでは web01-auto-)を付けておくと、古い世代を消すスクリプトで対象を絞り込めます。
管理画面から取得する
管理画面の構成は事業者ごとに違いますが、流れはおおむね共通です。
- 対象のサーバーを選び、スナップショット(またはイメージ・バックアップ)の項目を開く
- 停止が必要なサービスなら、OS側で
sudo shutdown -h nowを実行してから管理画面で停止状態を確認する - 名前を入力して取得を開始する
- 一覧で状態が「完了」などになるまで待つ。使用容量が大きいほど時間がかかる
- 停止していた場合はサーバーを起動し、サイトが表示されることを確認する
取得中にディスクへ大量に書き込むと、取得に時間がかかったり、サイトの応答が遅くなったりすることがあります。アクセスの少ない時間帯を選び、取得中は大きなファイルのアップロードやプラグインの一括更新を避けてください。
CLIで取得する
APIを公開している事業者では、公式のCLIツールから取得できます。ここでは例として、DigitalOcean の doctl と AWS Lightsail の AWS CLI を挙げます。オプション名は版によって変わることがあるので、--help や公式ドキュメントで確認してから使ってください。
DigitalOcean の場合:
# Droplet の ID を確認する
doctl compute droplet list --format ID,Name
# スナップショットを取得し、完了まで待つ
doctl compute droplet-action snapshot 123456789 \
--snapshot-name web01-before-php84-20261018 --wait
# 一覧を確認する
doctl compute snapshot list --resource droplet
AWS Lightsail の場合:
aws lightsail create-instance-snapshot \
--instance-name web01 \
--instance-snapshot-name web01-before-php84-20261018
aws lightsail get-instance-snapshots \
--query 'instanceSnapshots[].[name,state,createdAt]' --output table
CLIで扱う利点は、取得と作業を一続きにできることです。たとえば「スナップショットの完了を待ってから、OSのアップグレードを始める」という順序を、手順書ではなくスクリプトとして残せます。
古い世代を消しながら自動で取得する
事業者に自動取得の機能があれば、まずはそれを使うのが手軽です。機能がない場合や、保存する世代数を自分で決めたい場合は、CLIとタイマーで自動化できます。DigitalOcean を例にした、取得と7日より古い自動取得分の削除を行うスクリプトです。
#!/usr/bin/env bash
set -euo pipefail
DROPLET_ID=123456789
PREFIX=web01-auto-
KEEP_DAYS=7
# 新しいスナップショットを取得する(失敗したらここで止まり、削除は行わない)
doctl compute droplet-action snapshot "$DROPLET_ID" \
--snapshot-name "${PREFIX}$(date +%Y%m%d-%H%M)" --wait
# 接頭辞が一致し、KEEP_DAYS より古いものだけ削除する
limit=$(date -u -d "-${KEEP_DAYS} days" +%s)
doctl compute snapshot list --resource droplet \
--format ID,Name,CreatedAt --no-header |
while read -r id name created; do
[[ "$name" == "$PREFIX"* ]] || continue
if (( $(date -u -d "$created" +%s) < limit )); then
echo "delete: $name"
doctl compute snapshot delete "$id" --force
fi
done
このスクリプトのポイントは3つあります。
set -euo pipefailにより、取得に失敗したときは削除の処理に進みません。新しい世代がないまま古い世代だけ消える事態を避けられます- 接頭辞で対象を絞っているので、手動で取った作業前のスナップショットは消されません
- 初めて使うときは
doctl compute snapshot deleteの行をコメントにして、echoの出力だけで対象が正しいかを確認します
実行する場所にも注意が必要です。スナップショットの削除権限を持つAPIトークンを対象のVPS自身に置くと、そのVPSが乗っ取られたときにスナップショットも消される恐れがあります。管理用の別のマシンから実行し、トークンには必要な範囲の権限だけを与えるのが安全です。実行は cron や systemd タイマーで1日1回などに設定します。
取得したら起動テストをする
スナップショットは、そこから起動できて初めて役に立ちます。「新しいサーバーとして作成」ができる事業者なら、本番に影響を与えずに確認できます。
起動テストで注意したいのは、複製したサーバーが本番と同じ設定のまま動き出すことです。
- cron や WP-Cron が動き、予約投稿やメール送信、外部サービスへの連携が二重に実行されることがある
- バックアップのスクリプトが動き、本番と同じ保存先に書き込むことがある
- 決済やメール配信のプラグインが、本物のAPIキーで外部と通信することがある
テスト用のサーバーは、起動したらすぐに cron やメール送信を止めるか、ファイアウォールで外向きの通信を制限してから確認します。DNSは切り替えず、自分のPCの hosts ファイルにテスト用サーバーのIPアドレスとドメインを書いて表示を確かめる方法が便利です。確認が終わったら、テスト用サーバーは削除します。
復元するときの手順
上書きで復元すると、取得時点以降の変更はすべて失われます。復元の前に、現在の状態のダンプかスナップショットを取っておくと、戻す先を間違えたときにも引き返せます。
新しいサーバーとして復元した場合は、IPアドレスが変わることがほとんどです。DNSのAレコード、ファイアウォールの許可設定、外部サービスに登録しているIPアドレスの許可リストを見直してください。作業前の一時的なスナップショットは、作業が問題なく終わって数日たったら削除します。残しておくと容量の上限や費用に影響します。
まとめ
- 取得前に、事業者の仕様(停止の要否、世代数、追加ディスクの扱い)を公式ドキュメントで確かめる
- 直前にデータベースのダンプを取り、名前にはサーバー名・目的・日時を入れる
- CLIに対応した事業者なら、取得と作業を一続きにしたり、世代を整理しながら自動取得したりできる
- 削除権限を持つトークンは対象VPSに置かず、別のマシンから実行する
- 取得後は新しいサーバーとして起動テストを行い、cronや外部通信の二重実行に注意する