Introduction |
|
xxix | |
Assessment Test |
|
xxxv | |
Chapter 1 Introduction to AWS Cloud API |
|
1 | (36) |
|
|
2 | (3) |
|
Getting Started with an AWS Account |
|
|
2 | (1) |
|
|
3 | (1) |
|
AWS Software Development Kits |
|
|
4 | (1) |
|
|
4 | (1) |
|
Calling an AWS Cloud Service |
|
|
5 | (4) |
|
|
5 | (2) |
|
|
7 | (2) |
|
|
9 | (5) |
|
Regions Are Highly Available |
|
|
10 | (1) |
|
Working with Regional API Endpoints |
|
|
10 | (4) |
|
API Credentials and AWS Identity and Access Management |
|
|
14 | (10) |
|
|
15 | (1) |
|
|
16 | (1) |
|
|
17 | (2) |
|
|
19 | (1) |
|
Managing Authorization with Policies |
|
|
20 | (2) |
|
|
22 | (2) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
25 | (1) |
|
|
26 | (7) |
|
|
33 | (4) |
Chapter 2 Introduction to Compute and Networking |
|
37 | (48) |
|
Amazon Elastic Compute Cloud |
|
|
38 | (6) |
|
|
39 | (1) |
|
|
40 | (1) |
|
|
41 | (1) |
|
|
42 | (1) |
|
|
43 | (1) |
|
|
43 | (1) |
|
Running Applications on Instances |
|
|
44 | (7) |
|
Connecting to Amazon EC2 Instances |
|
|
45 | (1) |
|
Customizing Software with User Data |
|
|
46 | (1) |
|
Discovering Instance Metadata |
|
|
47 | (1) |
|
Assigning AWS API Credentials |
|
|
48 | (1) |
|
|
49 | (1) |
|
|
50 | (1) |
|
|
51 | (13) |
|
Amazon Virtual Private Cloud |
|
|
51 | (1) |
|
Connecting to Other Networks |
|
|
51 | (1) |
|
|
52 | (2) |
|
|
54 | (1) |
|
|
55 | (1) |
|
|
56 | (2) |
|
Network Access Control Lists |
|
|
58 | (3) |
|
Network Address Translation |
|
|
61 | (2) |
|
|
63 | (1) |
|
Monitoring Amazon VPC Network Traffic |
|
|
64 | (1) |
|
|
64 | (2) |
|
Shared Responsibility Security Model |
|
|
64 | (1) |
|
Comparing Managed and Unmanaged Services |
|
|
65 | (1) |
|
|
66 | (1) |
|
|
66 | (1) |
|
|
67 | (1) |
|
|
68 | (1) |
|
|
69 | (11) |
|
|
80 | (5) |
Chapter 3 Hello, Storage |
|
85 | (90) |
|
Introduction to AWS Storage |
|
|
86 | (1) |
|
|
87 | (5) |
|
|
87 | (3) |
|
One Tool Does Not Fit All |
|
|
90 | (1) |
|
Block, Object, and File Storage |
|
|
90 | (1) |
|
AWS Shared Responsibility Model and Storage |
|
|
91 | (1) |
|
Confidentiality, Integrity, Availability Model |
|
|
91 | (1) |
|
AWS Block Storage Services |
|
|
92 | (7) |
|
Amazon Elastic Block Store |
|
|
93 | (4) |
|
|
97 | (2) |
|
AWS Object Storage Services |
|
|
99 | (43) |
|
Amazon Simple Storage Service |
|
|
99 | (35) |
|
Object Lifecycle Management |
|
|
134 | (2) |
|
AWS File Storage Services |
|
|
136 | (1) |
|
Amazon Elastic File System |
|
|
136 | (6) |
|
|
142 | (3) |
|
|
142 | (1) |
|
Storage Temperature Comparison |
|
|
143 | (1) |
|
Comparison of Amazon EBS and Instance Store |
|
|
143 | (1) |
|
Comparison of Amazon S3, Amazon EBS, and Amazon EFS |
|
|
144 | (1) |
|
|
145 | (9) |
|
|
145 | (1) |
|
|
146 | (1) |
|
|
147 | (1) |
|
|
148 | (2) |
|
|
150 | (1) |
|
Amazon Kinesis Data Firehose |
|
|
151 | (1) |
|
|
152 | (1) |
|
|
153 | (1) |
|
|
154 | (1) |
|
|
154 | (5) |
|
|
159 | (3) |
|
|
162 | (8) |
|
|
170 | (5) |
Chapter 4 Hello, Databases |
|
175 | (84) |
|
Introduction to Databases |
|
|
176 | (2) |
|
|
178 | (17) |
|
Characteristics of Relational Databases |
|
|
179 | (1) |
|
Managed vs. Unmanaged Databases |
|
|
180 | (15) |
|
|
195 | (22) |
|
|
195 | (1) |
|
|
196 | (21) |
|
|
217 | (9) |
|
Data Warehouse Architecture |
|
|
217 | (3) |
|
|
220 | (6) |
|
|
226 | (4) |
|
|
226 | (2) |
|
In-Memory Key-Value Store |
|
|
228 | (1) |
|
|
229 | (1) |
|
Amazon DynamoDB Accelerator |
|
|
230 | (1) |
|
|
230 | (2) |
|
|
231 | (1) |
|
|
232 | (3) |
|
AWS Database Migration Service |
|
|
233 | (1) |
|
AWS Schema Conversion Tool |
|
|
234 | (1) |
|
Running Your Own Database on Amazon Elastic Compute Cloud |
|
|
235 | (1) |
|
|
236 | (1) |
|
AWS Identity and Access Management |
|
|
236 | (1) |
|
|
237 | (1) |
|
|
237 | (2) |
|
|
239 | (3) |
|
|
242 | (14) |
|
|
256 | (3) |
Chapter 5 Encryption on AWS |
|
259 | (22) |
|
Introduction to Encryption |
|
|
260 | (1) |
|
AWS Key Management Service |
|
|
260 | (2) |
|
Centralized Key Management |
|
|
261 | (1) |
|
Integration with Other AWS Services |
|
|
261 | (1) |
|
Auditing Capabilities and High Availability |
|
|
262 | (1) |
|
|
262 | (1) |
|
|
262 | (1) |
|
|
262 | (1) |
|
Controlling the Access Keys |
|
|
263 | (10) |
|
Option 1: You Control the Encryption Method and the Entire KMI |
|
|
264 | (4) |
|
Option 2: You Control the Encryption Method, AWS Provides the KMI Storage Component, and You Provide the KMI Management Layer |
|
|
268 | (1) |
|
Option 3: AWS Controls the Encryption Method and the Entire KMI |
|
|
269 | (4) |
|
|
273 | (1) |
|
|
273 | (1) |
|
|
274 | (1) |
|
|
275 | (4) |
|
|
279 | (2) |
Chapter 6 Deployment Strategies |
|
281 | (36) |
|
Deployments on the AWS Cloud |
|
|
282 | (8) |
|
Phases of the Release Lifecycle |
|
|
282 | (2) |
|
|
284 | (1) |
|
Software Development Lifecycle with AWS Cloud |
|
|
284 | (1) |
|
Continuous Integration/Continuous Deployment |
|
|
285 | (2) |
|
Deploying Highly Available and Scalable Applications |
|
|
287 | (1) |
|
Deploying and Maintaining Applications |
|
|
288 | (2) |
|
|
290 | (9) |
|
Implementation Responsibilities |
|
|
291 | (1) |
|
Working with Your Source Repository |
|
|
292 | (1) |
|
|
293 | (3) |
|
AWS Elastic Beanstalk Command Line Interface |
|
|
296 | (1) |
|
Customizing Environment Configurations |
|
|
296 | (1) |
|
Integrating with Other AWS Services |
|
|
297 | (2) |
|
AWS Identity and Access Management Roles |
|
|
299 | (1) |
|
|
299 | (4) |
|
All-at-Once and In-Place Deployments |
|
|
300 | (1) |
|
|
300 | (2) |
|
|
302 | (1) |
|
Monitoring and Troubleshooting |
|
|
303 | (4) |
|
|
307 | (1) |
|
|
307 | (1) |
|
|
308 | (1) |
|
|
309 | (4) |
|
|
313 | (4) |
Chapter 7 Deployment as Code |
|
317 | (64) |
|
Introduction to AWS Code Services |
|
|
318 | (2) |
|
Continuous Delivery with AWS CodePipeline |
|
|
318 | (1) |
|
Benefits of Continuous Delivery |
|
|
319 | (1) |
|
Using AWS CodePipeline to Automate Deployments |
|
|
320 | (12) |
|
What Is AWS CodePipeline? |
|
|
320 | (1) |
|
AWS CodePipeline Concepts |
|
|
321 | (7) |
|
AWS CodePipeline Service Limits |
|
|
328 | (1) |
|
|
329 | (3) |
|
Using AWS CodeCommit as a Source Repository |
|
|
332 | (12) |
|
|
332 | (1) |
|
|
333 | (10) |
|
AWS CodeCommit Service Limits |
|
|
343 | (1) |
|
Using AWS CodeCommit with AWS CodePipeline |
|
|
344 | (1) |
|
Using AWS CodeBuild to Create Build Artifacts |
|
|
344 | (8) |
|
|
345 | (1) |
|
|
345 | (6) |
|
AWS CodeBuild Service Limits |
|
|
351 | (1) |
|
Using AWS CodeBuild with AWS CodePipeline |
|
|
352 | (1) |
|
Using AWS CodeDeploy to Deploy Applications |
|
|
352 | (19) |
|
|
353 | (1) |
|
|
353 | (17) |
|
AWS CodeDeploy Service Limits |
|
|
370 | (1) |
|
Using AWS CodeDeploy with AWS CodePipeline |
|
|
371 | (1) |
|
|
371 | (1) |
|
|
372 | (1) |
|
|
373 | (1) |
|
|
374 | (3) |
|
|
377 | (4) |
Chapter 8 Infrastructure as Code |
|
381 | (64) |
|
Introduction to Infrastructure as Code |
|
|
382 | (1) |
|
|
382 | (1) |
|
Using AWS CloudFormation to Deploy Infrastructure |
|
|
383 | (49) |
|
What Is AWS CloudFormation? |
|
|
383 | (1) |
|
AWS CloudFormation Concepts |
|
|
384 | (45) |
|
AWS CloudFormation Service Limits |
|
|
429 | (1) |
|
Using AWS CloudFormation with AWS CodePipeline |
|
|
429 | (3) |
|
|
432 | (2) |
|
|
434 | (2) |
|
|
436 | (1) |
|
|
437 | (3) |
|
|
440 | (5) |
Chapter 9 Configuration as Code |
|
445 | (50) |
|
Introduction to Configuration as Code |
|
|
446 | (1) |
|
Using AWS OpsWorks Stacks to Deploy Applications |
|
|
447 | (24) |
|
What Is AWS OpsWorks Stacks? |
|
|
447 | (1) |
|
AWS OpsWorks Stack Concepts |
|
|
448 | (21) |
|
AWS OpsWorks Stacks Service Limits |
|
|
469 | (2) |
|
Using Amazon Elastic Container Service to Deploy Containers |
|
|
471 | (12) |
|
|
472 | (1) |
|
|
472 | (10) |
|
Amazon ECS Service Limits |
|
|
482 | (1) |
|
Using Amazon ECS with AWS CodePipeline |
|
|
482 | (1) |
|
|
483 | (2) |
|
|
485 | (2) |
|
|
487 | (1) |
|
|
488 | (3) |
|
|
491 | (4) |
Chapter 10 Authentication and Authorization |
|
495 | (24) |
|
Introduction to Authentication and Authorization |
|
|
496 | (12) |
|
Different Planes of Control |
|
|
497 | (1) |
|
Identity and Authorization |
|
|
497 | (3) |
|
Microsoft Active Directory |
|
|
500 | (2) |
|
AWS Security Token Service |
|
|
502 | (3) |
|
|
505 | (3) |
|
|
508 | (1) |
|
|
509 | (1) |
|
|
509 | (1) |
|
|
510 | (7) |
|
|
517 | (2) |
Chapter 11 Refactor to Microservices |
|
519 | (66) |
|
Introduction to Refactor to Microservices |
|
|
521 | (2) |
|
Amazon Simple Queue Service |
|
|
523 | (11) |
|
|
525 | (3) |
|
|
528 | (5) |
|
Monitoring Amazon SQS Queues Using Amazon CloudWatch |
|
|
533 | (1) |
|
Amazon Simple Notification Service |
|
|
534 | (6) |
|
Features and Functionality |
|
|
536 | (1) |
|
|
536 | (1) |
|
|
537 | (1) |
|
Amazon SNS Mobile Push Notifications |
|
|
537 | (2) |
|
Billing, Limits, and Restrictions |
|
|
539 | (1) |
|
Amazon Kinesis Data Streams |
|
|
540 | (3) |
|
|
541 | (1) |
|
|
541 | (1) |
|
|
542 | (1) |
|
|
542 | (1) |
|
|
542 | (1) |
|
|
543 | (1) |
|
Amazon Kinesis Data Firehose |
|
|
543 | (1) |
|
Amazon Kinesis Data Analytics |
|
|
544 | (1) |
|
Amazon Kinesis Video Streams |
|
|
545 | (1) |
|
|
546 | (1) |
|
Amazon DynamoDB Streams Use Case |
|
|
546 | (1) |
|
Amazon DynamoDB Streams Consumers |
|
|
546 | (1) |
|
Amazon DynamoDB Streams Concurrency and Shards |
|
|
547 | (1) |
|
AWS IoT Device Management |
|
|
547 | (3) |
|
|
548 | (1) |
|
|
549 | (1) |
|
|
550 | (1) |
|
|
550 | (1) |
|
|
551 | (17) |
|
|
551 | (3) |
|
|
554 | (2) |
|
|
556 | (3) |
|
|
559 | (2) |
|
|
561 | (2) |
|
|
563 | (1) |
|
|
564 | (1) |
|
|
564 | (4) |
|
AWS Step Functions Use Case |
|
|
568 | (1) |
|
|
568 | (1) |
|
|
569 | (1) |
|
|
570 | (3) |
|
|
573 | (9) |
|
|
582 | (3) |
Chapter 12 Serverless Compute |
|
585 | (36) |
|
Introduction to Serverless Compute |
|
|
586 | (1) |
|
|
586 | (2) |
|
Where Did the Servers Go? |
|
|
587 | (1) |
|
Monolithic vs. Microservices Architecture |
|
|
588 | (1) |
|
|
588 | (5) |
|
Languages AWS Lambda Supports |
|
|
589 | (1) |
|
Creating an AWS Lambda Function |
|
|
589 | (1) |
|
Execution Methods/Invocation Models |
|
|
590 | (2) |
|
Securing AWS Lambda Functions |
|
|
592 | (1) |
|
Inside the AWS Lambda Function |
|
|
593 | (3) |
|
|
593 | (1) |
|
|
594 | (1) |
|
|
595 | (1) |
|
|
595 | (1) |
|
Configuring the AWS Lambda Function |
|
|
596 | (5) |
|
|
596 | (1) |
|
|
596 | (1) |
|
|
596 | (1) |
|
|
596 | (1) |
|
|
597 | (2) |
|
|
599 | (1) |
|
|
599 | (1) |
|
|
599 | (1) |
|
|
600 | (1) |
|
Invoking AWS Lambda Functions |
|
|
601 | (1) |
|
Monitoring AWS Lambda Functions |
|
|
602 | (3) |
|
|
602 | (1) |
|
|
603 | (2) |
|
|
605 | (1) |
|
|
605 | (1) |
|
|
606 | (1) |
|
|
607 | (11) |
|
|
618 | (3) |
Chapter 13 Serverless Applications |
|
621 | (42) |
|
Introduction to Serverless Applications |
|
|
622 | (1) |
|
Web Server with Amazon Simple Storage Service (Presentation Tier) |
|
|
622 | (5) |
|
|
623 | (1) |
|
Configuring Web Traffic Logs |
|
|
624 | (1) |
|
Creating Custom Domain Name with Amazon Route 53 |
|
|
625 | (1) |
|
Speeding Up Content Delivery with Amazon CloudFront |
|
|
626 | (1) |
|
Dynamic Data with Amazon API Gateway (Logic or App Tier) |
|
|
627 | (7) |
|
|
628 | (1) |
|
|
629 | (1) |
|
|
630 | (1) |
|
|
630 | (1) |
|
|
630 | (1) |
|
|
631 | (1) |
|
Cross-Origin Resource Sharing |
|
|
631 | (1) |
|
Integrating with AWS Lambda |
|
|
631 | (1) |
|
Monitoring Amazon API Gateway with Amazon CloudWatch |
|
|
632 | (1) |
|
|
633 | (1) |
|
User Authentication with Amazon Cognito |
|
|
634 | (6) |
|
Amazon Cognito User Pools |
|
|
634 | (2) |
|
|
636 | (1) |
|
Multi-factor Authentication |
|
|
636 | (1) |
|
Device Tracking and Remembering |
|
|
636 | (1) |
|
User Interface Customization |
|
|
637 | (2) |
|
Amazon Cognito Identity Pools |
|
|
639 | (1) |
|
|
639 | (1) |
|
Standard Three-Tier vs. the Serverless Stack |
|
|
640 | (2) |
|
|
642 | (1) |
|
AWS Serverless Application Model |
|
|
643 | (2) |
|
|
645 | (2) |
|
AWS Serverless Application Repository |
|
|
647 | (1) |
|
Serverless Application Use Cases |
|
|
647 | (1) |
|
|
647 | (2) |
|
|
649 | (1) |
|
|
650 | (1) |
|
|
651 | (9) |
|
|
660 | (3) |
Chapter 14 Stateless Application Patterns |
|
663 | (134) |
|
Introduction to the Stateless Application Pattern |
|
|
664 | (1) |
|
|
664 | (75) |
|
Using Amazon DynamoDB to Store State |
|
|
665 | (1) |
|
Primary Key, Partition Key, and Sort Key |
|
|
665 | (3) |
|
Using Write Shards to Distribute Workloads Evenly |
|
|
668 | (4) |
|
|
672 | (1) |
|
|
672 | (6) |
|
Creating Tables to Store the State |
|
|
678 | (1) |
|
|
678 | (1) |
|
|
679 | (1) |
|
|
680 | (2) |
|
Requesting Throttle and Burst Capacity |
|
|
682 | (1) |
|
Amazon DynamoDB Secondary Indexes: Global and Local |
|
|
682 | (18) |
|
|
700 | (7) |
|
Amazon DynamoDB Auto Scaling |
|
|
707 | (1) |
|
Managing Throughput Capacity Automatically with AWS Auto Scaling |
|
|
708 | (3) |
|
Partitions and Data Distribution |
|
|
711 | (2) |
|
Optimistic Locking with Version Number |
|
|
713 | (1) |
|
Disabling Optimistic Locking |
|
|
714 | (1) |
|
|
714 | (1) |
|
|
715 | (1) |
|
|
715 | (1) |
|
|
716 | (3) |
|
|
719 | (1) |
|
Error Handling in Your Application |
|
|
720 | (1) |
|
Capacity Units Consumed by Conditional Writes |
|
|
721 | (1) |
|
Configuring Item Attributes |
|
|
722 | (7) |
|
|
729 | (1) |
|
DynamoDB Encryption at Rest |
|
|
730 | (7) |
|
On-Demand Backup and Restore |
|
|
737 | (2) |
|
|
739 | (8) |
|
Considerations for Choosing a Distributed Cache |
|
|
740 | (1) |
|
|
741 | (1) |
|
|
742 | (3) |
|
|
745 | (1) |
|
|
746 | (1) |
|
|
747 | (1) |
|
Amazon Simple Storage Service |
|
|
747 | (26) |
|
|
747 | (1) |
|
|
748 | (8) |
|
|
756 | (1) |
|
Amazon S3 Storage Classes |
|
|
757 | (2) |
|
Amazon S3 Default Encryption for S3 Buckets |
|
|
759 | (2) |
|
Working with Amazon S3 Objects |
|
|
761 | (9) |
|
|
770 | (2) |
|
Storing Large Attribute Values in Amazon S3 |
|
|
772 | (1) |
|
Amazon Elastic File System |
|
|
773 | (8) |
|
|
773 | (4) |
|
|
777 | (1) |
|
Creating Resources for Amazon EFS |
|
|
777 | (1) |
|
|
777 | (1) |
|
|
778 | (1) |
|
Deleting an Amazon EFS File System |
|
|
779 | (1) |
|
Managing Access to Encrypted File Systems |
|
|
779 | (1) |
|
|
779 | (2) |
|
|
781 | (1) |
|
|
782 | (3) |
|
|
785 | (1) |
|
|
786 | (7) |
|
|
793 | (4) |
Chapter 15 Monitoring and Troubleshooting |
|
797 | (36) |
|
Introduction to Monitoring and Troubleshooting |
|
|
798 | (2) |
|
|
799 | (1) |
|
|
800 | (18) |
|
How Amazon CloudWatch Works |
|
|
801 | (1) |
|
Amazon CloudWatch Metrics |
|
|
802 | (9) |
|
|
811 | (3) |
|
|
814 | (3) |
|
Amazon CloudWatch Dashboards |
|
|
817 | (1) |
|
|
818 | (2) |
|
|
820 | (3) |
|
|
821 | (1) |
|
Tracking Application Requests |
|
|
821 | (2) |
|
|
823 | (1) |
|
|
823 | (2) |
|
|
825 | (1) |
|
|
826 | (3) |
|
|
829 | (4) |
Chapter 16 Optimization |
|
833 | (52) |
|
Introduction to Optimization |
|
|
834 | (1) |
|
Cost Optimization: Everyone's Responsibility |
|
|
834 | (4) |
|
|
835 | (1) |
|
|
836 | (2) |
|
|
838 | (2) |
|
Select the Right Use Case |
|
|
838 | (1) |
|
Select the Right Instance Family |
|
|
838 | (2) |
|
Select the Right Instance Compatibility |
|
|
840 | (1) |
|
Using Instance Reservations |
|
|
840 | (3) |
|
AWS Pricing for Reserved Instances |
|
|
840 | (1) |
|
|
841 | (1) |
|
Amazon Relational Database Service Reservations |
|
|
842 | (1) |
|
|
843 | (2) |
|
|
843 | (1) |
|
|
844 | (1) |
|
|
844 | (1) |
|
|
845 | (4) |
|
|
846 | (1) |
|
|
847 | (1) |
|
|
848 | (1) |
|
Amazon Aurora Auto Scaling |
|
|
848 | (1) |
|
Accessing AWS Auto Scaling |
|
|
848 | (1) |
|
|
849 | (1) |
|
|
849 | (1) |
|
Containers without Servers |
|
|
849 | (1) |
|
Using Serverless Approaches |
|
|
850 | (1) |
|
|
851 | (1) |
|
|
851 | (7) |
|
|
852 | (1) |
|
|
852 | (1) |
|
|
853 | (1) |
|
|
853 | (2) |
|
|
855 | (3) |
|
|
858 | (1) |
|
|
858 | (1) |
|
Relational Databases and Amazon DynamoDB |
|
|
859 | (5) |
|
|
860 | (1) |
|
Keep Related Data Together |
|
|
860 | (1) |
|
|
860 | (1) |
|
Distribute Workloads Evenly |
|
|
861 | (1) |
|
Use Sort Keys for Version Control |
|
|
862 | (1) |
|
Keep the Number of Indexes to a Minimum |
|
|
862 | (1) |
|
Choose Projections Carefully |
|
|
863 | (1) |
|
Optimize Frequent Queries to Avoid Fetches |
|
|
863 | (1) |
|
|
863 | (1) |
|
Avoid Scans as Much as Possible |
|
|
863 | (1) |
|
|
864 | (4) |
|
|
864 | (4) |
|
|
868 | (1) |
|
|
868 | (1) |
|
|
869 | (1) |
|
|
869 | (2) |
|
|
871 | (3) |
|
|
874 | (2) |
|
|
876 | (5) |
|
|
881 | (4) |
Appendix: Answers to Review Questions |
|
885 | (32) |
Index |
|
917 | |