<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Amazon Web Services on Software Engineering Learning Paths</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/</link><description>Recent content in Amazon Web Services on Software Engineering Learning Paths</description><generator>Hugo</generator><language>en</language><atom:link href="https://kyngo.github.io/learning-paths/paths/amazon-web-services/index.xml" rel="self" type="application/rss+xml"/><item><title>AWS Global Infrastructure</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/01-global-infrastructure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/01-global-infrastructure/</guid><description>&lt;h2 id="the-physical-layer"&gt;The Physical Layer&lt;a class="anchor" href="#the-physical-layer"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AWS operates the world&amp;rsquo;s largest cloud infrastructure — a global network of data centers organized into a hierarchy designed for high availability, low latency, and data sovereignty.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Global[&amp;#34;AWS Global Infrastructure&amp;#34;]
 Global --&amp;gt; Regions[&amp;#34;33 Regions&amp;lt;br&amp;gt;(geographic areas)&amp;#34;]
 Global --&amp;gt; Edge[&amp;#34;450+ Edge Locations&amp;lt;br&amp;gt;(CDN endpoints)&amp;#34;]
 
 Regions --&amp;gt; AZs[&amp;#34;105+ Availability Zones&amp;lt;br&amp;gt;(isolated data centers)&amp;#34;]
 Regions --&amp;gt; Local[&amp;#34;Local Zones&amp;lt;br&amp;gt;(city extensions)&amp;#34;]
 Regions --&amp;gt; Wavelength[&amp;#34;Wavelength Zones&amp;lt;br&amp;gt;(5G edge)&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="regions"&gt;Regions&lt;a class="anchor" href="#regions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A Region is a geographic area containing multiple isolated data centers. Each region is completely independent — a failure in one region doesn&amp;rsquo;t affect others.&lt;/p&gt;</description></item><item><title>IAM (Identity and Access Management)</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/02-iam/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/02-iam/</guid><description>&lt;h2 id="what-is-iam"&gt;What is IAM?&lt;a class="anchor" href="#what-is-iam"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;IAM controls who (authentication) can do what (authorization) on which AWS resources. It&amp;rsquo;s the security foundation of every AWS account — misconfigure IAM and nothing else matters.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 Who[&amp;#34;WHO?&amp;lt;br&amp;gt;(Principal)&amp;#34;] --&amp;gt; Auth[&amp;#34;Authenticated?&amp;#34;]
 Auth --&amp;gt; What[&amp;#34;WHAT?&amp;lt;br&amp;gt;(Action)&amp;#34;]
 What --&amp;gt; Which[&amp;#34;ON WHICH?&amp;lt;br&amp;gt;(Resource)&amp;#34;]
 Which --&amp;gt; Conditions[&amp;#34;UNDER WHAT CONDITIONS?&amp;lt;br&amp;gt;(Conditions)&amp;#34;]
 Conditions --&amp;gt; Decision{&amp;#34;ALLOW or DENY?&amp;#34;}&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="iam-entities"&gt;IAM Entities&lt;a class="anchor" href="#iam-entities"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="users"&gt;Users&lt;a class="anchor" href="#users"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An IAM user represents a person or application that interacts with AWS:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;UserName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;Arn&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;arn:aws:iam::123456789012:user/alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;CreateDate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2024-01-15T10:00:00Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Best practice:&lt;/strong&gt; Minimize IAM users. Use IAM Identity Center (SSO) for humans and IAM roles for applications.&lt;/p&gt;</description></item><item><title>Compute</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/03-compute/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/03-compute/</guid><description>&lt;h2 id="compute-options-overview"&gt;Compute Options Overview&lt;a class="anchor" href="#compute-options-overview"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AWS offers compute at every abstraction level — from bare metal to fully managed serverless:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 subgraph Control[&amp;#34;More Control&amp;#34;]
 BM[&amp;#34;Bare Metal&amp;lt;br&amp;gt;(EC2 .metal)&amp;#34;]
 EC2[&amp;#34;EC2 Instances&amp;lt;br&amp;gt;(Virtual Machines)&amp;#34;]
 end
 
 subgraph Managed[&amp;#34;Managed&amp;#34;]
 ECS[&amp;#34;ECS / EKS&amp;lt;br&amp;gt;(Containers)&amp;#34;]
 Batch[&amp;#34;AWS Batch&amp;lt;br&amp;gt;(Job scheduling)&amp;#34;]
 end
 
 subgraph Serverless[&amp;#34;Serverless&amp;#34;]
 Lambda[&amp;#34;Lambda&amp;lt;br&amp;gt;(Functions)&amp;#34;]
 Fargate[&amp;#34;Fargate&amp;lt;br&amp;gt;(Serverless containers)&amp;#34;]
 end
 
 Control -.-&amp;gt;|&amp;#34;Less ops overhead →&amp;#34;| Managed
 Managed -.-&amp;gt;|&amp;#34;Less ops overhead →&amp;#34;| Serverless&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="ec2-elastic-compute-cloud"&gt;EC2 (Elastic Compute Cloud)&lt;a class="anchor" href="#ec2-elastic-compute-cloud"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Virtual machines in the cloud. You choose the OS, instance type, storage, and networking.&lt;/p&gt;</description></item><item><title>Storage</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/04-storage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/04-storage/</guid><description>&lt;h2 id="storage-types"&gt;Storage Types&lt;a class="anchor" href="#storage-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AWS offers storage at different layers — block, file, and object — each optimized for different access patterns:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Storage[&amp;#34;AWS Storage&amp;#34;]
 Storage --&amp;gt; Block[&amp;#34;Block Storage&amp;lt;br&amp;gt;(EBS, Instance Store)&amp;#34;]
 Storage --&amp;gt; Object[&amp;#34;Object Storage&amp;lt;br&amp;gt;(S3, S3 Glacier)&amp;#34;]
 Storage --&amp;gt; File[&amp;#34;File Storage&amp;lt;br&amp;gt;(EFS, FSx)&amp;#34;]
 
 Block --&amp;gt; |&amp;#34;Attached to EC2&amp;#34;| Disk[&amp;#34;Like a hard drive&amp;#34;]
 Object --&amp;gt; |&amp;#34;HTTP API&amp;#34;| Bucket[&amp;#34;Like a file server with infinite capacity&amp;#34;]
 File --&amp;gt; |&amp;#34;NFS/SMB&amp;#34;| Share[&amp;#34;Like a network share&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="s3-simple-storage-service"&gt;S3 (Simple Storage Service)&lt;a class="anchor" href="#s3-simple-storage-service"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Object storage with virtually unlimited capacity. The most-used AWS service.&lt;/p&gt;</description></item><item><title>Databases</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/05-databases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/05-databases/</guid><description>&lt;h2 id="database-options"&gt;Database Options&lt;a class="anchor" href="#database-options"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AWS offers purpose-built databases for different data models and access patterns:&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 DB[&amp;#34;AWS Databases&amp;#34;]
 DB --&amp;gt; Relational[&amp;#34;Relational (SQL)&amp;#34;]
 DB --&amp;gt; KV[&amp;#34;Key-Value&amp;#34;]
 DB --&amp;gt; Document[&amp;#34;Document&amp;#34;]
 DB --&amp;gt; Cache[&amp;#34;In-Memory Cache&amp;#34;]
 DB --&amp;gt; Graph[&amp;#34;Graph&amp;#34;]
 DB --&amp;gt; TimeSeries[&amp;#34;Time Series&amp;#34;]
 
 Relational --&amp;gt; RDS[&amp;#34;RDS / Aurora&amp;#34;]
 KV --&amp;gt; DDB[&amp;#34;DynamoDB&amp;#34;]
 Document --&amp;gt; DocDB[&amp;#34;DocumentDB&amp;#34;]
 Cache --&amp;gt; EC[&amp;#34;ElastiCache&amp;#34;]
 Graph --&amp;gt; Neptune[&amp;#34;Neptune&amp;#34;]
 TimeSeries --&amp;gt; TS[&amp;#34;Timestream&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="rds-relational-database-service"&gt;RDS (Relational Database Service)&lt;a class="anchor" href="#rds-relational-database-service"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Managed relational databases — AWS handles patching, backups, failover, and replication.&lt;/p&gt;</description></item><item><title>Networking: VPC</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/06-networking-vpc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/06-networking-vpc/</guid><description>&lt;h2 id="what-is-a-vpc"&gt;What is a VPC?&lt;a class="anchor" href="#what-is-a-vpc"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A Virtual Private Cloud (VPC) is your isolated network within AWS. It&amp;rsquo;s a logically isolated section of the AWS cloud where you launch resources in a virtual network that you define.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 subgraph VPC[&amp;#34;VPC: 10.0.0.0/16&amp;#34;]
 subgraph AZ1[&amp;#34;AZ 1a&amp;#34;]
 PubSub1[&amp;#34;Public Subnet&amp;lt;br&amp;gt;10.0.1.0/24&amp;#34;]
 PrivSub1[&amp;#34;Private Subnet&amp;lt;br&amp;gt;10.0.10.0/24&amp;#34;]
 end
 subgraph AZ2[&amp;#34;AZ 1b&amp;#34;]
 PubSub2[&amp;#34;Public Subnet&amp;lt;br&amp;gt;10.0.2.0/24&amp;#34;]
 PrivSub2[&amp;#34;Private Subnet&amp;lt;br&amp;gt;10.0.20.0/24&amp;#34;]
 end
 
 IGW[&amp;#34;Internet Gateway&amp;#34;]
 NAT[&amp;#34;NAT Gateway&amp;#34;]
 end
 
 Internet[&amp;#34;Internet&amp;#34;] --&amp;gt; IGW
 IGW --&amp;gt; PubSub1
 IGW --&amp;gt; PubSub2
 PubSub1 --&amp;gt; NAT
 NAT --&amp;gt; PrivSub1
 NAT --&amp;gt; PrivSub2&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="vpc-components"&gt;VPC Components&lt;a class="anchor" href="#vpc-components"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="cidr-blocks"&gt;CIDR Blocks&lt;a class="anchor" href="#cidr-blocks"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;CIDR (Classless Inter-Domain Routing) defines the IP address range for your VPC:&lt;/p&gt;</description></item><item><title>Load Balancing</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/07-load-balancing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/07-load-balancing/</guid><description>&lt;h2 id="why-load-balancers"&gt;Why Load Balancers?&lt;a class="anchor" href="#why-load-balancers"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Load balancers distribute incoming traffic across multiple targets, providing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;High availability&lt;/strong&gt; — if one target fails, traffic routes to healthy ones&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalability&lt;/strong&gt; — add/remove targets without changing client configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSL termination&lt;/strong&gt; — handle encryption at the LB, not each server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Health checks&lt;/strong&gt; — automatically detect and remove unhealthy targets&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Users[&amp;#34;Users&amp;#34;] --&amp;gt; LB[&amp;#34;Load Balancer&amp;#34;]
 LB --&amp;gt; T1[&amp;#34;Target 1 ✅&amp;#34;]
 LB --&amp;gt; T2[&amp;#34;Target 2 ✅&amp;#34;]
 LB --&amp;gt; T3[&amp;#34;Target 3 ❌ unhealthy&amp;#34;]
 
 LB -.-&amp;gt;|&amp;#34;Health check fails&amp;#34;| T3&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="elb-types"&gt;ELB Types&lt;a class="anchor" href="#elb-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Layer&lt;/th&gt;
					&lt;th&gt;Protocol&lt;/th&gt;
					&lt;th&gt;Use Case&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;ALB&lt;/strong&gt; (Application)&lt;/td&gt;
					&lt;td&gt;7 (HTTP)&lt;/td&gt;
					&lt;td&gt;HTTP, HTTPS, gRPC&lt;/td&gt;
					&lt;td&gt;Web apps, microservices, APIs&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;NLB&lt;/strong&gt; (Network)&lt;/td&gt;
					&lt;td&gt;4 (TCP)&lt;/td&gt;
					&lt;td&gt;TCP, UDP, TLS&lt;/td&gt;
					&lt;td&gt;Ultra-low latency, gaming, IoT&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;GLB&lt;/strong&gt; (Gateway)&lt;/td&gt;
					&lt;td&gt;3 (IP)&lt;/td&gt;
					&lt;td&gt;IP&lt;/td&gt;
					&lt;td&gt;Third-party appliances (firewalls)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="application-load-balancer-alb"&gt;Application Load Balancer (ALB)&lt;a class="anchor" href="#application-load-balancer-alb"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most common choice for web applications:&lt;/p&gt;</description></item><item><title>DNS: Route 53</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/08-dns-route53/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/08-dns-route53/</guid><description>&lt;h2 id="what-is-route-53"&gt;What is Route 53?&lt;a class="anchor" href="#what-is-route-53"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Route 53 is AWS&amp;rsquo;s managed DNS service. It translates domain names (like &lt;code&gt;api.example.com&lt;/code&gt;) into IP addresses, and provides health checking and traffic routing.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 User[&amp;#34;User types&amp;lt;br&amp;gt;api.example.com&amp;#34;] --&amp;gt; Resolver[&amp;#34;DNS Resolver&amp;#34;]
 Resolver --&amp;gt; R53[&amp;#34;Route 53&amp;#34;]
 R53 --&amp;gt; IP[&amp;#34;Returns: 52.28.100.50&amp;#34;]
 User --&amp;gt;|&amp;#34;Connects to IP&amp;#34;| ALB[&amp;#34;ALB at 52.28.100.50&amp;#34;]&lt;/pre&gt;&lt;p&gt;The name &amp;ldquo;Route 53&amp;rdquo; comes from TCP/UDP port 53, the standard DNS port.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="core-concepts"&gt;Core Concepts&lt;a class="anchor" href="#core-concepts"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="hosted-zones"&gt;Hosted Zones&lt;a class="anchor" href="#hosted-zones"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A hosted zone is a container for DNS records for a domain:&lt;/p&gt;</description></item><item><title>Messaging</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/09-messaging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/09-messaging/</guid><description>&lt;h2 id="why-messaging"&gt;Why Messaging?&lt;a class="anchor" href="#why-messaging"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Direct synchronous communication between services creates tight coupling — if service B is down, service A fails too. Messaging decouples services by introducing a buffer between them.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 subgraph Synchronous[&amp;#34;Synchronous (coupled)&amp;#34;]
 A1[&amp;#34;Service A&amp;#34;] --&amp;gt;|&amp;#34;HTTP call&amp;#34;| B1[&amp;#34;Service B&amp;#34;]
 B1 --&amp;gt;|&amp;#34;If down → A fails&amp;#34;| A1
 end
 
 subgraph Asynchronous[&amp;#34;Asynchronous (decoupled)&amp;#34;]
 A2[&amp;#34;Service A&amp;#34;] --&amp;gt;|&amp;#34;Send message&amp;#34;| Q[&amp;#34;Queue/Topic&amp;#34;]
 Q --&amp;gt;|&amp;#34;Consume when ready&amp;#34;| B2[&amp;#34;Service B&amp;#34;]
 end&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="sqs-simple-queue-service"&gt;SQS (Simple Queue Service)&lt;a class="anchor" href="#sqs-simple-queue-service"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fully managed message queue — producers send messages, consumers poll and process them.&lt;/p&gt;</description></item><item><title>Monitoring</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/10-monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/10-monitoring/</guid><description>&lt;h2 id="the-three-pillars-of-observability"&gt;The Three Pillars of Observability&lt;a class="anchor" href="#the-three-pillars-of-observability"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Obs[&amp;#34;Observability&amp;#34;]
 Obs --&amp;gt; Metrics[&amp;#34;Metrics&amp;lt;br&amp;gt;(CloudWatch Metrics)&amp;#34;]
 Obs --&amp;gt; Logs[&amp;#34;Logs&amp;lt;br&amp;gt;(CloudWatch Logs)&amp;#34;]
 Obs --&amp;gt; Traces[&amp;#34;Traces&amp;lt;br&amp;gt;(X-Ray / Datadog APM)&amp;#34;]
 
 Metrics --&amp;gt; |&amp;#34;What is happening?&amp;#34;| Dashboard[&amp;#34;Dashboards &amp;amp; Alarms&amp;#34;]
 Logs --&amp;gt; |&amp;#34;Why is it happening?&amp;#34;| Search[&amp;#34;Log Insights&amp;#34;]
 Traces --&amp;gt; |&amp;#34;Where is it slow?&amp;#34;| Map[&amp;#34;Service Map&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="cloudwatch-metrics"&gt;CloudWatch Metrics&lt;a class="anchor" href="#cloudwatch-metrics"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Metrics are time-series data points that measure resource behavior.&lt;/p&gt;
&lt;h3 id="built-in-metrics-free"&gt;Built-in Metrics (Free)&lt;a class="anchor" href="#built-in-metrics-free"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Service&lt;/th&gt;
					&lt;th&gt;Metrics&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;EC2&lt;/td&gt;
					&lt;td&gt;CPUUtilization, NetworkIn/Out, DiskRead/Write&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ALB&lt;/td&gt;
					&lt;td&gt;RequestCount, TargetResponseTime, HTTPCode_5XX&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;RDS&lt;/td&gt;
					&lt;td&gt;CPUUtilization, FreeableMemory, ReadIOPS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Lambda&lt;/td&gt;
					&lt;td&gt;Invocations, Duration, Errors, Throttles&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SQS&lt;/td&gt;
					&lt;td&gt;ApproximateNumberOfMessages, ApproximateAgeOfOldestMessage&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="custom-metrics"&gt;Custom Metrics&lt;a class="anchor" href="#custom-metrics"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Publish application-specific metrics:&lt;/p&gt;</description></item><item><title>Containers: ECS, ECR, EKS</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/11-containers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/11-containers/</guid><description>&lt;h2 id="why-containers-on-aws"&gt;Why Containers on AWS?&lt;a class="anchor" href="#why-containers-on-aws"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Containers package your application with all its dependencies into a portable unit. AWS provides managed services to run containers without managing the underlying infrastructure.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 Code[&amp;#34;Application Code&amp;#34;] --&amp;gt; Docker[&amp;#34;Docker Image&amp;#34;]
 Docker --&amp;gt; ECR[&amp;#34;ECR&amp;lt;br&amp;gt;(Store Image)&amp;#34;]
 ECR --&amp;gt; Orchestrator{&amp;#34;Orchestrator&amp;#34;}
 Orchestrator --&amp;gt; ECS[&amp;#34;ECS&amp;lt;br&amp;gt;(AWS-native)&amp;#34;]
 Orchestrator --&amp;gt; EKS[&amp;#34;EKS&amp;lt;br&amp;gt;(Kubernetes)&amp;#34;]
 
 ECS --&amp;gt; Fargate[&amp;#34;Fargate&amp;lt;br&amp;gt;(Serverless)&amp;#34;]
 ECS --&amp;gt; EC2[&amp;#34;EC2&amp;lt;br&amp;gt;(Self-managed)&amp;#34;]
 EKS --&amp;gt; FargateK[&amp;#34;Fargate&amp;#34;]
 EKS --&amp;gt; EC2K[&amp;#34;EC2 Nodes&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="ecr-elastic-container-registry"&gt;ECR (Elastic Container Registry)&lt;a class="anchor" href="#ecr-elastic-container-registry"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Managed Docker registry — store, manage, and deploy container images.&lt;/p&gt;</description></item><item><title>Serverless Patterns</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/12-serverless-patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/12-serverless-patterns/</guid><description>&lt;h2 id="what-is-serverless"&gt;What is Serverless?&lt;a class="anchor" href="#what-is-serverless"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Serverless doesn&amp;rsquo;t mean &amp;ldquo;no servers&amp;rdquo; — it means you don&amp;rsquo;t manage them. AWS handles provisioning, scaling, patching, and availability. You write code and define triggers.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 subgraph Traditional[&amp;#34;Traditional&amp;#34;]
 Provision[&amp;#34;Provision servers&amp;#34;]
 Patch[&amp;#34;Patch OS&amp;#34;]
 Scale[&amp;#34;Configure scaling&amp;#34;]
 Monitor[&amp;#34;Monitor capacity&amp;#34;]
 end
 
 subgraph Serverless[&amp;#34;Serverless&amp;#34;]
 Code[&amp;#34;Write code&amp;#34;]
 Deploy[&amp;#34;Deploy&amp;#34;]
 Done[&amp;#34;Done ✅&amp;#34;]
 end&lt;/pre&gt;&lt;h3 id="serverless-services"&gt;Serverless Services&lt;a class="anchor" href="#serverless-services"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Service&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Lambda&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Compute (functions)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;API Gateway&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;HTTP APIs&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;DynamoDB&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Database&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;S3&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Storage&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;SQS/SNS&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Messaging&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;EventBridge&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Event routing&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Step Functions&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Workflow orchestration&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Fargate&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Containers (serverless)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="common-serverless-patterns"&gt;Common Serverless Patterns&lt;a class="anchor" href="#common-serverless-patterns"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="api-backend"&gt;API Backend&lt;a class="anchor" href="#api-backend"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre class="mermaid"&gt;flowchart LR
 Client[&amp;#34;Client&amp;#34;] --&amp;gt; APIGW[&amp;#34;API Gateway&amp;#34;]
 APIGW --&amp;gt; Lambda[&amp;#34;Lambda&amp;#34;]
 Lambda --&amp;gt; DDB[&amp;#34;DynamoDB&amp;#34;]
 Lambda --&amp;gt; S3[&amp;#34;S3&amp;#34;]&lt;/pre&gt;&lt;p&gt;API Gateway handles: routing, authentication, rate limiting, request validation, CORS.
Lambda handles: business logic.
DynamoDB handles: data persistence.&lt;/p&gt;</description></item><item><title>Well-Architected Framework</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/13-well-architected/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/13-well-architected/</guid><description>&lt;h2 id="what-is-the-well-architected-framework"&gt;What is the Well-Architected Framework?&lt;a class="anchor" href="#what-is-the-well-architected-framework"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AWS&amp;rsquo;s Well-Architected Framework is a set of best practices for designing and operating reliable, secure, efficient, cost-effective, and sustainable systems in the cloud. It provides a consistent approach to evaluating architectures.&lt;/p&gt;
&lt;pre class="mermaid"&gt;flowchart TD
 WAF[&amp;#34;Well-Architected Framework&amp;#34;]
 WAF --&amp;gt; OE[&amp;#34;Operational Excellence&amp;#34;]
 WAF --&amp;gt; Sec[&amp;#34;Security&amp;#34;]
 WAF --&amp;gt; Rel[&amp;#34;Reliability&amp;#34;]
 WAF --&amp;gt; PE[&amp;#34;Performance Efficiency&amp;#34;]
 WAF --&amp;gt; CO[&amp;#34;Cost Optimization&amp;#34;]
 WAF --&amp;gt; Sus[&amp;#34;Sustainability&amp;#34;]&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="pillar-1-operational-excellence"&gt;Pillar 1: Operational Excellence&lt;a class="anchor" href="#pillar-1-operational-excellence"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Focus:&lt;/strong&gt; Run and monitor systems to deliver business value, and continually improve processes.&lt;/p&gt;</description></item><item><title>Security Services</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/14-security-services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/14-security-services/</guid><description>&lt;h1 id="security-services"&gt;Security Services&lt;a class="anchor" href="#security-services"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;AWS provides a deep security services portfolio — from encryption key management to threat detection. This section covers the services you need to protect production workloads.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="aws-kms-key-management-service"&gt;AWS KMS (Key Management Service)&lt;a class="anchor" href="#aws-kms-key-management-service"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Centrally managed encryption keys for data at rest and in transit.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Concept&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CMK (Customer Master Key)&lt;/td&gt;
					&lt;td&gt;The root key — never leaves KMS hardware&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Data key&lt;/td&gt;
					&lt;td&gt;Generated by KMS, used to encrypt your data (envelope encryption)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Key policy&lt;/td&gt;
					&lt;td&gt;IAM-like policy attached to the key (who can use/manage it)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Key rotation&lt;/td&gt;
					&lt;td&gt;Automatic annual rotation (AWS-managed keys) or manual&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Key alias&lt;/td&gt;
					&lt;td&gt;Human-readable name (&lt;code&gt;alias/my-app-key&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="envelope-encryption-pattern"&gt;Envelope Encryption Pattern&lt;a class="anchor" href="#envelope-encryption-pattern"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;1. App calls KMS → GenerateDataKey → plaintext data key + encrypted data key
2. App encrypts data with plaintext data key
3. App stores encrypted data + encrypted data key together
4. App discards plaintext data key from memory
5. To decrypt: send encrypted data key to KMS → get plaintext data key → decrypt data&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="services-that-integrate-with-kms"&gt;Services That Integrate with KMS&lt;a class="anchor" href="#services-that-integrate-with-kms"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;S3 (SSE-KMS), EBS, RDS, DynamoDB, Secrets Manager, SQS, SNS, CloudWatch Logs, ECS, Lambda environment variables.&lt;/p&gt;</description></item><item><title>Cost Management</title><link>https://kyngo.github.io/learning-paths/paths/amazon-web-services/15-cost-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://kyngo.github.io/learning-paths/paths/amazon-web-services/15-cost-management/</guid><description>&lt;h1 id="cost-management"&gt;Cost Management&lt;a class="anchor" href="#cost-management"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;AWS bills can grow faster than your infrastructure if unmanaged. Cost optimisation is a continuous practice — not a one-time cleanup. This section covers the tools, patterns, and organisational practices for keeping AWS spend under control.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="understanding-your-bill"&gt;Understanding Your Bill&lt;a class="anchor" href="#understanding-your-bill"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="aws-cost-structure"&gt;AWS Cost Structure&lt;a class="anchor" href="#aws-cost-structure"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Dimension&lt;/th&gt;
					&lt;th&gt;What You Pay For&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Compute&lt;/td&gt;
					&lt;td&gt;EC2 hours, Lambda invocations, Fargate vCPU/memory-hours&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Storage&lt;/td&gt;
					&lt;td&gt;S3 GB-months, EBS GB-months, snapshots&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Data transfer&lt;/td&gt;
					&lt;td&gt;Outbound to internet, cross-AZ, cross-region&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Requests&lt;/td&gt;
					&lt;td&gt;S3 GET/PUT, API Gateway calls, SQS messages&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Provisioned capacity&lt;/td&gt;
					&lt;td&gt;RDS instances (running 24/7), NAT Gateways, Elasticsearch&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="common-cost-surprises"&gt;Common Cost Surprises&lt;a class="anchor" href="#common-cost-surprises"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Surprise&lt;/th&gt;
					&lt;th&gt;Cause&lt;/th&gt;
					&lt;th&gt;Fix&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;NAT Gateway data fees&lt;/td&gt;
					&lt;td&gt;All private subnet outbound traffic goes through NAT&lt;/td&gt;
					&lt;td&gt;Use VPC endpoints for AWS services, minimise cross-AZ&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Idle RDS instances&lt;/td&gt;
					&lt;td&gt;Dev/staging databases running 24/7&lt;/td&gt;
					&lt;td&gt;Stop/start on schedule, or use Aurora Serverless v2&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Unattached EBS volumes&lt;/td&gt;
					&lt;td&gt;Volumes from terminated EC2 instances&lt;/td&gt;
					&lt;td&gt;Automated cleanup&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Old snapshots&lt;/td&gt;
					&lt;td&gt;Years of daily EBS/RDS snapshots&lt;/td&gt;
					&lt;td&gt;Lifecycle policies&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cross-AZ data transfer&lt;/td&gt;
					&lt;td&gt;$0.01/GB between AZs adds up&lt;/td&gt;
					&lt;td&gt;Keep chatty services in the same AZ&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CloudWatch Logs&lt;/td&gt;
					&lt;td&gt;High log volume without retention&lt;/td&gt;
					&lt;td&gt;Set retention policies (7/14/30 days)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="aws-cost-tools"&gt;AWS Cost Tools&lt;a class="anchor" href="#aws-cost-tools"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="cost-explorer"&gt;Cost Explorer&lt;a class="anchor" href="#cost-explorer"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Visualise and analyse spend over time:&lt;/p&gt;</description></item></channel></rss>