The Cloud Revealed (Part 1)
What is the cloud, really? A look at three cloud computing concepts.
The very word cloud evokes the thought of mystery, the unknown, something beyond. And that is the way we network engineers thought about other providers’ networks as far back as I can remember. We knew that in Deutsche Telecom, for instance, or Telstra in Australia, there were entire infrastructures beyond their gateways, worlds we were not permitted to see.
Today, we think of the cloud as a fully established array of services provided by platforms like Amazon Web Services (AWS), Microsoft Azure, or Google Cloud Platform (GCP). And while much of their cloud resources and methods remain a mystery (we can’t see the underlying infrastructure), the concepts on which they were founded can be well understood.
Everybody is moving their IT resources to the cloud these days — and for good reason. The selling points are well known by now: pay-as-you-go, reduced time to market, eliminating capital expenditures, scalability, and the outsourcing of IT infrastructure.
Neither companies nor individuals want to be bogged down with cumbersome tasks of repetitive calculation or administration in the pursuit of their goals. Why manage complex data centers when you can hand over those responsibilities to reliable providers at a fraction of the cost? The cloud offers a means for busy organizations to avoid excessive computer work so that they can focus on their core competencies.
To gain an elementary understanding of cloud computing, let’s have a look at three overarching concepts that encapsulate the activities that take place in any cloud architecture. For the three terms that I have used, I am indebted to Cloud Bart (aka Bart Castle), a fine cloud instructor and multi-talented individual. In this article, we discuss the first of three cloud computing concepts.
Automation
One of the promises of the digital age is the ability to set processes in motion and then forget them. How boring it would be to sit and calculate numbers for hours at a time, day in and day out! And then to discover that, after all those efforts, human error often made the data unreliable. But that was how it was before the digital age.
Mathematician Charles Babbage (1791-1871), who would later design two mechanical binary computers, was so fed up with discrepancies that he found in astronomical tables that he cried out, “I wish to God these calculations had been executed by steam!” If only a steam engine could crunch all those numbers.
And that's what computers are supposed to do: Make our lives easier. That's probably something we should sit and think about for a minute. If our digital devices are making us more stressed and more agitated, then maybe we are doing something wrong.
J.C.R. Licklider, the author of the famous paper Man-Computer Symbiosis, was ultimately looking for a way to offload some of the more tedious functions of his job so that he would have more time for more important things. He wanted time to think, reflect, create, invent. Licklider wrote about the advantage a machine has in solving problems:
“However, many problems that can be thought through in advance are very difficult to think through in advance. They would be easier to solve, and they could be solved faster, through an intuitively guided trial-and-error procedure in which the computer cooperated, turning up flaws in the reasoning or revealing unexpected turns in the solution.”
It is cooperation with the machine that Licklider envisioned, rather than fully handing over all human responsibilities. Smaller projects are often best handled by manual processes. Automation, on the other hand, generally has greater application for large enterprises and complex projects. The greater the volume of routine tasks, the more justification there is for streamlining them into repeatable processes.
Such routines are at the very heart of computer programming. Babbage’s young protege, Ada Lovelace, proposed the idea of repeatable subroutines in her famous Notes On the Sketch of the Analytical Engine. She demonstrated how a machine can follow mathematical instructions to perform the tasks assigned to it.
As you may know, cloud computing is more of a service model than a technology. What cloud providers like AWS have done is to assimilate various existing methods, tools, and technologies into a single platform. While the hope is to give greater power to the user, the goal of making things easier – along the lines of Babbage, Lovelace, and Licklider – is just as important. The automation of routine tasks represents some of the highest functions of the cloud.
See my article on Parted for a Lifetime to learn more about Ada Lovelace, Charles Babbage, and the early development of computing.
AWS cloud engineers and administrators should know how to create cloud infrastructures from scratch. Spin up some virtual machines here. Create some storage areas there. Whip up a database if needed. Throw them all together into availability zones and regions connected by gateways. There's a lot to it. You could call this a manual approach. But once you get it down pat, it makes sense to automate your work.
Two important automation tools in Amazon's kit are Elastic Beanstalk and CloudFormation. They are used to provision and deploy applications and services by enacting pre-configured tasks in sequential order. The resulting processes are only available after a real human has set them up, of course. But once created, you can execute a whole array of tasks with a few clicks of the mouse.
Here is an example of a snippet of code that can be used in CloudFormation for the creation of a virtual machine, known as an EC2 in AWS. (EC2 stands for Elastic Compute Cloud). Notice here that the EC2 is assigned to availability zone “aa-example-1a” and to image ID “ami-1234567890abcdef0” (more on those components in later posts). The concept of building cloud resources this way is called Infrastructure-as-Code (IaC).
The point here is that rather than manually creating a virtual machine, as well as whatever other cloud components you choose, you can use CloudFormation and IaC to automate the individual tasks of infrastructure creation. And you can repeat it at will. It’s a neat trick.
But there are plenty of other ways to implement automation in AWS. Suppose you want to make photo images available in three different forms. You want one of the pictures that will be the right size for a person who is using a browser on a computer. Then a second copy that a person on a smartphone can easily see. And then one more copy that is thumbnail size for various purposes. How can AWS automate that?
It's fairly easy, and I could teach you how if you're interested. There is a service called AWS Lambda that specializes in just doing a few functions at a time. In this case, it's possible to create a Lambda function that will resize an image into the three sizes we spoke about every time it is uploaded to an Amazon S3 storage location. Simple. Upload the image file, then the three different file sizes are created. Below is an illustration of that process taken from AWS Lambda documentation
AWS offers more than 200 services, and there are myriad ways to automate them. If you manually created cloud resources or resized images one at a time, you would keep pretty busy. I think if our internet pioneers Babbage et. al. could look down from heaven and see what we have accomplished so far with cloud computing, they would be pretty proud. And we should thank them for blazing the trail.
Final Thoughts
In this article, we have discussed the first of three cloud computing concepts meant to provide some foundation for understanding cloud computing. I originally wrote this as one long post but decided at the last minute to be kind to the reader and break it up into smaller chunks. Stay tuned for Parts 2 and 3 in the coming days.
We will get into more specifics in future posts. I hope that you will subscribe and join me as I reveal so much more about cloud infrastructures and how you can use them to support your computing goals.