By default, pycloudlib will not automatically cleanup created resources because there are use cases for inspecting resources launched by pycloudlib after pycloudlib has exited.
The easiest way to ensure cleanup happens is to use the
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
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.