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