TL; TR
MBct:5 , LPct:4
是否返回从最旧的最新订购的快照列表?
详细信息:
我希望使用AWS CLI for Windows制作每日EBS快照。
我的脚本执行此操作:
问题在于第3点。 当我获得快照列表时,我需要从最旧到最新的快照排序,并删除最旧的快照。
我发现的解决方案很简单,我使用相同标签的快照列表:
aws describe-snapshots
现在,假设列表是从最新快照到最早的快照排序,请按照相反的顺序(从最旧到最新)在aws ec2 describe-snapshots --region %AWS_REGION% --output=text --filters "Name=volume-id,Values=%AWS_VOLUME_ID%" "Name=tag:CreatedBy,Values=%TAGVALUE%" --query Snapshots[].SnapshotId>%OUTSNAPSHOTS%
上循环列表,使用sort /r %OUTSNAPSHOTS%
跳过一些,并删除快照:
skip=%AWS_MAX_BACKUPS%
我的假设是否正确? for /f "tokens=2 skip=%AWS_MAX_BACKUPS%" %%s in ('sort /r %OUTSNAPSHOTS%') do (
aws ec2 delete-snapshot --region %AWS_REGION% --snapshot-id %%s
)
是否返回快照列表,从最旧的最新订购?
完整代码:
describe-snapshots
答案 0 :(得分:1)
您无法保证快照将按日期排序。
您可以通过在命令中添加jq lib来实现这一目标
aws ec2 describe-snapshots --region %AWS_REGION% \
--filters "Name=volume-id,Values=%AWS_VOLUME_ID%" "Name=tag:CreatedBy,Values=%TAGVALUE%" \
| jq -r '.Snapshots | sort_by(.StartTime)[] | .SnapshotId' > %OUTSNAPSHOTS%
我将查询参数和输出删除为文本,因为我只是将整个JSon作为jq参数推送。 jq将按日期过滤和排序,将获取SnapshotId值并将其作为文本推送到脚本的其余部分。
列表将被命令在列表的末尾有最新的快照,你可以确定它总是这样。