The cloud offers many benefits to a company’s modern application development process. One of the most significant benefits is the ability to automate critical actions that traditionally have required manual steps.
Automation is perhaps the single most significant advantage of using the cloud. Cloud architects thrive in their roles by taking advantage of automation wherever feasible.
What are some of the common cloud automation techniques that are central to a cloud architect’s job? Here are five operations that every cloud architect should strive to automate when designing, building, and deploying cloud-hosted applications.
Automation #1. Scaling
Automated scaling is the most fundamental and essential to using the cloud. Whether we are talking about auto-scaling server resources or the elastic scaling built into cloud-native services such as Amazon S3 and DynamoDB, scaling is an essential part of the cloud. Building a scalable infrastructure is one of the core reasons why people move to the cloud in the first place.
But much of this automated scalability requires launching new server instances quickly and painlessly, which leads us to the next automation.
Automation #2. Server provisioning
In the pre-cloud days, provisioning a new server could take days or weeks. Cloud automation enables the provisioning of a fully functional and operational server instance, with all required software and services installed and running, in a matter of minutes. Automated server provisioning is not only key to auto-scaling, but also to self-healing infrastructures (another form of cloud automation). Terminating a failing or compromised server instance and letting automation replace it with a fresh server instance changes how problem resolution happens in the cloud. This capability is central to improving MTTR (mean time to resolution) of many classes of problems and errors.
Automated server provisioning works much the same whether you’re launching new virtual machine instances in a compute service like Amazon EC2 or new container instances in a Kubernetes environment like Google Kubernetes Engine. In either case, automation improves both speed and reliability when launching, scaling, and repairing server instances, which is fundamental to most cloud-enabled applications.
Another benefit of automated server provisioning is improved availability. Automating provisioning means that a smaller number of larger servers can be easily replaced with a larger number of smaller servers. Such a model can dramatically improve the availability of an application, reducing the impact of failures.
But automated server provisioning works only if the rest of the infrastructure needed to operate the servers can also be set up quickly and easily. This leads us to the next automation.
Automation #3. Infrastructure creation
Automatically provisioning your servers is not, in itself, sufficient to get your cloud application up and running and serving users. You must also provision your load balancers, firewalls, network segments, databases, and any other services your application relies on, such as queues and caches. All supporting infrastructure must be set up, configured, and connected to your application before it will be fully functional.
All of this provisioning can be quite time consuming if done manually. If you were deploying in an on-premises data center, it might take days or longer to set up all the necessary components. In the cloud, however, an automation technique known as infrastructure as code (IaC) allows you to provision your application infrastructure using calls to APIs.
IaC allows you to specify how you want your infrastructure set up in source code, often a JSON or YAML file, that can be managed using traditional software version control systems (such as Git). Then, you take the codified infrastructure configuration and pass it through a tool that will automatically provision, configure, and connect your infrastructure components into a working network.
There are many tools available that perform this level of cloud infrastructure automation. Two popular tools are HashiCorp’s Terraform and AWS’s CloudFormation.
Infrastructure as code provides unique benefits to your infrastructure provisioning process, including change control and approval, change tracking, and infrastructure code reuse. Infrastructure as code is only possible in a cloud or cloud-like data center, where infrastructure APIs allow automated infrastructure creation.
Cloud architects should leverage IaC tools to create reliable, secure, and repeatable cloud patterns for infrastructure provisioning. The benefits are difficult to overstate.
Automated infrastructure setup based on code management leads to our next automation.
Automation #4. Code deployment
Automated code deployment pipelines are not unique to the cloud. But given the heavy use of other types of automation, automated code deployments are a natural extension for cloud-enabled applications, and they are heavily relied on by cloud architects.
One of the most popular methods of automated code deployment is the CI/CD pipeline. CI/CD, or continuous integration/continuous delivery, is a model that allows code deployments to be automatically applied to production applications based on code checked into a software version control system (again, such as Git). Depending on the application and company policies, automated deployments may be scheduled (such as daily or hourly) or triggered whenever a change is made to the code base and made available for deployment.
Many tools are available to enable automated code deployments. The list includes tools such as Jenkins, Bamboo, GitLab, CircleCI, and AWS CodeDeploy. Each of these operates differently, and the cloud architect must pick the right automation strategy to meet the needs of the development organization and business. Yet, virtually all sophisticated, cloud-architected applications use some form of automated code deployment. Yours should too.
Automation #5. Native cloud services
Often overlooked as a type of automation is the automated dynamic scaling that is built into many cloud services. Cloud queuing services (such as Amazon Simple Queue Service), cloud data storage (such as Amazon S3), and cloud databases (such as Amazon DynamoDB) rely heavily on automation to manage the scaling needs of the dynamic applications that utilize them.
Cloud architects often prefer to use a data store such as S3 versus creating their own data store from local drive storage on compute instances (for example) because it is simple, safe, reliable, easy to integrate, and automatic in its functionality. The same can be said for many other services the public clouds provide. By using them, you take advantage of powerful automation that takes place in the background.
Cloud means automation
Automation is one of the defining characteristics of the cloud. It’s one of the elements that distinguishes the cloud from the traditional data center. Of course you can run your application in the cloud without taking advantage of automation, and many do, but they’re missing out. Because automation is the path to greater consistency, reliability, security, scalability, and responsiveness to the needs of your business.
Lifting and shifting an on-premises application to the cloud “as is” is a relatively simple and straightforward migration, and typically does not need a trained cloud architect to implement. But such an application misses out on most of the advantages of running in a cloud. Building a truly cloud-enabled application does require a cloud architect, but it will take advantage of everything the cloud has to offer. And virtually any cloud-architected application will make heavy use of automation.
A good cloud architect will enable, expand, support, and encourage the use of automation in all cloud-based applications. Put simply, a good cloud architect will automate as much as possible. They are driven by the power of automation available in the cloud, and they enjoy using these automations in unique and interesting ways. It’s what the most successful application deployments are made of.