さくらのクラウド APIを利用してアーカイブ作製
Contents
さくらのクラウドで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関連記事
ディスカッション
コメント一覧
まだ、コメントがありません