如何使用 AWS CLI 批量删除多个 AWS 快照?
How to bulk delete multiple AWS snapshots using AWS CLI?
所以使用SnapshotID删除AWS Snapshot的命令如下
aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0
我有一个需要删除的 400 个快照 ID 的列表。我应该使用什么命令使用 SnapshotID 批量删除它们。
**PS:None 个快照已标记。
这里有一个可能听起来很愚蠢但非常有效的解决方案...
我通常会创建一个 Excel 电子表格,在第一列中包含 ID 列表。
然后我使用包含完整命令的公式创建第二列,并引用在适当位置插入 ID 的第一列。然后我复制所有行的公式。
为了测试公式,我复制了第一行并将其粘贴到我的 shell 中以确认它按预期工作。
然后我将公式生成的所有行粘贴到一个文本文件中,然后在shell中执行该文本文件。如果您从 Amazon EC2 实例执行它会 运行 更快,因为它减少了网络延迟,但是 运行 从您自己的计算机执行它也同样有效。去喝杯咖啡吧。
如果您对使用 Excel 感到厌恶,那么您可以在 Python 中编写一个简单的脚本来遍历列表并调用 delete_snapshot()
命令。
批量删除 aws-cli 2.2 的快照
在以下版本/系统上测试:
% aws --version
aws-cli/2.2.26 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off
Wait... it's truncating snapshot IDs, so the delete fails. (?!)
Heck. I'll revisit this in a bit. :-(
命令:
% aws ec2 describe-snapshots | grep SNAPSHOT | sort -k 6 | head -20 \
| awk '{print "Deleting-> " ,,,,; \
system("aws ec2 delete-snapshot --snapshot-id " )}'
输出:
Deleting-> image.vmdk 099720109477 snap-005349429a002f03b 2019-05-08T11:09:45.481000+00:00 completed
Deleting-> image.vmdk 099720109477 snap-00ea72d226a56a8cf 2019-05-29T16:27:54.246000+00:00 completed
:
备注:
- 命令为 v2 格式,与问题中给出的相匹配。
- Grep:SNAPSHOT 跳过任何 TAGS 行。
- 排序:对我来说是字段6。
- 头部:20个用于测试;一旦有效就增加。
- Awk 打印:显示几个用于跟踪的字段($4、$6、$8...)。
- awk系统:使用$8,基于之前的
字段与之前评论者给出的字段不同。
- 可能是 aws cli 差异,或
- 可能是 OS/shell 差异。
- 无论哪种方式,先做一个简短的打印字段测试。
感谢 this AWS forum thread 中的想法。
注意:这将删除您所在区域在 AWS CLI 中配置的所有快照
使用此命令将所有快照 ID 保存在 sgn.txt 文件中。
命令:
aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[].SnapshotId' > sgn.txt
[
"snap-04030b95f2ebcbe6e",
"snap-06e1a8394774c8486",
"snap-03c6659d966953d6c",
"snap-02de629dc082b33cb",
"snap-033dfc52483c09455"
]
删除括号并使文件看起来像这样并在最后一个 id
中添加“,”
"snap-04030b95f2ebcbe6e",
"snap-06e1a8394774c8486",
"snap-03c6659d966953d6c",
"snap-02de629dc082b33cb",
"snap-033dfc52483c09455",
现在使用下面的 python 代码删除所有快照
代码:
import boto3
client = boto3.client('ec2',region_name='us-east-1')
file=open('sgn.txt','r')
l=file.readlines()
for i in l:
s=i.strip()
s=s[1:len(s)-2]
client.delete_snapshot(SnapshotId=s)
print(s,"deleted")
注:-
您必须将 aws cli 配置为 运行 这个 python 文件,您还需要在 python
中安装 boto3 模块
# 删除 us-west-2 区域的所有快照:
for K in $(aws ec2 --region us-west-2 describe-snapshots --owner-ids=${AWS_OWNER_ID} --query 'Snapshots[*].SnapshotId' --output=text); do
aws ec2 --region us-west-2 delete-snapshot --snapshot-id $K
done
所以使用SnapshotID删除AWS Snapshot的命令如下
aws ec2 delete-snapshot --snapshot-id snap-1234567890abcdef0
我有一个需要删除的 400 个快照 ID 的列表。我应该使用什么命令使用 SnapshotID 批量删除它们。
**PS:None 个快照已标记。
这里有一个可能听起来很愚蠢但非常有效的解决方案...
我通常会创建一个 Excel 电子表格,在第一列中包含 ID 列表。
然后我使用包含完整命令的公式创建第二列,并引用在适当位置插入 ID 的第一列。然后我复制所有行的公式。
为了测试公式,我复制了第一行并将其粘贴到我的 shell 中以确认它按预期工作。
然后我将公式生成的所有行粘贴到一个文本文件中,然后在shell中执行该文本文件。如果您从 Amazon EC2 实例执行它会 运行 更快,因为它减少了网络延迟,但是 运行 从您自己的计算机执行它也同样有效。去喝杯咖啡吧。
如果您对使用 Excel 感到厌恶,那么您可以在 Python 中编写一个简单的脚本来遍历列表并调用 delete_snapshot()
命令。
批量删除 aws-cli 2.2 的快照
在以下版本/系统上测试:
% aws --version
aws-cli/2.2.26 Python/3.8.8 Darwin/20.6.0 exe/x86_64 prompt/off
Wait... it's truncating snapshot IDs, so the delete fails. (?!)
Heck. I'll revisit this in a bit. :-(
命令:
% aws ec2 describe-snapshots | grep SNAPSHOT | sort -k 6 | head -20 \
| awk '{print "Deleting-> " ,,,,; \
system("aws ec2 delete-snapshot --snapshot-id " )}'
输出:
Deleting-> image.vmdk 099720109477 snap-005349429a002f03b 2019-05-08T11:09:45.481000+00:00 completed
Deleting-> image.vmdk 099720109477 snap-00ea72d226a56a8cf 2019-05-29T16:27:54.246000+00:00 completed
:
备注:
- 命令为 v2 格式,与问题中给出的相匹配。
- Grep:SNAPSHOT 跳过任何 TAGS 行。
- 排序:对我来说是字段6。
- 头部:20个用于测试;一旦有效就增加。
- Awk 打印:显示几个用于跟踪的字段($4、$6、$8...)。
- awk系统:使用$8,基于之前的
字段与之前评论者给出的字段不同。
- 可能是 aws cli 差异,或
- 可能是 OS/shell 差异。
- 无论哪种方式,先做一个简短的打印字段测试。
感谢 this AWS forum thread 中的想法。
注意:这将删除您所在区域在 AWS CLI 中配置的所有快照 使用此命令将所有快照 ID 保存在 sgn.txt 文件中。
命令:
aws ec2 describe-snapshots --owner-ids self --query 'Snapshots[].SnapshotId' > sgn.txt
[
"snap-04030b95f2ebcbe6e",
"snap-06e1a8394774c8486",
"snap-03c6659d966953d6c",
"snap-02de629dc082b33cb",
"snap-033dfc52483c09455"
]
删除括号并使文件看起来像这样并在最后一个 id
中添加“,”"snap-04030b95f2ebcbe6e",
"snap-06e1a8394774c8486",
"snap-03c6659d966953d6c",
"snap-02de629dc082b33cb",
"snap-033dfc52483c09455",
现在使用下面的 python 代码删除所有快照
代码:
import boto3
client = boto3.client('ec2',region_name='us-east-1')
file=open('sgn.txt','r')
l=file.readlines()
for i in l:
s=i.strip()
s=s[1:len(s)-2]
client.delete_snapshot(SnapshotId=s)
print(s,"deleted")
注:- 您必须将 aws cli 配置为 运行 这个 python 文件,您还需要在 python
中安装 boto3 模块# 删除 us-west-2 区域的所有快照:
for K in $(aws ec2 --region us-west-2 describe-snapshots --owner-ids=${AWS_OWNER_ID} --query 'Snapshots[*].SnapshotId' --output=text); do
aws ec2 --region us-west-2 delete-snapshot --snapshot-id $K
done