テックブログ

usacloudでアーカイブを取得する

こんにちは、kinjoです。

今回はさくらのクラウドでアーカイブバックアップの設定をしたときの話をさせていただきます。

さくらのクラウドではアーカイブ機能でディスクのバックアップを取得することが可能です。
そして、定期的にバックアップを取ってくれる「自動バックアップ」機能があります。

「自動バックアップ」機能を利用して、バックアップを設定しようとしたのですが、
残念ながら、「東京第1ゾーンでは新規受付を停止させていただいております」となっており設定ができませんでした。

コントロールパネル上からアーカイブは取得できるようでしたので、
「Usacloud」というさくらのクラウド用のCLIクライアントツールを利用させてもらいました。

Usacloud導入ガイド

Usacloud のインストールは簡単で導入ガイドの通りコマンド打つだけです。

# curl -fsSL https://usacloud.b.sakurastorage.jp/repos/setup-yum.sh | sh

あとは、API利用のためのトークン等の設定をすれば「Usacloud」の準備は完了です。

# usacloud config
Setting SakuraCloud API Token =>
        Enter token: <トークン入力>

Setting SakuraCloud API Secret =>
        Enter secret: <シークレットキー入力>

Setting SakuraCloud Zone =>

        Enter zone[is1a/is1b/tk1a/tk1v]: tk1a

Written your settings to /root/.usacloud/default/config.json

実際に利用できるかテストしてみます。

# usacloud server ls
+--------------+-------+-----+--------+----------------+--------+
|      ID      | Name  | CPU | Memory |   IPAddress    | Status |
+--------------+-------+-----+--------+----------------+--------+
| XXXXXXXXXXXX | TEST1 | 4   | 8192MB | xx.xxx.xxx.xx/ | up     |
+--------------+-------+-----+--------+----------------+--------+

アーカイブを取得してみましょう。
まずはディスクのIDを確認します。

# usacloud disk ls
+--------------+-------+---------------------+------+---------+------------+
|      ID      | Name  |       Server        | Plan |  Size   | Connection |
+--------------+-------+---------------------+------+---------+------------+
| 112XXXXXXXXX | TEST1 | XXXXXXXXXXXX(TEST1) | ssd  | 40960MB | virtio     |
+--------------+-------+---------------------+------+---------+------------+

確認したディスクのIDを指定してアーカイブを取得してみます。

# usacloud archive create --source-disk-id 112XXXXXXXXX --name daily_backup --tags test_backup
Are you sure you want to create?(y/n) [n]: y
Copy archive[ID:112901129769] is started...
        Still coping[ID:112901129769]... (10s elapsed)
        Still coping[ID:112901129769]... (20s elapsed)
        ~略~
Copy archive[ID:112901129769] is finished
+--------------------------+---------------------------+
|           Name           |           Value           |
+--------------------------+---------------------------+
| Availability             | migrating                 |
| CreatedAt                | 2017-09-06T17:01:09+09:00 |
| Description              | -                         |
| ID                       | 112901129769              |
| Icon                     | -                         |
| Name                     | daily_backup              |
| Scope                    | user                      |
| ServiceClass             | cloud/archive/40g         |
| SizeMB                   | 40960                     |
| OriginalArchive.ID       | 112901129769              |
| Plan.ID                  | 2                         |
| SourceDisk.Availability  | available                 |
| SourceDisk.Description   | -                         |
| SourceDisk.ID            | 112XXXXXXXXX              |
| SourceDisk.Icon          | -                         |
| SourceDisk.Name          | TEST1                     |
| SourceDisk.SizeMB        | 40960                     |
| SourceDisk.Tags          | -                         |
| Tags.0                   | test_backup               |
| SourceDisk.Plan.ID       | 4                         |
| SourceDisk.Storage.Class | iscsi1204                 |
| SourceDisk.Storage.ID    | xxxxxxxxxx                |
+--------------------------+---------------------------+

アーカイブの一覧を確認してみます。

# usacloud archive ls --scope user
+--------------+--------------+-------+
|      ID      |     Name     | Scope |
+--------------+--------------+-------+
| 112901129769 | daily_backup | user  |
+--------------+--------------+-------+

アーカイブを削除してみます。

# usacloud archive delete 112901129769

Target resource IDs => [
        112901129769
]
Are you sure you want to delete?(y/n) [n]: y
+--------------------------+---------------------------+
|           Name           |           Value           |
+--------------------------+---------------------------+
| Availability             | discontinued              |
| CreatedAt                | 2017-09-06T17:21:59+09:00 |
| Description              | -                         |
| ID                       | 112901129769              |
| Icon                     | -                         |
| MigratedMB               | 40960                     |
| Name                     | daily_backup              |
| Scope                    | user                      |
| ServiceClass             | cloud/archive/40g         |
| SizeMB                   | 40960                     |
| OriginalArchive.ID       | 112901129769              |
| Plan.ID                  | 2                         |
| SourceDisk.Availability  | available                 |
| SourceDisk.Description   | -                         |
| SourceDisk.ID            | 112XXXXXXXXX              |
| SourceDisk.Icon          | -                         |
| SourceDisk.Name          | TEST1                     |
| SourceDisk.SizeMB        | 40960                     |
| SourceDisk.Tags          | -                         |
| Tags.0                   | test_backup               |
| SourceDisk.Plan.ID       | 4                         |
| SourceDisk.Storage.Class | iscsi1204                 |
| SourceDisk.Storage.ID    | xxxxxxxxxx                |
+--------------------------+---------------------------+

「–output-type json」オプションを利用すれば出力がjson形式になりますので、jqコマンド等の利用でID等が取得しやすくなります。
ここまでできれば後はシェルスクリプト等を作成してやればcronで定期処理が可能ですね。

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin

TODAY=`date "+%Y%m%d"`
DISK_ID="112XXXXXXXXX"
NAME="dailybackup-${TODAY}"
TAGS="auto_backup"
ROTATE=7

echo "---- Create Archive ----"
usacloud archive create --source-disk-id $DISK_ID --name $NAME --tags $TAGS -y

ArchiveIds=`usacloud archive ls --scope user --tags $TAGS --sort CreatedAt --output-type json |jq "reverse | .[${ROTATE}:]|.[].ID"`
for Id in $ArchiveIds
do
    echo "---- Delete Archive $Id ----"
    usacloud archive delete -y $Id
done

echo "---- Archives ----"
usacloud archive ls --scope user --tags $TAGS
# crontab -e
0 3 * * * /path/to/backup.sh >/path/to/log 2>&1

上記はエラー処理等しておりませんが、適宜、リトライや通知など行ってください。

cronに登録してしまえば、「自動バックアップ」では選択できない曜日や時間帯等好きに指定できますね。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください