Amazon web services 删除早于一个月的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 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 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;