As cloud adoption continues to permeate businesses, cloud computing is becoming the norm for many. But while cloud computing has many advantages over traditional IT computing, the nature of the cloud creates new challenges. In order to master cloud computing, consider the following principles that help drive cloud computing success.
Infrastructure as Code
In the old days, if we needed a network cable plugged in, we’d send Billy down to the data center to plug in the cable. Later, when we needed to reconfigure the network, we’d send Billy back out to do it again. The cloud-equivalent of this? Clicking buttons in the AWS console.
With the power of the cloud, we now have the option to codify our network design in code/configuration. And with both humans and machines able to reason over this code, we can ensure consistent and reliable deployments, utilizing the same automation while infrastructure is promoted between development, staging, and production environments. (Want to learn more about Serverless? Check out our video blog.)
Cloud adoption is best approached as an application-focused program. Unlike the physical-world, where large capital investments require centralized planning, the cloud allows infrastructure to be procured on-demand, on an application-by-application basis. This allows decisions to be made in the context of what is best for each application, fine-tuned over time, and scaled responsibly. (Want to learn more about cloud adoption? Check out our video blog.)
Applications, both home-grown and commercial off-the-shelf (COTS), should be delivered to cloud environments through a well-defined, staged pipeline. These pipelines should start from source and include all build, test, and deployment steps. Promotion between environments happens automatically (sometimes with human approval steps) and reliably. (Want to learn more about creating a CI/CD pipeline? Download our white paper.)
Stateless & Immutable
Ideal cloud environments are stateless and immutable — allowing the rebuilding of the production environment without harming existing environments and with nearly zero downtime. In practice, there are always some stateful components. However, in a well-architected cloud environment, these components are clearly identified, segregated, and made resilient. The remainder of the environment embraces the ephemeral nature of the cloud, and updates are delivered as net-new infrastructure rather than in-place modifications. (Are you well-architected in the cloud? Check out our blog.)
Many enterprise customers are accustomed to planning major projects around each deployment. Often scheduled only once per month or once per quarter, these deployments are planned in detail, and entire weekends are dedicated to the event. One of the primary goals of cloud adoption is to enable rapid deployments. To make this possible, cloud environments should be designed to enable deployments frequently, with automated, reliable and tested roll-back plans. Over time, as teams gain confidence in the deployment automation, the frequency of deployments will increase and features, changes, and enhancements will be delivered more quickly to the business. (Learn more in our blog about leveraging DevOps tools in AWS.)
The goal of centralized IT organizations should be to enable application teams to be self-sufficient. While IT teams deploy baseline infrastructure, security policy, compliance tools, and automation standards, application teams should own the full lifecycle of their application. From development, to production, application teams are free to innovate, test, and deploy. (Learn more in our blog about AWS security tools and best practices.)