Cloud computing has revolutionized IT since the 2000’s, and this revolution is far from over. Formerly, organizations would host their data on-premise as that was the only option available, but with the advancement in technology, and fast-changing business demands, cloud-based solutions started turning out to be a more flexible and powerful option for organizations. There is a mass migration underway to adopt cloud infrastructure and avoid the hassles and operational costs of managing infrastructure in-house.
Migration to the cloud is a long, phased-out journey rather than a one-time ‘set it and forget it’ task.
Netflix, one of the pioneers in cloud computing, took 8 years to completely migrate from on-prem to cloud. It’s reasonable to say that less savvy organizations and more entrenched ones will take even longer. In fact, a complete migration may not even be a possibility for many organizations, and most will likely end up with hybrid cloud setups.
Having a well-planned cloud migration strategy can be a crucial factor in the success of an organization. The major reason for cloud-adoption failing is a wrong adoption strategy, and issues that crop up during the migration. One simple example could be the false belief that if an application is running on any platform (say Windows) under certain conditions, it would work equally well on a public cloud instance with the same configuration of Windows. The ‘works-on-my-machine’ issue plagues many an application.
Developing a cloud migration strategy is not a straightforward path and involves several challenges. In this post, we discuss seven key steps to a winning cloud migration strategy.
1. Start by taking an honest look at your team’s expertise
The best place to start your cloud migration journey is with your team’s technical expertise. This includes the kind of programming languages used to build applications, what kind of infrastructure it takes to run the applications, how many hands are on board (Dev, QA, Ops), how frequently releases happen, and how mature the team is in terms of adopting agile methodologies like DevOps. Ideally, you want to keep the best parts of what’s working for your teams and leave behind outdated processes as you move to the cloud. Cloud migration requires training for various teams so they can adapt to the operational and design principles of the cloud. You may prefer to hire an external consultant who has walked various organizations through successful cloud migrations already. This will minimize the risk of failure.
2. Employ a hybrid approach
Taking a page from the Netflix example, it is good practice to start small and go further into the cloud than make the jump all at once. Especially when dealing with large applications or workloads there are too many things that can go wrong. In this case, it makes sense to adopt a hybrid approach where only specific elements of the large application are migrated to a cloud environment and much of the app runs on-premise as it always has. The biggest benefit of this is that it makes the transition seamless. You can test the compatibility and identify any gaps and loopholes in specific parts of the system.
With some applications, you can use the ‘lift and shift’ model, but with others, you may need to completely refactor or rearchitect them to adapt to a cloud environment. In some cases, the entire application need not be migrated to the cloud ever. For example, in a financial services organization, for compliance purposes, critical data needs to be stored on-premise or on a dedicated cloud instance that the organization has full control over. Here, hybrid will be the default approach and not just a temporary one. Create a checklist of key elements to be migrated to the cloud as well as the timing and resources required for each of them. This will keep you focused on the right things throughout the migration process.
3. Gauge security & performance risks
One of the biggest reasons for not wanting to migrate to the cloud is the perceived risks that come with it. Public cloud services like AWS EC2 run applications of multiple organizations on shared servers. While this doesn’t present security risks, it can at times result in performance issues, or downtime if the cloud vendor’s services themselves fail. Migration to a public cloud platform may also involve the risk of compromising data security. All it takes is an open S3 bucket to leave all your data exposed to hackers. When working with the cloud there are cloud-specific security tools that automatically scan for vulnerabilities and report on them. Critical data needs to be backed up. This isn’t difficult with the cloud as storage costs are relatively cheap. Cloud backup services can help you keep data on standby so your app can weather downtimes and outages.
4. Go all-in with containers, microservices, and DevOps
The cloud calls for a fundamental change in how your teams operate. Taking the old waterfall development methodology, and monolithic application architectures with you to the cloud is a recipe for disaster. Instead, the cloud calls for decomposing applications into distributed microservices that are run on container-based architecture. These microservice applications are built following the DevOps methodology. This involves a fundamental shift in mindset and operations, but it’s what will deliver the full benefits of the cloud. By starting small and making a gradual change over time you’ll see that these approaches complement each other. Soon, these cloud-native approaches will become the new normal, and you’ll wonder how you ever functioned without them before.
5. Take testing to the cloud
Cloud applications can’t be tested using non-cloud testing approaches. Most modern applications run in a browser and their performance across various versions of browsers should be tested. Spinning up each version of a browser on a physical system is tedious and not worth the effort. On the other hand, using a Selenium-based browser testing solution like Sauce Labs is the way to go. These modern testing tools are cloud-based. This means you upload your test script and execute the test in an online interface. The results of the tests are delivered in an online dashboard. Not just browsers, you’ll need to test performance on various mobile devices which can be even more complex. Look for a testing solution that can execute the kind of tests you need to run, and do them at scale.
6. Gain end-to-end visibility with monitoring and logging
It is an old saying that “you can’t manage what you don’t measure”. When it comes to the cloud you’ll need a mix of monitoring tools to gain an end-to-end view of your system. Cloud providers provide proprietary monitoring tools which are tightly integrated with their cloud platform, but their features are limited. You may want to consider a standalone monitoring tool to monitor events, logs, and setup alerting for when things go wrong. Open source tools like Prometheus and the ELK stack have raised the bar when it comes to monitoring cloud-native applications. Commercial solutions have kept pace and innovated so that there are numerous options to monitor cloud applications and gain a single pane of glass view.
7. Keep costs in mind
Though cost is the last point we’ll cover here, it is likely the first thing on the mind of your CFO or business leader. The factors that decide the cost of a cloud migration include data storage, processing power, tools for testing and monitoring, and the security-related services. Other important factors are the cost of implementing and integrating cloud apps, and the cost to train teams on cloud technologies. Select an optimum cloud platform which fits your budget, without making any compromise with the performance. Further, spread out your expenses so that you can prioritize the important ones early, and leave luxuries for later.
Successful migration to the cloud not only brings down the cost of running applications but also enables modern capabilities that are not possible with an on-premise setup. The cloud migration strategies mentioned here will ensure your journey to the cloud is secure, seamless, and successful.