RDSのスナップショットを削除するスクリプトを書いた

#

2020年3月からRDSのバックアップスナップショットに料金がかかるよう。使用しているディスク容量分までは無料だが、それ以降は従量課金で保存することになる。 自動バックアップは1GBあたり0.023USDとなるため、10000GiBのデータを持って、自動バックアップが7日間有効としていれば、1ヶ月で35万ほどかかることになる。😢 正直バックアップを使うことはめったになく、古いデータであってもしょうがないし、アマゾンの高耐久性からいって2日分バックアップがあれば十分であろう これはRDSの設定のバックアップ設定をよしなに変えれば良し。 ただ、プロダクトでメンテ開始時になにかあったときのために手動バックアップをとっていて、これがこんもりと溜まっていた。 今後もこれを監視するのは面倒なのでスクリプトを書いた

# 8日以上前に作られたDBクラスタスナップショットを削除する

targets=("product-cluster-a" "product-cluster-b" "product-cluster-c")

for target in ${targets[@]}
do
  echo "target :" $target
  tmpfile=$(mktemp)
  aws rds describe-db-cluster-snapshots --db-cluster-identifier $target > $tmpfile
  data=$(cat $tmpfile | jq '.[]')
  len=$(echo $data | jq length )

  for i in $( seq 0 $(($len - 1))  ); do
    row=$(echo $data | jq .[$i])
    createTimeRaw=$(echo $row | jq -r '.SnapshotCreateTime')
    DBClusterSnapshotIdentifier=$(echo $row | jq -r '.DBClusterSnapshotIdentifier')
    createTime=$(date --date=$createTimeRaw "+%Y-%m-%d %H:%M:%S")
    deleteDate=$(date -d '8 day ago' "+%Y-%m-%d %H:%M:%S")
    if [[ "$createTime" < "$deleteDate" ]];then
      echo "It should be deleted "
      aws rds delete-db-cluster-snapshot --db-cluster-snapshot-identifier $DBClusterSnapshotIdentifier
    else
      echo "This snapshot is safe "
    fi
  done
done

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

jsonで返ってくるのでjqコマンドで必要な情報を取り出した

createTime=$(date --date=$createTimeRaw "+%Y-%m-%d %H:%M:%S")
1

AWSCLIから返ってくるSnapshotCreateTimeが[2020-01-14T19:09:35.660Z]の形式になっていたがdateコマンドでうまく整形して比較できた