さくらのクラウドで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関連記事

  
  
  
  
コメント