Ever wanted to reset (delete all the resources) from a cloud account (AWS/GCP/...)? Now you can, and its really easy.
We want to give everyone the freedom to explore all that AWS has to offer. So we decided to create a 'sandbox' account where everybody could create any resource they want.
Freedom has its cost
Of course, resources cost money. And as good as we are in giving everyone the freedom to explore, we didn't want to spend more money than necessary by having lingering zombie resources that nobody knew even existed.
So, we also wanted to delete all resources periodically.
This was more easily said than done.
I tried finding some GitHub project that already did this, or at least that we could collaborate.
Although we found a couple (listed below in case you are interested), these we’re written in Go and we’re too complicated to my test.
So I literally this afternoon started a GitHub open-source project to achieve this.
All types of resources are handled by its own class, so its easy to extend.
The filenames are named after the Boto3 resource name (ec2, ec2, ses, s3, etc…). prefixed by the provider (
If you’re interested in this project, I’d love to see your collaborations. We can keep adding resources.
The first couple of commits are a little messy, just because it’s the start of the project. But the idea is to keep it clean and tidy, tested and following best practices.
Here’s the cloud-reset repo:
Let’s disect a bit
There is a main script
delete_resoures.py that instantiates a class called
When instantiating the class, you have to pass the name of a YAML configuration file. For example, a file named
resources_to_delete.yml can have the following contents.
This is valid YAML and its specified to delete resources of type ec2 and s3.
S3 buckets can be filtered by name (using a regular expression!). If the bucket is not empty you can specify the optional
force: true so to delete the contents.
- aws_ec2: - aws_s3: exclude: - Name: /-terraform-/ # regular expression - Name: /-xxx-/ options: force: true # deletes bucket contents - aws_kms:
Down the river, this instantiates the class in the file
lib/modules/aws_ec2.py which takes care of finding the ids of all the ec2s and deleting them.
aws_ec2.py file (or any other resource file) is quite simple. They consist of a class
Resource that inherits from the
BaseResource class, which enforces to have at least 3 methods (and some properties):
How to run
Before calling the script, be sure to install the requirements:
pip3 install -r requirements.txt
The script can be called as:
python delete_resources.py -f resources_to_delete.yml
The script is configured with a
dry_run flag set initially to
True, so it should not delete anything by default. But be careful anyway.
In the future, we’re planning to specify in the YAML configuration file options to filter by tags, creation date and more. Also, we’d like to add other cloud providers as GCP or Azure.
If you like the idea, clone the repo and show what you’ve got. There are many things we can do.
That’s it for now, but I hope to know more about you!
Top comments (0)