Resource Cleanup¶
By default, pycloudlib will not automatically cleanup created resources because there are use cases for inspecting resources launched by pycloudlib after pycloudlib has exited.
Performing Cleanup¶
The easiest way to ensure cleanup happens is to use the cloud
and instance
context managers. For example, using EC2:
from pycloudlib.ec2.cloud import EC2
with EC2(tag="example") as cloud:
with cloud.launch("your-ami") as instance:
instance.wait()
output = instance.execute("cat /etc/lsb-release").stdout
print(output)
When the context manager exits (even if due to an exception), all resources that were created during the lifetime of the Cloud
or Instance
object will automatically be cleaned up. Any exceptions raised during the cleanup process will be raised.
Alternatively, if you don’t want to use context managers, you can manually cleanup all resources using the .clean()
method on Cloud
objects and the .delete()
method on Instance
objects. For example, using EC2:
from pycloudlib.ec2.cloud import EC2
cloud = EC2(tag="example")
instance = cloud.launch("your-ami")
instance.wait()
instance.execute("cat /etc/lsb-release").stdout
instance_cleanup_exceptions: List[Exception] = instance.delete()
cloud_cleanup_exceptions: List[Exception] = cloud.clean()
Things to note:
- Exceptions that occur during cleanup aren’t automatically raised and are instead returned. This is to is to prevent a failure in one stage of cleanup from affecting another.
- Resources can still leak if an exception is raised between creating the object and cleaning it up. To ensure resources are not leaked, the body of code between launch and cleanup must be wrapped in an exception handler.
Because of these reasons, the context manager approach should be preferred.