The client required migration of his microservices-based application to AWS, using containers. The application was running on site, using legacy DevOps tooling, Xen VMs, Chef, and some scripting. So what, exactly, was the problem? Both security concerns and network limitations precluded this migration from being performed progressively. The only component permitted to exist in duplicate was the database, using replication. It was required that all on-site microservices must be stopped on premise, and prior to migration to the cloud, due to limitations of thirty parties APIs.
There were three important parts in this process: infrastructure code, communication, and testing. First, infrastructure code. All deployment to the cloud was fully automated, from network layout to application deployment in each instance. Second, communication (and coordination). Authority to proceed with this migration was not invested in a single team but shared by several teams. Coordination of these teams, therefore, was critical to a successful migration. Third and most important, testing, not only of the application and infrastructure (though that of course was required). It was necessary also that the cooperative functioning of the various teams involved in the migration be verified. In addition, it was critical that we tested the rollback in case something were to go wrong.
Migration was scheduled for January. The first simulation, ran in a pre-production environment in November, involved QA (for manual testing), network team (for DNS changes), developers, infrastructure engineers and project managers. The November test failed because there was a communication issue, and QA was not ready to verify on time. The second simulation, ran in the same environment at the end of December, was successful. January’s successful production migration ran as expected, with less than one hour of downtime.
Faced with a problem like the one discussed here, the focus seems naturally to turn to technologies. The Flugel team recognizes that human factors are equally important, and we can assist you to manage them properly.
Major Tools used: AWS, Docker, ECS, Chef, CloudFormation, Python, Jenkins.