Cloud computing has become a widespread technology due to ICT advancements. It allows businesses to move and take advantage of the pay-as-you-go price model. Enterprises pay for what they use and don't have to buy, setup, or maintain resources. However, outsourcing core resources such as storage, servers, operating systems, and software applications from a third party needs careful decisions to take advantage of cloud facilities. Choice of appropriate service provider, deployment and service model must be aligned with business needs and goals. In this paper, we will present cloud computing benefits, cloud deployment methods, services, state-of-the-art migration methods, tools and techniques and will conclude with the role of SDN in cloud computing.