问题描述
正在使用AWS Backup来创建他们生产服务器的快照备份。他们当前的备份计划保留无限制,这导致他们的存储空间占用了大量的千兆字节。
他想知道如何最好地解决这个问题。他发现无法批量删除备份(只能逐个选择和删除每个单独的备份,但他有数百个备份)。
他是否可以修改备份规则以便删除先前的备份?或者是否有一种方法可以选择并删除由AWS Backup执行的所有备份?
解决方案
请注意以下操作可能涉及到AWS资源的操作,务必谨慎执行并提前备份数据。
方案1:使用脚本批量删除备份
你可以使用AWS CLI和一个简单的Bash脚本来批量删除备份。以下是一个可供参考的脚本,该脚本将会删除指定备份存储库(Vault)中的所有备份。
1. 打开一个文本编辑器,创建一个新的Bash脚本文件,例如delete_backups.sh
。
2. 将以下代码粘贴到脚本文件中:
#!/bin/bash -e
VAULT_NAME=your_vault_name # 将你的备份存储库名称填在这里
for ARN in $(aws backup list-recovery-points-by-backup-vault --backup-vault-name "${VAULT_NAME}" --query 'RecoveryPoints[].RecoveryPointArn' --output text); do
echo "deleting ${ARN} ..."
aws backup delete-recovery-point --backup-vault-name "${VAULT_NAME}" --recovery-point-arn "${ARN}"
done
- 替换
your_vault_name
为你的实际备份存储库名称。 - 保存脚本文件并关闭文本编辑器。
- 打开终端,导航到包含脚本文件的目录。
- 运行以下命令来赋予脚本执行权限:
chmod +x delete_backups.sh
- 运行脚本来批量删除备份:
./delete_backups.sh
这个脚本将会列出备份存储库中的所有备份,并逐个删除它们。
方案2:按创建时间删除旧备份
如果你只想删除旧的备份,可以修改上面的脚本,加入--by-created-before
参数来指定删除在特定日期之前创建的备份。例如,下面的代码会删除在7天前创建的备份:
#!/bin/bash -e
VAULT_NAME=your_vault_name # 将你的备份存储库名称填在这里
DELETE_BEFORE=$(date -d '7 days ago' --utc +%Y-%m-%dT%H:%M:%SZ)
for ARN in $(aws backup list-recovery-points-by-backup-vault --backup-vault-name "${VAULT_NAME}" --query "RecoveryPoints[?CreationDate<'${DELETE_BEFORE}'].RecoveryPointArn" --output text); do
echo "deleting ${ARN} ..."
aws backup delete-recovery-point --backup-vault-name "${VAULT_NAME}" --recovery-point-arn "${ARN}"
done
在上面的示例中,DELETE_BEFORE
变量设置为7天前的日期,脚本将只删除在这个日期之前创建的备份。
无论使用哪种方法,请确保在执行删除操作之前进行充分的备份,并在操作之前仔细检查脚本中的参数和命令。删除备份是不可逆的操作,务必谨慎执行。
希望这些解决方案能够帮助你有效地管理和删除AWS备份!
正文完