🐈

CloudSQL のオンデマンドバックアップを作成 & 最新 N 件のみ保持

2022/02/11に公開

レビューの際にちょこっと調べたのでメモ

結論

オンデマンドバックアップを作成しつつ最新 3 件のみ保持するようにするならこんな感じのやーつを実行すれば良い

# sample.sh
set -euo pipefail
INSTANCE=YOUR_INSTANCE_NAME
PROJECT=YOUR_PROJECT_ID
MAX_ON_DEMAND_BACKUPS_NUM=3
gcloud sql backups create --instance="$INSTANCE" --project="$PROJECT"
ON_DEMAND_BACKUP_IDS=$(gcloud sql backups list --instance="$INSTANCE" --project="$PROJECT"  --filter="type:ON_DEMAND" | grep SUCCESSFUL | awk '{print $1}' | sort -r)
ON_DEMAND_BACKUPS_NUM=$(echo "$ON_DEMAND_BACKUP_IDS" | wc -l | tr -d ' ')
if [ $ON_DEMAND_BACKUPS_NUM -gt $MAX_ON_DEMAND_BACKUPS_NUM ]; then
  BACKUP_IDS_TO_DELETE=$(echo "$ON_DEMAND_BACKUP_IDS" | tail -n +$((MAX_ON_DEMAND_BACKUPS_NUM+1)))
  echo "$BACKUP_IDS_TO_DELETE" | xargs -IXX gcloud sql backups delete XX --instance="$INSTANCE" --project="$PROJECT"
fi

背景

アプリケーションコードの修正が実働環境に反映される前に、アプリケーションに紐づく CloudSQL インスタンスのオンデマンドバックアップを作成する CI/CD を用意したかった。

オンデマンドバックアップは、自動バックアップと異なり、自動的に削除されません。 明示的に削除するか、インスタンスが削除されるまで維持されます。オンデマンドバックアップは自動的に削除されないため、請求料金に長期間な影響を及ぼす可能性があります。

とのことなので、料金節約のために最新 N 件のみを保持して古いオンデマンドバックアップを削除した方がいいかも、ということになった。

P.S.

オンデマンドバックアップも増分バックアップなのかしら?だとするとそもそも古いオンデマンドバックアップを削除しても大して料金節約できない気もするな?
バックアップのサイズ知りたいな。

Discussion