What is the AWS Cloud?
As a developer, you need to meet end-user demands with the least amount of effort and in the quickest time. Amazon Web Services (AWS) is a huge array of services that affects consumers, small to medium-sized businesses (SMB), and enterprises. Using AWS, you can do everything from creating applications for remote access to organization data to creating a full-fledged IT department in the cloud.
The installed base is immense. You can investigate case studies of companies like Adobe and Netflix that use AWS. AWS use isn’t just for private companies, either — even the government makes use of its services.
The technologies that make all these services possible are simple in conception. Think of a pair of tin cans attached to each other by a string. Amazon holds one tin can and you hold the other. By talking into one tin can, you can hear what is said at the other end. The implementation, however, relies on details that make communication harder than you might initially think.
Understanding service-driven application architectures
Service-driven application architectures, sometimes known as Service-Oriented Architectures (SOA), come in many forms. No matter how you view them, service-driven application architectures are extensions of the client-server technologies that you may still use when creating localized applications, in that a client makes a request that a server fulfills by performing an action or sending a response.
The request/response implementation details have changed significantly over the years, however, making modern applications far more reliable, flexible, and less reliant on a specific network configuration. The request and response process can involve multiple levels of granularity, with the term microservice applied to the smallest request and response pairs. Developers often refer to an application that relies on a service-driven application architecture as a composite application because it exists as multiple pieces glued together to form a whole. Service-driven application architectures follow many specific patterns, but in general, they use the following sequence to perform communication tasks:
- Create a request on the client using whatever message technology the server requires.
- Package the request, adding security or other information as needed.
- Send the request using a protocol, such as Simple Object Access Protocol (SOAP), or an architecture, such as REpresentational State Transfer (REST).
No matter what programming language you use, you need to know how to communicate with web services using your programming language of choice. Discover how SOAP works and how REST works. Knowledge of both is required when working with AWS as a developer.
- Process the request on the server.
- Perform an action or return data as required by the request.
- When working with data, process the response on the client and present the results to the user (or other recipient).
AWS provides a service-driven application architecture in which you choose a specific service, such as Simple Storage Service (S3), to perform specific tasks, such as to store application data in a remote location. In many cases, you must perform setup steps in addition to simply interacting with the service.
For example, if you look at the ten-minute AWS tutorial, you find that you must first create a bucket to store the files you want to upload to Amazon. This additional step makes sense because you have to establish a location from which to retrieve the files later, and you don’t want your files mixed in with files from other people.
Even though many of the processes you perform with AWS require using an app (so that you have a user interface rather than code to work with), the underlying process is the same. The code provided in the app makes requests and then waits for a response.
In some cases, the app must determine the success or failure of an action on the server. Rather than reinvent the wheel, a smart developer will use as many of these apps as possible to perform general configuration tasks. Using the AWS apps places the burden of updating the code on Amazon so that you can focus on custom tasks related to your organization.
Understanding process- and function-driven work flows
In creating apps to help manage underlying services, AWS also defines workflows. A workflow is an organized method of accomplishing tasks. For example, when you want to save a file to AWS using S3, you must first create a bucket to hold the file. Only after you create a bucket can you save a file to AWS. In addition, you can’t retrieve a file from the bucket until you first save a file there, which makes sense because you can’t grab a file out of thin air.
In short, a workflow defines a procedure for working with software, and the concept has been around for a long time. (The first workflows appeared in the mid-1970s with simple office automation prototypes at Xerox Parc and the University of Pennsylvania’s Wharton School of Business.)
Workflows can consist of additional workflows. In addition, workflows manage the interaction between users and underlying services. A process is the aggregation of services managed by workflows into a cohesive whole. The workflows may perform generic tasks, but processes tend to be specific and help users accomplish particular goals. A process-driven workflow is proactive and attempts to circumvent potential problems by
- Spotting failure patterns and acting on them
- Looking for trends that tend to lead to failures
- Locating and extinguishing potential threats
In looking through the AWS tutorials, you find that they all involve using some type of user interface. The user interface provides the workflow used to manage the underlying services. Each major tutorial step is a workflow that performs a specific task, such as creating a bucket. When you combine these individual workflows into an aggregate, the process can help a user perform tasks such as moving files between the cloud and the user’s system.
Creating a cloud file system is an example of a process-driven workflow: The workflow exists to make the process viable. Workflows can become quite complex in large-scale operations, but viewing them helps you understand AWS better. Check out a more detailed discussion of workflows and processes.
A function is the reactive use of services managed by workflows to address specific problems in real time. Even though it would be nice if process-driven workflows worked all the time, the reality is that even with 99.999 percent reliability, the process will fail at some point, and a function-driven workflow must be in place to address that failure.
Although process-driven workflows focus on flexible completion of tasks, function-driven workflows focus on procedurally attenuating the effect of a failure. In short, function-driven workflows address needs. The AWS services and workflows also deal with this issue through the user interface, such as by manually restoring a backup to mitigate a system failure.
As a developer, you find yourself involved in a number of tasks that may appear at first to fall outside the realm of development. Development in the cloud isn’t quite the same as development at the desktop or development of applications using a browser strategy. When working through development tasks with AWS, you find yourself performing these kinds of tasks in order to implement workflows:
- Configuring the native functionality of AWS using wizards, AWS-driven scripts, or direct API calls through code
- Modifying AWS-driven scripts as needed to accomplish specific goals in the least amount of time possible
- Defining new configuration scenarios to meet workflow requirements by modifying underlying AWS configuration files, scripts, and code
- Using AWS-supplied tools, such as lambda functions, to perform tasks without resorting to hard coding
- Developing applications that rely on API calls to perform tasks