How do you enable applications to best use the Cloud? It is true that nearly any application can be moved to the Cloud without much change. This is the premise behind the concept of the “lift & shift.” Moving to the cloud can be the same as moving to any virtualized environment. If the Cloud is just another virtualized environment, there is not much interesting about moving to it.
But...of course, the Cloud is much more than simply another virtual environment.
The question around moving an application to the Cloud boils down to how much of the platform should an application take advantage of. This is not a simple question of which Lego-like piece of the application to stick into the Lego-like socket of the Cloud, but instead a nuanced question of how to embrace new technologies in an existing application. Applications range from simple single-function tools to large multipurpose behemoths. Thus, taking advantage of the Cloud ranges from simple to very complex.
The Path to the Cloud
Amazon Web Services identifies three paths to the Cloud that are interesting for thinking about how to move a custom application.
Re-host aka “Lift & Shift”
The first path is the re-host, also known as the “lift & shift” path we mentioned earlier. In this approach, minimal changes are needed to get the application running in the Cloud. These changes should be entirely configuration-only, and the Cloud that the application is moved to is simply virtualized infrastructure.
Replatforming & Re-architecting
The second and third paths are replatforming and re-architecting. These can be seen of as gradients of the same activity. A replatforming is adjusting some of the code and minimal architectural changes, while a re-architecting is changing much of the code and significant architectural changes.
Optimal Enablement of Cloud Applications
So, back to the question of how best to enable applications for the Cloud? The following questions help answer which of the three paths will be needed to make an application Cloud ready:
1. What is the driver behind this move (reliability, scalability, flexibility, and/or cost)?
2. What platform services help most with the driver?
3. What is my budget (time, money, and political will) to implement changes?
4. How hard will it be to change my application?
Step 1. Establish the Business Driver for Your Move to the Cloud
If cost is the core driver or if an application is currently flexible enough to scale in the cloud, you may be able to get away with a re-host and still achieve the scalability and reliability improvements just from moving to the cloud. However, architectural flexibility will not be achieved without embracing some of the platform pieces (Platform as a Service, PaaS) and that means a move to either a replatform or re-architect. In addition, most existing on premises applications are not built for this kind of adaptability. So, expect to run a replatforming or re-architecting effort for most Cloud migration drivers.
Step 2. Determine Services for Your Specific Needs
With the driver established, you should determine which services will best support your needs. The Cloud ecosystems have grown quite complex and it can be a bit daunting to analyze which pieces best support this effort. The upside of the complex and varied service offerings is that there are many ways to support any given driver with the Cloud. You can always get help from experts who understand the application domain and what you are trying to achieve with the Cloud.
Step 3. Define Your Budget
After identifying the core driver and platform services needed to achieve a cloud enablement, it is important to think about the budget for the project. I have been on projects where the desire and need outstripped the budget and it caused frustration. Luckily, Cloud replatforming can be done in increments. A common approach is to start with a re-host that is followed by any replatforming work to embrace platform services. With the application already in the Cloud, it is easier to rewrite small pieces to embrace new services without dealing with complex data center issues.
Step 4. Establish Feasibility of Making the Change
Finally, it is important to understand the complexity of the application being moved to the cloud. More complex applications often hide items that are difficult to refactor. This leads to problems where any effort to replatform the application is stymied by an unexpected dependency or other code problems. In these cases, it might be best to start a re-architecting effort to micro-services or some other flexible architecture. This is a large endeavor that is beyond the scope of this article, but can be done in pieces which slowly reduce the complexity of the overall system.
Answering these questions helps us answer the question of how to enable an application for the cloud. It is not a question of enabling the application, but realizing the value of an application with the help of the Cloud. As we move toward cloud hosted applications, we need to ensure that we are adapting to maximize the value that the cloud’s agility provides.