如何清理孤立的AWS EC2快照

140次阅读
没有评论

问题描述

在使用AWS EC2时,经常会出现删除了AMI但留下了快照的情况,这些孤立的快照会占用空间并增加成本。用户希望有一种非手动的方式来识别和删除这些孤立的快照,以节省空间和费用。用户希望使用一个基于CLI的bash脚本来实现这个目标。

解决方案

请注意以下操作可能涉及版本差异及潜在风险。在执行任何操作之前,请确保已经做好充分备份,并了解可能的影响。

方案1:使用现有脚本

有一些现有的脚本可以帮助识别和清理孤立的快照,这些脚本基于AWS CLI和JMESpath等工具。以下是一个可用的bash脚本示例,它可以用于识别孤立的快照并列出删除命令:

#!/bin/bash
set -ex
DRUN='--dry-run'
DO_DELETE=${1:-'no'}
REGION=${2:-'eu-west-1'}
ACCOUNTID=${3:-'self'}
SNAP_FILE=$(mktemp)
IMAGE_FILE=$(mktemp)
aws --region "$REGION" ec2 describe-snapshots --owner-ids "$ACCOUNTID" --query 'Snapshots[*].[SnapshotId]' --output text > "$SNAP_FILE"
aws --region "$REGION" ec2 describe-images --owners "$ACCOUNTID" --filters Name=state,Values=available --query 'Images[*].BlockDeviceMappings[*].Ebs.[SnapshotId]' --output text > "$IMAGE_FILE"
if [ "$DO_DELETE" = "IAMSURE" ]
then
  DRUN=''
fi
awk -v REGION="$REGION" -v DRUN="$DRUN" 'FNR==NR { snap[$1]++; next } { snap[$1]-- } END { for (s in snap) { if (snap[s] > 0) { cmd="aws --region " REGION " " DRUN " ec2 delete-snapshot --snapshot-id " s; print(cmd) } } }' "$SNAP_FILE" "$IMAGE_FILE"
rm "$SNAP_FILE" "$IMAGE_FILE"

该脚本通过调用AWS CLI来获取快照列表和AMI列表,然后比较它们,生成删除命令。你可以运行脚本来列出删除命令,然后根据需要决定是否执行这些命令。在运行脚本时,可以使用以下命令:

# 列出删除命令(不执行)
./script_name.sh no region_name
# 执行删除命令
./script_name.sh IAMSURE region_name

方案2:使用GitHub上的脚本

还有一些GitHub上的脚本可以帮助识别和清理孤立的快照。你可以查看这些脚本,选择适合你需求的脚本并进行使用。以下是一个可用的GitHub Gist脚本示例,用于识别孤立的快照并生成报告:
snapshots.py

这个脚本可以迭代所有快照,并生成包含关于实例、AMI和卷的信息的报告文件。此外,脚本还提供了交互式命令来删除孤立的快照。

方案3:使用第三方工具

如果你希望更加简化的解决方案,也可以考虑使用第三方工具来管理和清理孤立的快照。以下是一个可以参考的工具:
aws-amicleaner

这个工具提供了更多的功能,可以用于删除孤立的快照、清理不再需要的AMI等。

请注意,无论使用哪种解决方案,都要确保在执行任何删除操作之前充分了解可能的影响,并确保已经做好了充分备份。

总结

清理孤立的AWS EC2快照可以帮助你节省空间和费用。你可以选择使用现有的脚本、GitHub上的脚本或第三方工具来实现这个目标。在执行任何删除操作之前,请确保充分了解脚本或工具的功能,并谨慎操作。

正文完