Amazon web services 删除早于一个月的AWS EC2快照
下面给出的命令是否可以删除早于一个月的AWS EC2快照Amazon web services 删除早于一个月的AWS EC2快照,amazon-web-services,amazon-ec2,Amazon Web Services,Amazon Ec2,下面给出的命令是否可以删除早于一个月的AWS EC2快照 aws descripe snapshot | grep-v(date+%Y-%m-| grep snap-| awk'{print$2}'| xargs-n1-t aws delete snapshot由于键入错误,您的命令无法工作:aws descripe snapshot应该是aws ec2 descripe snapshot 无论如何,除了aws,您无需任何其他工具即可完成此操作: snapshots\u to\u delete=
aws descripe snapshot | grep-v(date+%Y-%m-| grep snap-| awk'{print$2}'| xargs-n1-t aws delete snapshot由于键入错误,您的命令无法工作:
aws descripe snapshot
应该是aws ec2 descripe snapshot
无论如何,除了aws,您无需任何其他工具即可完成此操作:
snapshots\u to\u delete=$(aws ec2描述快照--所有者ID XXXXXXXXXX--查询'snapshots[?StartTime+1到@roman zhuzha以接近我。当$snapshots\u to\u delete
没有解析成一个由空格分隔的长字符串时,我确实遇到了麻烦
下面的脚本将它们解析为一长串快照ID,在bash和awscli 1.16中的my Ubuntu(trusty)14.04上用空格分隔:
#!/usr/bin/env bash
dry_run=1
echo_progress=1
d=$(date +'%Y-%m-%d' -d '1 month ago')
if [ $echo_progress -eq 1 ]
then
echo "Date of snapshots to delete (if older than): $d"
fi
snapshots_to_delete=$(aws ec2 describe-snapshots \
--owner-ids xxxxxxxxxxxxx \
--output text \
--query "Snapshots[?StartTime<'$d'].SnapshotId" \
)
if [ $echo_progress -eq 1 ]
then
echo "List of snapshots to delete: $snapshots_to_delete"
fi
for oldsnap in $snapshots_to_delete; do
# some $oldsnaps will be in use, so you can't delete them
# for "snap-a1234xyz" currently in use by "ami-zyx4321ab"
# (and others it can't delete) add conditionals like this
if [ "$oldsnap" = "snap-a1234xyz" ] ||
[ "$oldsnap" = "snap-c1234abc" ]
then
if [ $echo_progress -eq 1 ]
then
echo "skipping $oldsnap known to be in use by an ami"
fi
continue
fi
if [ $echo_progress -eq 1 ]
then
echo "deleting $oldsnap"
fi
if [ $dry_run -eq 1 ]
then
# dryrun will not actually delete the snapshots
aws ec2 delete-snapshot --snapshot-id $oldsnap --dry-run
else
aws ec2 delete-snapshot --snapshot-id $oldsnap
fi
done
将日期-d
字符串更改为要删除“早于”的天数、月数或年数的可读版本:
找到您的帐户id并将这些XXXX更新为该号码:
--owner-ids xxxxxxxxxxxxx \
以下是您可以找到该号码的示例:
--owner-ids xxxxxxxxxxxxx \
如果在cron中运行此操作,您只希望看到错误和警告。经常出现的警告是有快照正在使用。两个示例快照id(snap-a1234xyz,snap-c1234abc)将被忽略,因为它们会打印如下内容:
调用DeleteSnapshot操作时发生错误(InvalidSnapshot.InUse):快照snap-a1234xyz当前正由ami-zyx4321ab使用
有关如何处理此输出,请参阅“snap-a1234xyx”示例快照id附近的注释
.您可以使用“所有者ID”中的“self”并使用以下一行命令删除在特定日期(例如2018-01-01)之前创建的快照:
for i in $(aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[?StartTime<=`2018-01-01`].SnapshotId' --output text); do echo Deleting $i; aws ec2 delete-snapshot --snapshot-id $i; sleep 1; done;
for i in$(aws ec2描述快照--所有者ID self--查询'快照[?StartTime为什么不将--dry run
添加到delete snapshot
命令中并自己测试它?如果我错了,请纠正我,但是?StartTime>=2017-02-15
将选择比2017-02-15更新的快照,对吗?所以我认为这应该是=。这一次只给我一个快照ID…这是预期的吗?我很抱歉正在尝试删除数千个快照way@CyrilDuchon-Doris$snapshots\u to\u delete变量应包含一长串由空格分隔的snapshots id。我编辑了答案以修复个人报告的问题,Cyril Duchon Doris——所有者id self
也将起作用。
for i in $(aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[?StartTime<=`2018-01-01`].SnapshotId' --output text); do echo Deleting $i; aws ec2 delete-snapshot --snapshot-id $i; sleep 1; done;