1. A method comprising: receiving, by a processor, a first request to instantiate a virtual machine, wherein the first request comprises: a specification of the virtual machine indicating a configuration for the virtual machine, one or more parameters indicating constraints for instantiating the virtual machine in a cloud computing environment, and a period of time for which the virtual machine is to be used; determining, by the processor, an availability of a plurality of servers provided by the cloud computing environment within the period of time defined in the first request; selecting, by the processor, in view of the availability, the specification, and the one or more parameters, a first set of servers from the plurality of servers to instantiate the virtual machine within the period of time defined in the first request, wherein at least one resource provided by the first set of servers does not match the one or more parameters defined in the first request; generating, by the processor, a second request to instantiate the virtual machine on the first set of servers; instantiating the virtual machine on the first set of servers based on the specification; periodically monitoring the cloud computing environment for an availability within the period of time defined in the first request of a second set of servers from the plurality of servers with at least one resource that at least partially matches the specification and the one or more parameters for instantiating the virtual machine; determining that the second set of servers with at least one resource that at least partially matches the specification and the one or more parameters is available for instantiating the virtual machine within the period of time defined in the first request; determining a first matching level of the first set of servers, wherein the first matching level is a degree to which the at least one resource provided by the first set of servers matches the specification and the one or more parameters defined in the first request; determining a second matching level of the second set of servers, wherein the second matching level is a degree to which the at least one resource provided by the second set of servers matches the specification and the one or more parameters defined in the first request; comparing the first matching level and the second matching level; and migrating the virtual machine to the second set of servers within the period of time defined in the first request when the second matching level is greater than the first matching level to adjust usage of one or more resources in the cloud computing environment.