While moving to the cloud brings many benefits associated with it, we
need to also be aware of the pain points associated with such a move.
This post will discuss those pain points, provide ways to mitigate them, and
give you a checklist which can be used if you plan to migrate your
applications to cloud. We will also discuss the advantages of
moving to the cloud.
Common pain points
One of the primary pain points in moving to the cloud is selecting the
appropriate tools for a specific usecase. We have an abundance of tools
available, with many solving the same problem in different ways. To give
you a basic idea, this is the CNCF's (Cloud Native Computing
Foundation) recommended path through the cloud native technologies:
Picking the right tool is hard, and this is where having experience
with them comes in handy.
Also, the existing knowledge of on-premises data centers may not be
directly transferable when you plan to move to the cloud. An individual might
have to undergo a basic training to understand the terminology and the
concepts used by a particular cloud vendor. An on-premises system
administrator might be used to setting up firewalls via
Iptables, but he might also
want to consider using Security
if he plans to accomplish the same goals in the AWS ecosystem (for EC2 instances).
Another point to consider while moving to the cloud is the ease with which you
can easily get locked in to a single vendor. You might start using
Amazon's Auto Scaling
to automatically handle the load of your application. But when you plan
to switch to another cloud vendor the migration might not be
straightforward. Switching between cloud services isn't easy, and if you want portability, you
need to make sure that your applications are built with a multi-cloud
strategy. This will allow you to easily switch between vendors if such a
scenario arises. Taking advantage of containers and Kubernetes may give
you additional flexibility and ease portability between different cloud
Advantages of moving
Despite the pain points listed above, there are many advantages involved in
moving your applications to cloud. Note that even big media services
has moved on to the cloud instead of building and managing their own
data center solution.
One of the primary advantages of leveraging the cloud is avoiding
the cost of building your
own data center. Building a secure data center is not trivial. By
offloading this activity to an external cloud provider, you can instead build your
applications on top of the infrastructure provided by them. This not
only saves the initial capital expenditure but also saves headaches from
replacing hardware, such as replacing failing network switches. But note that
switching to the cloud will not magically save cost. Depending on your
application's architecture and workload, you have to be aware of the
choices you make and make sure that your choices are cost efficient.
Cloud vendors provide SLAs (Service Level Agreements) where they state
information about uptime and the guarantees they make. This is a
snapshot from the Amazon Compute SLA:
All major cloud providers have historically provided excellent uptime,
especially for applications that properly leverage availability zones.
But depending on a specific
usecase/applications, you should define the acceptable uptime for your
application and make sure that your SLA matches with it. Also depending
on the requirements, you can architect your application such that it has
multi region deployments to provide a better uptime in case there is an
outage in one region.
Security and Compliance
Cloud deployments provide an extra benefit when working in regulated industries
or with government projects. In many cases, cloud vendors provide regulation-compliant
By using cloud providers, we can take advantage of the various
compliance standards (eg: HIPAA, PCI etc) they meet.
Validating an on-premises data center against such standards can be a time consuming,
expensive process. Relying on already validated hardware can be faster, cheaper, easier,
and more reliable.
Broadening the security topic, cloud vendors typically also provide
a wide range of additional security tools.
Despite these boons,
proper care must still be taken, and best practices must still be followed,
to deploy an application securely.
Also, be aware that running on compliant hardware does not automatically
ensure compliance of the software. Code and infrastructure must still meet
Ease of scaling
With cloud providers, you can easily add and remove machines or add more
power (RAM, CPU etc) to them. The ease with which you can horizontally and
vertically scale your application without worrying about your
infrastructure is powerful, and can revolutionize how your approach
hardware allocation. As your applications load increases,
you can easily scale up in a few minutes.
One of the perhaps surprising benefits of this is that you don't need to
preemptively scale up your hardware. Many cloud deployments are able
to reduce the total compute capacity available in a cluster, relying
on the speed of cloud providers to scale up in response to increases in demand.
Focus on problem solving
With no efforts in maintaining the on-premises data center, you can
instead put your effort in your application and the problem it solves.
This allows you to focus on your core business problems and your
While not technically important, the cloud providers have energy
efficient data centers and run it on better efficiency. As a case study,
Google even uses machine learning technology to make its data centers
Hence, it might be environmentally a better decision to run your
applications on cloud.
Getting ready for Cloud
Once you are ready for migrating to the cloud, you can plan for the next
steps and initiate the process. We have the following general checklist
which we usually take and tailor it based on our clients requirements:
- Make a list of your applications and dependencies which need to be
- Benchmark your applications to establish cloud performance
KPIs (Key Performance Indicators).
- List out any required compliance requirements for your
application and plan for ensuring it.
- Onboard relevant team members to the cloud service's use management
system, ideally integrating with existing user directories and
leveraging features like single sign on and automated user provisioning.
- Establish access controls to your cloud service, relying on role based
- Evaluate your migration options. You might want to re-architect it
to take advantage of cloud-native technologies. Or you might simply
decide to shift the existing application without any changes.
- Create your migration plan in a Runbook.
- Have a rollback plan in case migration fails.
- Test your migration and rollback plans in a separate environment.
- Communicate about the migration to internal stakeholders and customers.
- Execute your cloud migration.
- Prune your on-premises infrastructure.
- Optimize your cloud infrastructure for your workloads.
I hope we were able to present you the challenges involved in
migration to cloud and how to prepare for them. We have helped various
companies in migration and other devops services. Free feel to reach out to
us regarding any questions on
cloud migrations or any of the other services.
Do you like this blog post and need help with DevOps, Rust or functional programming? Contact us.