如何批量删除500个AWS EBS卷?

-2 投票
1 回答
47 浏览
提问于 2025-04-14 16:15

我有大约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。

撰写回答