This week’s Day Two Cloud episode features Calvin Hendryx-Parker talking to me and Ethan about moving to an Infrastructure as Code approach and hosting that approach in the cloud. We really hit the ground running, and soon we were digging into the details of how to separate application and infra code, being kind to your future self, and taking advantage of cloud native services like Lambda.
One of the things that stuck out to me, and this isn’t a new theme by any stretch, is the need to rethink applications to run in the cloud. Calvin made the point that if you’re simply moving your application as is to the cloud, you are going to be dissatisfied with the outcome. Your application is not going to magically improve simply by moving it to a new location. In fact, things may get worse because it has dependencies on services or other applications that still reside on-premises. Plus, there’s every reason to believe it’s going to cost you more!
Completely rewriting an application for the cloud is out of scope for many projects. There is a large cost associated with re-engineering the application to use cloud native services, and the cost may outweigh the benefit. As my buddy Bobby Allen would say, “Is the juice worth the squeeze?” That doesn’t mean you shouldn’t move your application though!
Calvin talked about bespoke, finely crafted servers running your code and deployment processes. This would be a system that you’ve manually configured and upgraded over the years. Your system is brittle and not well understood. If you leave the company, no one will understand how to run the system. If the system breaks, you might waste hours trying to bring it back to life. Worse, and I have seen this before, your system might be running on bare metal that is no longer under a support contract. When that system fails, as all systems inevitably do, you better hope you backups work and you can find suitable hardware to run it on.
The alternative is to define your applications and infrastructure using code. When it comes to the cloud, that is a straightforward affair. The APIs are sitting there ready for you to use. The environment is standardized and easy to consume. It’s the polar opposite of most corporate data centers today. When you plan to move an application to the cloud, you might not need to rewrite the whole thing, but it is an opportunity to redefine the deployment of that application in code. Don’t just use a migration tool that understands nothing about your application. Learn what your application actually needs to function, and codify that information in a version controlled repository. Your application will be more resilient and easier to maintain.
I know I’ve beat this drum before, and I’ll probably sound it again. This episode was a good reminder that the theory of IaC and CI/CD is not just a pipe dream. Calvin and his team at Six Feet Up are really doing the thing. And they have consulted with multiple large orgs that are also doing this magical thing. It is not unobtainable or impossible. Is it going to require hard work and dedication? Yes. Will you have to learn new things and stretch unfamiliar muscles? Yes. Is it worth it? Yes.