また不細工なスクリプトが出来てしまった・・・
#!/bin/bash
#CREATE zin@alterworks.tokyo
#DATE 2020-12-29
##set Generation
declare -i val_GEN_=1
##set profile $val_PROF_
if [ "${1}"=="" ]; then
val_PROF_=profile1
else
val_PROF_=${1}
fi
##set $val_APPTAG_
if [ "${2}"=="" ]; then
val_APPTAG_=application.url
else
val_PROF_=${2}
fi
##set description $val_DESCRIPT_
val_NOW_=`date +%Y%m%d_%H`
val_DESCRIPT_="Create by ${0} - ${val_NOW_}"
##get volume id ${arr_VOLIDS_[]}
declare -a arr_VOLNAME_=("app-strage" "data-strage")
declare -a arr_VOLIDS_
for i in ${arr_VOLNAME_[@]}
do
arr_VOLIDS_=(${arr_VOLIDS_[@]} `aws --profile ${val_PROF_} ec2 describe-volumes --filters Name="tag:Name",Values=${i} --query "Volumes[*].VolumeId" --output text`)
done
##create snapshots
val_VOLIDCOUNT_=`expr ${#arr_VOLIDS_[@]} - 1`
for x in `seq 0 ${val_VOLIDCOUNT_}`
do
aws --profile ${val_PROF_} ec2 create-snapshot \
--description "${val_DESCRIPT_}" \
--volume-id ${arr_VOLIDS_[${x}]} \
--tag-specifications "ResourceType=snapshot,Tags=[{Key=Name,Value=${arr_VOLNAME_[${x}]}},{Key=APP,Value=${val_APPTAG_}}]" >> /tmp/${0}-${val_NOW_}.log
sleep 3
done
##rotate Generatation
declare -i val_SNAPCOUNT_
declare -i val_BORDER_
for c in `seq 0 ${val_VOLIDCOUNT_}`
do
val_SNAPCOUNT_=`aws --profile ${val_PROF_} ec2 describe-snapshots --owner-ids self --filters Name=volume-id,Values=${arr_VOLIDS_[${c}]} --query "Snapshots[*].[SnapshotId]" --output text | wc -l`
if [ "${val_SNAPCOUNT_}" -le "${val_GEN_}" ]; then
echo No deleted snapshots.
exit 0
else
val_BORDER_=`expr ${val_SNAPCOUNT_} - ${val_GEN_}`
arr_DELSNAPIDS_=(`aws --profile ${val_PROF_} \
ec2 describe-snapshots --owner-ids self \
--filters Name=volume-id,Values=${arr_VOLIDS_[${c}]} \
--query "reverse(sort_by(Snapshots,&StartTime))[*].[SnapshotId]" --output text | tail -n ${val_BORDER_}`)
for n in ${arr_DELSNAPIDS_[*]}
do
aws --profile ${val_PROF_} ec2 delete-snapshot --snapshot-id ${n}
if [ "$?" -eq "0" ]; then
echo "deleted ${n} --- ${val_NOW_}" >> /tmp/${0}-${val_NOW_}.log
else
echo "failed ${n} deleting --- ${val_NOW_}" >> /tmp/${0}-${val_NOW_}.log
fi
sleep 2
done
fi
done
declare -i valGEN=1
ここのとこの数字を変えれば残しておく世代数を変更できるよ。
EBSボリュームの「Name」タグを指定してSnapshotを作成。 「declare -a arrVOLNAME=("app-strage" "data-strage")」これね。 新しい順に世代数分残して、古いスナップショットを削除します。
今日はここまで
awscli bash script AWS Snapshot