Linux 删除AWS上的旧快照

Linux 删除AWS上的旧快照,linux,amazon-web-services,amazon-ec2,Linux,Amazon Web Services,Amazon Ec2,我创建了一个AWS cloudwatch,它每天都会创建自动EBS快照。因此,cloudwatch每天都会创建昨天的快照 现在,我想创建一些可以删除旧快照的内容。 我没有发现任何与此相关的信息,而且AWS支持也没有帮助我解决这个问题 有人能帮我介绍一下如何自动删除aws ec2 EBS快照吗 例如,假设我只保留最近7天的备份快照,并自动删除所有其余的快照 我如何通过aws Lambda或cloudwatch实现它 谢谢! 如果您想继续使用当前使用的相同工具,即CloudWatch来运行计划事件,

我创建了一个AWS cloudwatch,它每天都会创建自动EBS快照。因此,cloudwatch每天都会创建昨天的快照

现在,我想创建一些可以删除旧快照的内容。
我没有发现任何与此相关的信息,而且AWS支持也没有帮助我解决这个问题

有人能帮我介绍一下如何自动删除aws ec2 EBS快照吗

例如,假设我只保留最近7天的备份快照,并自动删除所有其余的快照

我如何通过aws Lambda或cloudwatch实现它


谢谢!

如果您想继续使用当前使用的相同工具,即CloudWatch来运行计划事件,您还可以创建一个CloudWatch事件,该事件将触发lambda函数(或一组函数)。 使用lambda,您可以编写实现所选逻辑的代码,例如: 使用AWS SDK,列出+7天的所有快照,并将其删除

有用链接:


下面是一篇非常好的博客文章,介绍了如何实现这一点-

关于设置EBS快照管理的答案非常好,但是如果您需要一次性使用少量的旧快照,您可以使用AWS CLI命令

我有一个大的AWS EC2快照清理工作要做,有成千上万的旧快照要删除。下面是我在LinuxVBox上使用的一个脚本。您可能要更改的值在“TODO”中调用


#AWS快照清理
#删除2021年之前在描述开头包含“my env快照”的所有快照
#使用aws概要文件、区域和输出参数对运行超过12小时的脚本进行了强化,因此即使缓存的凭据已过时,也可以再次运行。
#这修复了错误“调用describesnapshots操作时发生错误(requestexpired):请求已过期。”
#如果您的组织使用multi-factor authentication(MFA),请确保在运行此脚本时有活动的已验证会话。
#
#TODO:将描述、开始时间、概要文件和区域替换为适合您的情况的值
#如果要进行试运行,可以将--dry run添加到delete snapshot命令中
#

aws--概要文件产品--区域us-east-1--输出文本ec2描述快照--过滤器名称=描述,值=“我的环境的快照*”--查询“快照[?”?(StartTimeStack Overflow是一个关于编程和开发问题的网站。这个问题似乎与主题无关,因为它与编程或开发无关。请参阅帮助中心。也许或者是一个更好的提问场所。好吧。部分su;oton是为了更正脚本。所以它仍然不算数?

    # AWS Snapshot cleanup
    # Delete all snapshots before 2021 that include "SNAPSHOT OF my-env" in the beginning of the description
    # Fortified with aws profile, region, and output parameters for scripts that run more than 12 hours so it can be run again even if the cached credentials are stale.
    # This fixes the error "an error occurred (requestexpired) when calling the describesnapshots operation: request has expired."
    # If your organization uses multi-factor authentication (MFA) be sure you have an active authenticated session when running this script.
    #
    # TODO: replace the description, StartTime, profile, and region with values appropriate to your situation
    #  You can add --dry-run to the delete-snapshot command if you want to do a trial run
    #
    aws --profile prod --region us-east-1 --output text ec2 describe-snapshots --filters Name=description,Values='SNAPSHOT OF my-env*' --query "Snapshots[?(StartTime<='2021-01-01')].[SnapshotId]" | awk \
    '{snapid=$0; \
    print "Delete snapshot: " snapid; \
    system("aws --profile prod --region us-east-1 ec2 delete-snapshot --snapshot-id "snapid)\
    count++; \
    } \
     END { \
     print "Finished at:"; system("date"); \
     print "Total snapshots deleted: " count \
     }'