import boto3 import botocore.exceptions def main(): # regions_client = boto3.client("ec2") # response = regions_client.describe_regions() # regions = [ # r["RegionName"] # for r in response["Regions"] # if r["OptInStatus"] == "opt-in-not-required" # ] regions = [ "us-east-1", "us-west-2", ] dry_run = True volumes = [] for r in regions: volumes = [] ec2_client = boto3.client("ec2", region_name=r) response = ec2_client.describe_volumes( Filters=[ { "Name": "status", "Values": [ "available", ], } ], ) volumes.extend(response["Volumes"]) while "NextToken" in response: response = ec2_client.describe_volumes( Filters=[ { "Name": "status", "Values": [ "available", ], } ], NextToken=response["NextToken"], ) volumes.extend(response["Volumes"]) if len(volumes) > 0: print(r) for id in [v["VolumeId"] for v in volumes]: print(f"Removing volume {id}") try: response = ec2_client.delete_volume(VolumeId=id, DryRun=dry_run) except botocore.exceptions.ClientError as error: if error.response["Error"]["Code"] == "DryRunOperation": print("DryRun operation") else: raise error if __name__ == "__main__": main()