
usacloudでアーカイブを取得する
こんにちは、kinjoです。
今回はさくらのクラウドでアーカイブバックアップの設定をしたときの話をさせていただきます。
さくらのクラウドではアーカイブ機能でディスクのバックアップを取得することが可能です。
そして、定期的にバックアップを取ってくれる「自動バックアップ」機能があります。
「自動バックアップ」機能を利用して、バックアップを設定しようとしたのですが、
残念ながら、「東京第1ゾーンでは新規受付を停止させていただいております」となっており設定ができませんでした。
コントロールパネル上からアーカイブは取得できるようでしたので、
「Usacloud」というさくらのクラウド用のCLIクライアントツールを利用させてもらいました。
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に登録してしまえば、「自動バックアップ」では選択できない曜日や時間帯等好きに指定できますね。






