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 templates used in a blueprint for the application, the one or more templates specifying virtual computing resources for the application, the blueprint specifying a topology having one or more virtual machines, and each of the one or more virtual machines being represented by each of the one or more templates; retrieving one or more cloud templates for the selected cloud environment that are mapped to the one or more templates of the blueprint, each of the one or more cloud templates defining a virtual machine having specified virtual computing resources; determining tasks to be executed for deploying the application components of the application based on the one or more cloud templates; determining one or more dependencies between the application components according to the blueprint; determining an order of the application components to be deployed based on the one or more dependencies; and generating a deployment plan for executing the task to deploy the application in the selected cloud environment based on the determined order.