I’ve spent much of last 11 months with AWS customers and teams determining what it takes for a customer to migrate to AWS or any other public cloud platform, as per what I’ve seen, migrating to cloud has been a somewhat challenging task considering factors such as security, platform expertise and cost.
In this article we will go through major challenges one would encounter while Migrating your app to AWS cloud. We all know migration do take alot of time and planning especially when it comes to migrating large/complex applications.
Let’s take a case study to understand this better..
Lets say Client X’s software system exists on their company’s own hardware, and they no longer want the maintenance costs. They plan on moving their software from private servers to Amazon Web Service (AWS) and have asked you for assistance.
Original Data Centre has:
– 1 load balancer pointing to the 3 app servers.
– 3 web app servers running nginx + php-fpm
– 2 mysql databases, 1 master, 1 slave using mysql-proxy
– Systems are all running Ubuntu 14.04
What are some of the major obstacles you may encounter, how might you solve them?
As a Solution Architect, you need to suggest solution for all the challenges.
Challenges can be related to :
Managing different environments
Use IAM to isolated access to resources or create separate accounts for each environment and managing them within single master AWS account
Securing AWS resources
Make sure implementing best practices to secure AWS resources
Performing secured database migration:
Use VPN service to securely transfer data from on-prem to AWS, if the data is in huge size(TBs) then use import/export service of AWS to get data onto AWS S3
Troubleshooting NGINX & PHP-FPM configuration related issues
Make sure the proper version for nginx and php-fpm are installed with all relevant packages
Troubleshooting NGINX & PHP-FPM permission related issues
Make sure processes and files have proper permission
Setup CI framework for Web servers
On on-prem push application’s deployable content like code, web, and configuration files, executables, packages, scripts etc. to GitHub and use AWS CodeDeploy to manage the deployments on all the web servers
Setup CD framework for all servers
Use OpsWorks, chef or puppet to manage server deployments
Designing architecture which is scalable and make optimum use of resources
Use Autoscaling feature for application servers
Pushing new updated code to existing EC2 instances
Use a tool like Capistrano to do a parallel “push” deployment to all the instances at once. This is generally just re-executing the same script that the servers ran at boot.
Making MySQL database instances fault tolerant
Use RAID 0 when I/O performance is more important than fault tolerance or RAID 1 when fault tolerance is more important than I/O performance
Backups & DR
Implement efficient backup strategies like warm or pilot stand by to decrease RTO. Take backups regularly and automate the process
These were some challenges that you might come accross whil migrating your app to AWS cloud
Again, these challenges might be different for other applications, one has to understand that everything on cloud revoles around three things security, management and scaliblity. The goal should be to make optimum use of resources and architecting infrastructure which is scalable, fault tolerant and secured.
Hope this helps