さくらのクラウドでAPIを利用した自動アーカイブのシェルスクリプト
前回の記事(yumで「jq」コマンドをインストールする )で、JSONを利用できるになったので、さくらのクラウドのAPIを利用して自動アーカイブを作成するシェルスクリプトを作製します。
自動アーカイブの流れですが、2つのシェルスクリプトで動作します。1個目は「アーカイブを作成するシェルスクリプト」2個目は「古いアーカイブあれば削除するシェルスクリプト」です
また、本記事とは別で保存されているアーカイブリストをメールするシェルスクリプトも作製します。Cronでアーカイブが作成された後に実行するようにして、アーカイブが毎日きちんと作成されているかメールで確認できるようにします
私の環境ではアーカイブは前日分の1世代のみ保存する仕様で作製しています。複数の世代を保存する場合はシェルスクリプトの改変が必要です
APIを利用してアーカイブを作成するシェルスクリプト
さくらのクラウドで自動で動作するシェルスクリプトですが、以下のような流れになります。
- アーカイブの名前を元に絞り込みで、アーカイブIDを取得します。
※このアーカイブIDは古いアーカイブあれば削除するシェルスクリプト」で使用します - 取得したアーカイブIDをファイルに保存してIDの件数を取得します
- 1世代しか保存しないので、1個のアーカイブIDがあればOKです、なければ指定したアドレスにメールして処理を終了します。
- アーカイブIDが1個なら、アーカイブ作製をします
#!/bin/bash
# https://secure.sakura.ad.jp/cloud/zone/tk1a/api/cloud/1.1/ (東京第1ゾーン)
# https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/ (石狩第1ゾーン)
# https://secure.sakura.ad.jp/cloud/zone/is1b/api/cloud/1.1/ (石狩第2ゾーン)
# https://secure.sakura.ad.jp/cloud/zone/tk1v/api/cloud/1.1/ (Sandbox)
TDAY=`date +%Y%m%d`
access_token=XXXXXXX
access_token_secret=XXXXXXX
url=https://secure.sakura.ad.jp/cloud/zone/tk1a/api/cloud/1.1/archive
idfile=/var/tmp/archiveid.txt
SUBJECT=SakuraCloud_Archive_Error
MAILADDR=hoge@example.com
# Name:www01_archiveで絞り込んでアーカイブIDを取得します。
# このIDは今保存されているアーカイブのIDとなります
archiveid=`curl --user "$access_token":"$access_token_secret" -H 'X-Sakura-API-Beautify:1' $url 2>/dev/null | jq -r '. .Archives [] | select(.Name | contains("www01_archive")) | .ID'`
# 取得したIDが空白ではないかのチェックをします
if [ -n ${archiveid} ]; then
# 取得したIDが空白ではない場合は、IDを保存して件数を取得します
echo "$ArchiveID" > $idfile
idcnt=`cat $idfile | wc -l`
if [ $idcnt = 1 ]; then
#アーカイブIDが1個なら1世代のみ保存されている状態ですので、アーカイブを作製します
curl --user "$access_token":"$access_token_secret" \
-X POST \
-d '{"Archive":{"Name":"www01_archive","Description":"www01_archivebackup","SourceDisk":{"ID":"XXXXXXXXXXXX"}}}' $url
else
# アーカイブIDが1個ではない場合は、エラーメールを任意のアドレスに送信します
echo "sakura archive err : ID_CNT:$idcnt" | mail "$SUBJECT" $MAILADDR
rm -f $idfile
fi
else
# アーカイブIDが空白ならエラーメールを任意のアドレスに送信します
echo "sakura archive err : Null" | mail "$SUBJECT" $MAILADDR
fi
- 「Access Token」「Access Token Secret 」「MAILADDR」等の使用する環境に変更して下さい
- Curlコマンド内の「Name」「Description」も使用する環境に変更して下さい。筆者の場合はホスト名はwww01だったので(www01_archive)としています
APIを利用して古いアーカイブあれば削除するシェルスクリプト
削除するシェルスクリプトですが、以下のような流れになります
- 「アーカイブを作成するシェルスクリプト」で作製したアーカイブIDのファイルがあるかどうかのチェックをします
- アーカイブIDのファイルが無かった場合は、処理を終了します
- アーカイブIDのファイルが有った場合は、削除対象のアーカイブIDとします
- アーカイブの名前を元に絞り込みで、アーカイブIDの件数を確認します
- アーカイブIDの件数が2個なら、(3)で取得したアーカイブIDのアーカイブを削除します
- アーカイブIDが件数が3個以上なら、エラーメールを送信します
#!/bin/bash
# https://secure.sakura.ad.jp/cloud/zone/tk1a/api/cloud/1.1/ (東京第1ゾーン)
# https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/ (石狩第1ゾーン)
# https://secure.sakura.ad.jp/cloud/zone/is1b/api/cloud/1.1/ (石狩第2ゾーン)
# https://secure.sakura.ad.jp/cloud/zone/tk1v/api/cloud/1.1/ (Sandbox)
TDAY=`date +%Y%m%d`
HOSTNAME=`/bin/hostname`
access_token=XXXXXXX
access_token_secret=XXXXXXX
url=https://secure.sakura.ad.jp/cloud/zone/tk1a/api/cloud/1.1/archive
idfile=/var/tmp/archiveid.txt
idcntfile=/var/tmp/archiveidcnt.txt
SUBJECT=SakuraCloud_ArchiveCheck_Error
MAILADDR=hoge@example.com
# 前日のアーカイブIDが保存されているファイルがあるかどうか確認します
if [ ! -e $idfile ] ; then
echo "SakuraCloud_ArchiveCheck_Error idfile none" | mail "$SUBJECT" ${MAILADDR}
exit
else
ArchiveID=`cat $idfile`
fi
# Name:www01_archiveで絞り込んでアーカイブIDを取得してアーカイブIDの件数を取得します
# アーカイブが作製されたあとの場合は件数が2となります
curl --user "$access_token":"$access_token_secret" -H 'X-Sakura-API-Beautify:1' $url 2>/dev/null | jq -r '. .Archives [] | select(.Name | contains("www01_archive")) | .ID' > $idcntfile
ArchiveCnt=`cat $idcntfile | wc -l`
# アーカイブIDが2世代あるか確認します
if [ $ArchiveCnt = 2 ] ; then
# アーカイブIDが2世代あるばあいは、前日分のアーカイブIDのアーカイブを削除します
curl --user "$access_token":"$access_token_secret" \
-X DELETE \
-H 'X-Sakura-API-Beautify:1' ${url}/${ArchiveID}
else
# アーカイブIDが3世代分ある場合はエラーメールを送信します
if [ $ArchiveCnt -ge 3 ] ; then
echo "sakura archive Check error" | mail "$SUBJECT" $MAILADDR
fi
fi
- 「Access Token」「Access Token Secret 」「MAILADDR」等の使用する環境に変更して下さい
- Curlコマンド内の「Name」「Description」も使用する環境に変更して下さい。筆者の場合はホスト名はwww01だったので(www01_archive)としています
アーカイブ作製・削除・確認するシェルスクリプトをCronに登録する
上記で制作したシェルスクリプトをCronに登録します。
アーカイブを作成するシェルスクリプトは「CreateArchive.sh」として、毎日6時に実行されます
アーカイブが2世代以上ある場合に削除するシェルスクリプトは「CheckArchive.sh」として30分毎に実行されます。
0 6 * * * /xxx/xxx/CreateArchive.sh >/dev/null 2>&1 */30 * * * * /xxx/xxx/CheckArchive.sh >/dev/null 2>&1
さくらのクラウドAPI関連記事


コメント