さくらのクラウド APIを利用してアーカイブ作製

2018-12-17

さくらのクラウドでAPIを利用した自動アーカイブのシェルスクリプト

前回の記事(yumで「jq」コマンドをインストールする )で、JSONを利用できるになったので、さくらのクラウドのAPIを利用して自動アーカイブを作成するシェルスクリプトを作製します。

自動アーカイブの流れですが、2つのシェルスクリプトで動作します。1個目は「アーカイブを作成するシェルスクリプト」2個目は「古いアーカイブあれば削除するシェルスクリプト」です

また、本記事とは別で保存されているアーカイブリストをメールするシェルスクリプトも作製します。Cronでアーカイブが作成された後に実行するようにして、アーカイブが毎日きちんと作成されているかメールで確認できるようにします

私の環境ではアーカイブは前日分の1世代のみ保存する仕様で作製しています。複数の世代を保存する場合はシェルスクリプトの改変が必要です

APIを利用してアーカイブを作成するシェルスクリプト

さくらのクラウドで自動で動作するシェルスクリプトですが、以下のような流れになります。

  1. アーカイブの名前を元に絞り込みで、アーカイブIDを取得します。
    ※このアーカイブIDは古いアーカイブあれば削除するシェルスクリプト」で使用します
  2. 取得したアーカイブIDをファイルに保存してIDの件数を取得します
  3. 1世代しか保存しないので、1個のアーカイブIDがあればOKです、なければ指定したアドレスにメールして処理を終了します。
  4. アーカイブ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を利用して古いアーカイブあれば削除するシェルスクリプト

削除するシェルスクリプトですが、以下のような流れになります

  1. アーカイブを作成するシェルスクリプト」で作製したアーカイブIDのファイルがあるかどうかのチェックをします
  2. アーカイブIDのファイルが無かった場合は、処理を終了します
  3. アーカイブIDのファイルが有った場合は、削除対象のアーカイブIDとします
  4. アーカイブの名前を元に絞り込みで、アーカイブIDの件数を確認します
  5. アーカイブIDの件数が2個なら、(3)で取得したアーカイブIDのアーカイブを削除します
  6. アーカイブ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関連記事

 

スポンサーリンク