Migrating to the cloud has become so essential to modern day computing that it has now become a question of when, not if. There are many benefits to moving to the cloud such as cost efficiency and increased productivity. However, the actual process of transferring your current IT environment from on-premises to the cloud can be very troublesome and daunting.
This article will cover the steps and decisions you will face when migrating applications to the cloud. It will focus on application migrations only and not full environments, no technical steps will be outlined and this is by no means a full guide to migrations.
All company IT Environments differ, Company policies and regulatory requirements also differ from company to company. This means that no two migrations will ever be the same. However, you can still follow a similar plan for every migration and this article will outline the plan.
Microsoft best practice dictates using a four step plan, I will outline this plan in this article. However, I will split it into 5 steps on this article to make it easier to understand.
In truth, the steps can differ depending on environment, corporate policy and a consultant/architects preference and experience. It will follow a similar pattern to the one I’m outlining in this article.
The five steps I will outline in this article are as follows:
Discover: Discover the current environment and create an inventory all of systems
Assessment: Assess the inventory and decide the best method of migration
Migration: The actual migration is performed based on the assessment requirements
Optimization: Optimize the new environment in order to save costs and monitor more efficiently
Secure & Manage: Secure your newly migrated VMs, applications and data.
Without a detailed and successful discovery phase, it is almost impossible to successfully migrate an application to Azure. This phase is all about identifying and logging all existing applications, servers and workloads before assessing them to see if they can be improved. Any missed workloads can cause huge headaches further down the line, so make sure you discover 100% of the current environment. One missed server can set back a migration plan weeks.
This first part of this step is to discover, therefore you will need to create an inventory of all current applications and servers. Many modern management tools can already be used to create an inventory of an environment, however the data created by these systems is not always usable for the other migration steps. Other tools are available but differ depending on current environment, see below for the best tools to use depending on the environment:
The most useful tool for discovery of VMWare environments is the Azure Migrate service. Added to Azure recently, Azure Migrate not only allows you to map your whole VMWare environment but you can also check for app dependencies, ensure compatibility and even gain insights in the best VM sizes when migrating.
Azure Migrate uses an Agent to scan your current VMWare environment called the collector appliance. It monitors all common metrics such as memory usage or processor utilisation over a period you decide, the longer the better. Monitoring these metrics allows Azure migrate to give you insights which become useful for the assessment phase.
Microsoft Assessment and Planning toolkit can also be used for VMWare environments, this is covered in more detail next.
Cloudy Tip: The longer you leave Azure Migrate to discover your environment, the better the recommendations become.
Hyper-V & Physical
If you don’t use VMWare as your compute environment, you may well be using either Hyper-V Virtual machines or physical machines to host your applications instead. For these environments one of the easiest tools to use is the Microsoft Assessment and Planning Toolkit (MAP). This tool can be used to discover Windows Servers, SQL Servers, Linux OS and even Microsoft Office. The MAP toolkit can also be used to discover VMWare similar to Azure Migrate, however Azure migrate will give you more useful and useable data than the toolkit.
Once the toolkit has discovered your environment it will generate reports which will display current hardware usage, current licencing and also recommendations regarding Azure VM size, similar to Azure migrate.
Cloudy Tip: Microsoft is not the only company who make useful tools and services to aid you in a cloud migration. Many 3rd party options are available to aid the migration process, some of which have richer capabilities such as Cloudamize and CloudEndure to name a few. A list of Official Azure migration partners can be found here.
Once you have completed the discovery phase and you are confident you have an inventory containing every workload you want to migrate, it’s time for the assessment phase.
During this phase you will need to decide how exactly you will be moving the workloads over to Azure by creating a Cloud migration plan. Azure Migrate is very useful for the assessment phase as it will allow you to view a high level diagram of your on-premises applications and their dependencies. The diagram allows you to map their movement over to Azure much easier.
Once you have grouped your apps and listed all application dependencies you can then move on to choosing a migration strategy based on the application requirements.
“Rehosting” is the simplest of all the migration methods, it involves you replicating an on-premises VM to Azure with no code changes required. Whereas other methods may mean code changes but these changes will allow the application to utilize Azure services more effectively. The methods are all described below:
Rehosting involves moving an application from on-premises hardware to a VM in the cloud, this is done simply by Rehosting the Virtual machines that hold the application tiers. Any app backend such as SQL servers can also be migrated to the Azure SQL managed service or a VM running SQL server. This method is beneficial because it’s the quickest and involves no code changes meaning support and documentation does not need changing. However the downside to Rehosting is that you won’t benefit from all the other services Azure offers outside of Compute services (VMS) such as auto-scaling. All you do is move an application from one VM to another, so you are utilizing IaaS (Compute) Services in Azure but nothing else.
Refactoring is the migration method which involves some changes to the application design without huge changes to the application code and libraries. It is a quick method of modernizing applications without the need for huge code changes. A common method of refactoring is to take a web application usually hosted on an IIS role within a Virtual machine and instead host the application within Azure Web Apps. This allows you utilize PaaS solutions from Azure.
A useful tool when refactoring a web app is to use the Azure App Service migration assessment tool, this tool will ensure your on-premises application can be moved into the Azure App Service.
The first two methods of migrating applications allows for very little, if any code changes at all.
Re-architecting is method that does require code changes. This method involves moving your application to a more resilient and scalable architecture. An example of this would be moving an App into the Azure Kubernetes Service (AKS) allowing it to benefit from all the features of containers. The code changes will be needed in order for the application to benefit fully from the features of moving architecture such as PaaS services.
The final method is rebuilding, as you can tell by the name this involves the most work and the most code changes. Some applications may be legacy or written poorly in the first place, those types of apps will never benefit from the migration methods mentioned above as the code itself is inefficient and poorly written. The best method for apps that fit this criteria is to rebuild from scratch. Rebuilding from scratch allows you to take full advantage of cloud native Azure PaaS services such as Functions, Logic apps amongst many other advancements in cloud computing.
The final important part of the assessment phase is regarding Cost. You can evaluate the potential savings of performing an Azure migration by calculating your total cost of ownership (TCO) for Azure deployments and then comparing this to your current on-premises costs. This information will help in deciding the best migration methods as some are far most expensive than others. You can calculate the Azure TCO here.
The ‘Migration’ step is where the migrations are actually performed. Based on the migration Plan created above all the applications will now be migrated to Azure. The success of this stage is all based on how well you perform the steps prior, including discovery and assessment.
Testing should also be performed in this step to ensure the success of all migrations.
Once you have successfully migrated your Application workloads to Azure, it’s time to optimize. Azure allows you to optimize your new application environment by using tools and services created to aid in cost management, monitoring and governance.
Take advantage of cost management features such as Azure Cost Management and other 3rd party apps such as Cloudyn.
Use Azure Monitor to collect, analyse and respond to alerts created by services in your environment.
Secure & Manage
The final step is all about how you can secure and manage your new environment using services offered by Microsoft Azure.
Security is a very important factor for any IT workload, Azure Security centre allows advanced threat management across all resources within Azure.
Another form of protection is backups, Azure backup is a fully featured backup system that allows you to meet compliance goals by performing full scheduled backups of any resource in Azure. Azure Site Recovery can also be used to create failover plans and ensure failovers occur automatically allowing you to meet even the tightest of uptime of SLAs.
For any more information regarding Azure migrations I advise reading the Official documentation here.