Amazon Web Services in Action, Second Edition
Michael Wittig and Andreas Wittig
Foreword by Ben Whaley
  • September 2018
  • ISBN 9781617295119
  • 528 pages
  • printed in black & white
free previous edition eBook included
An eBook copy of the previous edition of this book is included at no additional cost. It will be automatically added to your Manning Bookshelf within 24 hours of purchase.

Slices through the complexity of AWS using examples and visuals to cement knowledge in the minds of readers.

From the Foreword by Ben Whaley, AWS community hero and author

Amazon Web Services in Action, Second Edition is a comprehensive introduction to computing, storing, and networking in the AWS cloud. You'll find clear, relevant coverage of all the essential AWS services you to know, emphasizing best practices for security, high availability and scalability.

About the Technology

The largest and most mature of the cloud platforms, AWS offers over 100 prebuilt services, practically limitless compute resources, bottomless secure storage, as well as top-notch automation capabilities. This book shows you how to develop, host, and manage applications on AWS.

About the book

Amazon Web Services in Action, Second Edition is a comprehensive introduction to deploying web applications in the AWS cloud. You’ll find clear, relevant coverage of all essential AWS services, with a focus on automation, security, high availability, and scalability. This thoroughly revised edition covers the latest additions to AWS, including serverless infrastructure with AWS Lambda, sharing data with EFS, and in-memory storage with ElastiCache.

Table of Contents detailed table of contents

Part 1: Getting started

Chapter 1: What is Amazon Web Services?

1.1 What is cloud computing?

1.2 What can you do with AWS?

1.2.1 Hosting a web shop

1.2.2 Running a Java EE application in your private network

1.2.3 Implementing a highly available system

1.2.4 Profiting from low costs for batch processing infrastructure

1.3 How you can benefit from using AWS

1.3.1 Innovative and fast-growing platform

1.3.2 Services solve common problems

1.3.3 Enabling automation

1.3.4 Flexible capacity (scalability)

1.3.5 Built for failure (reliability)

1.3.6 Reducing time to market

1.3.7 Benefiting from economies of scale

1.3.8 Global infrastructure

1.3.9 Professional partner

1.4 How much does it cost?

1.4.1 Free Tier

1.4.2 Billing example

1.4.3 Pay-per-use opportunities

1.5 Comparing alternatives

1.6 Exploring AWS services

1.7 Interacting with AWS

1.7.1 Management Console

1.7.2 Command-line interface

1.7.3 SDKs

1.7.4 Blueprints

1.8 Creating an AWS account

1.8.1 Signing up

1.8.2 Signing In

1.8.3 Creating a key pair

1.9 Create a billing alarm to keep track of your AWS bill

Chapter 2: A simple example: WordPress in five minutes

2.1 Creating your infrastructure

2.2 Exploring your infrastructure

2.2.1 Resource groups

2.2.2 Virtual machines

2.2.3 Load balancer

2.2.4 MySQL database

2.2.5 Network filesystem

2.3 How much does it cost?

2.4 Deleting your infrastructure

Part 2: Building virtual infrastructure consisting of computers and networking

Chapter 3: Using virtual machines: EC2

3.1 Exploring a virtual machine

3.1.1 Launching a virtual machine

3.1.2 Connecting to your virtual machine

3.1.3 Installing and running software manually

3.2 Monitoring and debugging a virtual machine

3.2.1 Showing logs from a virtual machine

3.2.2 Monitoring the load of a virtual machine

3.3 Shutting down a virtual machine

3.4 Changing the size of a virtual machine

3.5 Starting a virtual machine in another data center

3.6 Allocating a public IP address

3.7 Adding an additional network interface to a virtual machine

3.8 Optimizing costs for virtual machines

3.8.1 Reserve virtual machines

3.8.2 Bidding on unused virtual machines

Chapter 4: Programming your infrastructure: The command-line, SDKs, and CloudFormation

4.1 Infrastructure as Code

4.1.1 Automation and the DevOps movement

4.1.2 Inventing an infrastructure language: JIML

4.2 Using the command-line interface

4.2.1 Why should you automate?

4.2.2 Installing the CLI

4.2.3 Configuring the CLI

4.2.4 Using the CLI

4.3 Programming with the SDK

4.3.1 Controlling virtual machines with SDK: nodecc

4.3.2 How nodecc creates a virtual machine

4.3.3 How nodecc lists virtual machines and shows virtual machine details

4.3.4 How nodecc terminates a virtual machine

4.4 Using a blueprint to start a virtual machine

4.4.1 Anatomy of a CloudFormation template

4.4.2 Creating your first template

Chapter 5: Automating deployment: CloudFormation, Elastic Beanstalk, and OpsWorks

5.1 Deploying applications in a flexible cloud environment

5.2 Comparing deployment tools

5.2.1 Classifying the deployment tools

5.2.2 Comparing the deployment services

5.3 Creating a virtual machine and run a deployment script on startup with AWS CloudFormation

5.3.1 Using user data to run a script on startup

5.3.2 Deploying OpenSwan: a VPN server to a virtual machine

5.3.3 Starting from scratch instead of updating

5.4 Deploying a simple web application with AWS Elastic Beanstalk

5.4.1 Components of AWS Elastic Beanstalk

5.4.2 Using AWS Elastic Beanstalk to deploy Etherpad, a Node.js application

5.5 Deploying a multilayer application with AWS OpsWorks Stacks

5.5.1 Components of AWS OpsWorks Stacks

5.5.2 Using AWS OpsWorks Stacks to deploy an IRC chat application

Chapter 6: Securing your system: IAM, security groups, and VPC

6.1 Who’s responsible for security?

6.2 Keeping your software up to date

6.2.1 Checking for security updates

6.2.2 Installing security updates on startup

6.2.3 Installing security updates on running virtual machines

6.3 Securing your AWS account

6.3.1 Securing your AWS account’s root user

6.3.2 AWS Identity and Access Management (IAM)

6.3.3 Defining permissions with an IAM policy

6.3.4 Users for authentication, and groups to organize users

6.3.5 Authenticating AWS resources with roles

6.4 Controlling network traffic to and from your virtual machine

6.4.1 Controlling traffic to virtual machines with security groups

6.4.2 Allowing ICMP traffic

6.4.3 Allowing SSH traffic

6.4.4 Allowing SSH traffic from a source IP address

6.4.5 Allowing SSH traffic from a source security group

6.5 Creating a private network in the cloud: Amazon Virtual Private Cloud (VPC)

6.5.1 Creating the VPC and an internet gateway (IGW)

6.5.2 Defining the public bastion host subnet

6.5.3 Adding the private Apache web server subnet

6.5.4 Launching virtual machines in the subnets

6.5.5 Accessing the internet from private subnets via a NAT gateway

Chapter 7: Automating operational tasks with Lambda

7.1 Executing your code with AWS Lambda

7.1.1 What is serverless?

7.1.2 Running your code on AWS Lambda

7.1.3 Comparing AWS Lambda with virtual machines (Amazon EC2)

7.2 Building a website health check with AWS Lambda

7.2.1 Creating a Lambda function

7.2.2 Use CloudWatch to search through your Lambda function’s logs

7.2.3 Monitoring a Lambda function with CloudWatch metrics and alarms

7.2.4 Accessing endpoints within a VPC

7.3 Adding a tag containing the owner of an EC2 instance automatically

7.3.1 Event-driven: Subscribing to CloudWatch events

7.3.2 Implementing the Lambda function in Python

7.3.3 Setting up a Lambda function with the Serverless Application Model (SAM)

7.3.4 Authorizing a Lambda function to use other AWS services with an IAM role

7.3.5 Deploying a Lambda function with SAM

7.4 What else can you do with AWS Lambda?

7.4.1 What are the limitations of AWS Lambda?

7.4.2 Impacts of the serverless pricing model

7.4.3 Use case: Web application

7.4.4 Use case: Data processing

7.4.5 Use case: IoT back end

Part 3: Storing data in the cloud

Chapter 8: Storing your objects: S3 and Glacier

8.1 What is an object store?

8.2 Amazon S3

8.3 Backing up your data on S3 with AWS CLI

8.4 Archiving objects to optimize costs

8.4.1 Creating an S3 bucket for the use with Glacier

8.4.2 Adding a lifecycle rule to a bucket

8.4.3 Experimenting with Glacier and your lifecycle rule

8.5 Storing objects programmatically

8.5.1 Setting up an S3 bucket

8.5.2 Installing a web application that uses S3

8.5.3 Reviewing code access S3 with SDK

8.6 Using S3 for static web hosting

8.6.1 Creating a bucket and uploading a static website

8.6.2 Configuring a bucket for static web hosting

8.6.3 Accessing a website hosted on S3

8.7 Best practices for using S3

8.7.1 Ensuring data consistency

8.7.2 Choosing the right keys

Chapter 9: Storing data on hard drives: EBS and instance store

9.1 Elastic Block Store (EBS): Persistent block-level storage attached over the network

9.1.1 Creating an EBS volume and attaching it to your EC2 instance

9.1.2 Using EBS

9.1.3 Tweaking performance

9.1.4 Backing up your data with EBS snapshots

9.2 Instance store: Temporary block-level storage

9.2.1 Using an instance store

9.2.2 Testing performance

9.2.3 Backing up your data

Chapter 10: Sharing data volumes between machines: EFS

10.1 Creating a filesystem

10.1.1 Using CloudFormation to describe a filesystem

10.1.2 Pricing

10.2 Creating a mount target

10.3 Mounting the EFS share on EC2 instances

10.4 Sharing files between EC2 instances

10.5 Tweaking performance

10.5.1 Performance mode

10.5.2 Expected throughput

10.6 Monitoring a filesystem

10.6.1 Should you use Max I/O Performance mode?

10.6.2 Monitoring your permitted throughput

10.6.3 Monitoring your usage

10.7 Backing up your data

10.7.1 Using CloudFormation to describe an EBS volume

10.7.2 Using the EBS volume

Chapter 11: Using a relational database service: RDS

11.1 Starting a MySQL database

11.1.1 Launching a WordPress platform with an RDS database

11.1.2 Exploring an RDS database instance with a MySQL engine

11.1.3 Pricing for Amazon RDS

11.2 Importing data into a database

11.3 Backing up and restoring your database

11.3.1 Configuring automated snapshots

11.3.2 Creating snapshots manually

11.3.3 Restoring a database

11.3.4 Copying a database to another region

11.3.5 Calculating the cost of snapshots

11.4 Controlling access to a database

11.4.1 Controlling access to the configuration of an RDS database

11.4.2 Controlling network access to an RDS database

11.4.3 Controlling data access

11.5 Relying on a highly available database

11.5.1 Enabling high-availability deployment for an RDS database

11.6 Tweaking database performance

11.6.1 Increasing database resources

11.6.2 Using read replication to increase read performance

11.7 Monitoring a database

Chapter 12: Caching data in memory: Amazon ElastiCache

12.1 Creating a cache cluster

12.1.1 Minimal CloudFormation template

12.2 Cache deployment options

12.2.1 Memcached: cluster

12.2.2 Redis: Single-node cluster

12.2.3 Redis: Cluster with cluster mode disabled

12.2.4 Redis: Cluster with cluster mode enabled

12.3 Controlling cache access

12.3.1 Controlling access to the configuration

12.3.2 Controlling network access

12.3.3 Controlling cluster and data access

12.4 Installing the sample application Discourse with CloudFormation

12.4.1 VPC: Network configuration

12.4.2 Cache: Security group, subnet group, cache cluster

12.4.3 Database: Security group, subnet group, database instance

12.4.4 Virtual machine—​security group, EC2 instance

12.4.5 Testing the CloudFormation template for Discourse

12.5 Monitoring a cache

12.5.1 Monitoring host-level metrics

12.5.2 Is my memory sufficient?

12.5.3 Is my Redis replication up-to-date?

12.6 Tweaking cache performance

12.6.1 Selecting the right cache node type

12.6.2 Selecting the right deployment option

12.6.3 Compressing your data

Chapter 13: Programming for the NoSQL database service: DynamoDB

13.1 Operating DynamoDB

13.1.1 Administration

13.1.2 Pricing

13.1.3 Networking

13.1.4 RDS comparison

13.1.5 NoSQL comparison

13.2 DynamoDB for developers

13.2.1 Tables, items, and attributes

13.2.2 Primary key

13.2.3 DynamoDB Local

13.3 Programming a to-do application

13.4 Creating tables

13.4.1 Users are identified by a partition key

13.4.2 Tasks are identified by a partition key and sort key

13.5 Adding data

13.5.1 Adding a user

13.5.2 Adding a task

13.6 Retrieving data

13.6.1 Getting an item by key

13.6.2 Querying items by key and filter

13.6.3 Using global secondary indexes for more flexible queries

13.6.4 Scanning and filtering all of your table’s data

13.6.5 Eventually consistent data retrieval

13.7 Removing data

13.8 Modifying data

13.9 Scaling capacity

13.9.1 Capacity units

13.9.2 Auto-scaling

Part 4: Architecting on AWS

Chapter 14: Achieving high availability: availability zones, auto-scaling, and CloudWatch

14.1 Recovering from EC2 instance failure with CloudWatch

14.1.1 Creating a CloudWatch alarm to trigger recovery when status checks fail

14.1.2 Monitoring and recovering a virtual machine based on a CloudWatch alarm

14.2 Recovering from a data center outage

14.2.1 Availability zones: groups of isolated data centers

14.2.2 Using auto-scaling to ensure that an EC2 instance is always running

14.2.3 Recovering a failed virtual machine to another availability zone with the help of auto-scaling

14.2.4 Pitfall: recovering network-attached storage

14.2.5 Pitfall: network interface recovery

14.3 Analyzing disaster-recovery requirements

14.3.1 RTO and RPO comparison for a single EC2 instance

Chapter 15: Decoupling your infrastructure: Elastic Load Balancing and Simple Queue Service

15.1 Synchronous decoupling with load balancers

15.1.1 Setting up a load balancer with virtual machines

15.2 Asynchronous decoupling with message queues

15.2.1 Turning a synchronous process into an asynchronous one

15.2.2 Architecture of the URL2PNG application

15.2.3 Setting up a message queue

15.2.4 Producing messages programmatically

15.2.5 Consuming messages programmatically

15.2.6 Limitations of messaging with SQS

Chapter 16: Designing for fault tolerance

16.1 Using redundant EC2 instances to increase availability

16.1.1 Redundancy can remove a single point of failure

16.1.2 Redundancy requires decoupling

16.2 Considerations for making your code fault-tolerant

16.2.1 Let it crash, but also retry

16.2.2 Idempotent retry makes fault tolerance possible

16.3 Building a fault-tolerant web application: Imagery

16.3.1 The idempotent state machine

16.3.2 Implementing a fault-tolerant web service

16.3.3 Implementing a fault-tolerant worker to consume SQS messages

16.3.4 Deploying the application

Chapter 17: Scaling up and down: auto-scaling and CloudWatch

17.1 Managing a dynamic EC2 instance pool

17.2 Using metrics or schedules to trigger scaling

17.2.1 Scaling based on a schedule

17.2.2 Scaling based on CloudWatch metrics

17.3 Decouple your dynamic EC2 instance pool

17.3.1 Scaling a dynamic EC2 instance pool synchronously decoupled by a load balancer

17.3.2 Scaling a dynamic EC2 instances pool asynchronously decoupled by a queue

What's inside

  • Completely revised bestseller
  • Secure and scale distributed applications
  • Deploy applications on AWS
  • Design for failure to achieve high availability
  • Automate your infrastructure

About the reader

Written for mid-level developers and DevOps engineers.

About the authors

Andreas Wittig and Michael Wittig are software engineers and DevOps consultants focused on AWS. Together, they migrated the first bank in Germany to AWS in 2013.

placing your order...

Don't refresh or navigate away from the page.
print book $32.99 $54.99 pBook + eBook + liveBook
includes previous edition eBook
Additional shipping charges may apply
Amazon Web Services in Action, Second Edition (print book) added to cart
continue shopping
go to cart

eBook $35.19 $43.99 3 formats + liveBook
includes previous edition eBook
Amazon Web Services in Action, Second Edition (eBook) added to cart
continue shopping
go to cart

Prices displayed in rupees will be charged in USD when you check out.
customers also reading

This book 1-hop 2-hops 3-hops

FREE domestic shipping on three or more pBooks