如何批量删除500个AWS EBS卷?
我有大约500个AWS的EBS存储卷。我可以通过设置存储卷状态为“可用”和标签为“year=2022”来筛选它们。
我应该如何使用Python或bash脚本批量删除这些存储卷,因为在控制台中我一次只能删除50个?
AWS的删除存储卷命令没有“状态”过滤器或“标签”过滤器。
1 个回答
2
Kenaz Kwa写的这个gist脚本似乎正是你需要的东西。
#!/usr/bin/env python
import boto3
sess = boto3.Session(
aws_access_key_id="MYAWSACCESSKEYID",
aws_secret_access_key="MYSECRETACCESSKEY",
region_name="us-east-1",
)
ec2 = sess.resource('ec2')
volumes = ec2.volumes.all()
to_terminate=[]
for volume in volumes:
print('Evaluating volume {0}'.format(volume.id))
print('The number of attachments for this volume is {0}'.format(len(volume.attachments)))
# Here's where you might add other business logic for deletion criteria
if len(volume.attachments) == 0:
for tag in volume.tags:
if tag['year'] == '2022':
to_terminate.append(volume)
if len(to_terminate) == 0:
print ("No volumes to terminate! Exiting.")
exit()
for volume in to_terminate:
print('Deleting volume {0}'.format(volume.id))
volume.delete()
代码行if len(volume.attachments) == 0:
是用来检查这个存储卷是否已经连接到EC2实例上。你可以根据自己的需求来修改这个条件。例如,你可以检查这个存储卷的名字是否以'x'开头,或者它的大小是否超过x Gb。