1. A method of deploying an application having application components, the method comprising: receiving a selected cloud environment on which to deploy the application; determining one or more logical templates to use in a blueprint for the application, the one or more logical templates specifying virtual computing resources for the application and the blueprint specifying a logical topology of the application; determining tasks to be executed for deploying the application components of the application; determining one or more dependencies between the application components; determining an order of the application components to be deployed based on the one or more dependencies; generating a deployment plan for executing the tasks to deploy the application in the selected cloud environment based on the determined order and the one or more logical templates; and provisioning the virtual computing resources and deploying the application components on the provisioned virtual computing resources based on the deployment plan.