This book aims to introduce Amazon Web Services (AWS) to architects and DevOps, how does it fare?

Companies are increasingly moving their systems to the cloud, owing to its many advantages over in-house systems (e.g. elastic demand, lower cost). AWS is the most popular cloud platform, indeed Amazon makes most of its money from its cloud services hosting, rather than its online marketplace.

This movement to the cloud is likely to change how we do our jobs, so it makes sense to gain an understanding of the underlying concepts. This book aims to introduce many of the commoner AWS components.

Below is a chapter-by-chapter exploration of the topics covered.

Chapter 1 Cloud 101 – Understanding the Basics

The book opens with a discussion of what cloud computing is, covering: elastic scalability, on-demand provisioning of resources, and a pay-as-you-go cost model. The main types of clouds (public, private, and hybrid) are then briefly defined.

Next, the various cloud service models are described (i.e. Infrastructure, Platform, and Software), having a sliding scale of user control/involvement. The various ways of sharing resources (shared nothing, shared applications, shared everything) are briefly examined, with the impact and tradeoff of costs, performance, maintainability and security emphasized.

The next section discusses cloud-based workloads, including both migrating on-premise applications and cloud-native applications. Some expected and unexpected consequences are highlighted (e.g. cost saving on lift-and-shift migrations).

Reading is all very well, but to get the most out of this book, you’ll need to get your hands dirty. The chapter ends with a step-by-step walkthrough on how to create a new AWS account (free for 12 months, but with limited functionality), which is used in subsequent practical exercises. This is followed by a brief introduction to the primary interface to AWS, the AWS management console.

This chapter provides a good general introduction to cloud concepts and AWS. The chapter has useful discussions and explanations, helpful diagrams, instructive step-by-step walkthroughs, and plenty of practical advice based on real-world experience. Helpful chapter summaries are included. Subsequent chapters show this is not a book for those that are new to software architecture. These traits apply to the whole of the book.

Chapter 2 Designing Cloud Applications

This chapter opens with a short discussion about multi-tenancy, highlighting its advantages (e.g. cost saving) and disadvantages (e.g. increased complexity). Next, some of the well-known design principals are discussed (e.g. scaling, failure), before moving on to the common architecture patterns (e.g. Lambda, Kappa). The importance of controlling costs, and how they can be estimated with AWS tools are discussed briefly. The chapter ends with details on how to install software that will used in the sample web e-commerce project that is built on in subsequent chapters (using Spring and My SQL).

This was an interesting background chapter. You’ll need to already have an understanding of various architecture patterns to get the most from it, if you do then it provides a good refresher, if you don’t then you’ll feel lost and have to go elsewhere to get an understanding. The chapter is very practical in both its explanations and the advice offered. This chapter is not sufficient to learn the basics from. In many ways, whilst the chapter is cloud focused, it is largely independent of AWS. Various terms are used without being defined (e.g. A/B testing, REST service, Idempotent).

Chapter 3 Introducing AWS Components

This chapter introduces the many areas of AWS, including:

Compute (e.g. EC2, Lambda)

Storage (e.g. S3, EBS, Glacier)

Database (e.g. RDS, DynamoDB, Redshift)

Messaging (e.g. SQS, SNS, Pinpoint)

Network (e.g. VPC, Elastic Load Balancing, Route 53)

Tools (e.g. CloudFormation, CloudWatch)

Security (e.g. IAM, Certificate Manager)

Analytics (e.g. EMR, Kinesis)

Although wide-ranging, this section only provides meager detail on each topic, often just a paragraph or less. That said, it does provide a structure that can be referenced subsequently. There’s a useful reminder that these tools should be checked regularly since both Amazon and third-parties are constantly creating new components.

The chapter next looks in more detail at ways of lowering your AWS costs, an important topic since it is a prime reason for migrating applications to the cloud. There’s a useful reminder about revisiting the costs identified regularly to ensure you get the best value.

The chapter ends with step-by-step instructions (with plenty of screenshots) for setting up the AWS infrastructure needed for the sample e-commerce applications. Overall it provides a useful, if light, introduction to what can at first seem a bewildering array of services.

Chapter 4 Designing for and Implementing Scalability

Scalability is undoubtedly one of the major advantages of using the Cloud. This chapter opens with a look at some basic concepts that underlie scalability (e.g. stateless, loose coupling, asynchronous processing), before looking at the AWS services that aid scalability (e.g. CloudFront, ELB, CloudWatch).

The chapter proceeds to examine how architectures can evolve to cater for increasing loads, the examples given scales from 1 user to 10 million users. Next, various means of handling events at scale are outlined (e.g. using AWS Lambda, Elasticsearch). A very useful section on setting up autoscaling follows, together with details on how to test this. The chapter ends by setting up autoscaling on the sample e-commerce application.

This chapter provides some very useful techniques for ensuring your systems scale, and your users don’t get the dreaded 503 (Temporarily Unavailable) message.

Chapter 5 Designing for and Implementing High Availability

As the criticality of applications increases, and the cost of lost revenue mount up, the importance of High Availability (HA) becomes ever more important. HA can be costly, so tradeoffs are often needed.

The chapter opens with a brief look at some of the types of failures (e.g. disk faults, natural disasters), before looking at setting up a Virtual Private Cloud (VPC) that has a primary and Disaster Recovery (DR) site. The use of the Elastic Load Balancer (ELB) and Route 53 (a DNS service) is discussed. The importance of regions and availability zones (AZ) in HA/DR solutions is noted.

The chapter expands on a range of approaches used for DR (e.g. from backup/restore to multi-site architecture). The importance of having a tested automatic recovery strategy is noted.

The chapter ends with setting up of HA for the included sample application (using ELB and RDS). There’s a nice point about hosting an application on the cloud does not make it fault tolerant or highly available, these features need to be designed into your solution.