1. A method for creating and providing access to a dynamically provisioned course, the method comprising: receiving, by a creation engine executing on a first computing device, from a second computing device associated with a user, a request to create a course; receiving, by the creation engine, from the second computing device, an identification of a type of computing resource for use during the course; selecting, by the creation engine, a service provider computing device from a plurality of service provider computing devices based upon an ability of the selected service provider computing device to provide, to the second computing device, access to the identified type of computing resource; instructing, by the creation engine, the service provider computing device to provision a computing resource of the identified type; directing, by the creation engine, the second computing device to connect to the provisioned computing resource; receiving, by the creation engine, from the second computing device, an indication that the user configured the provisioned computing resource for use during the course; directing, by the creation engine, a state management engine to save a state of the provisioned computing resource and metadata associated with the course, responsive to the received indication; and providing access to the saved state of the provisioned computing resource and the metadata associated with the course.