{"id":4488,"date":"2026-02-01T21:04:01","date_gmt":"2026-02-01T15:34:01","guid":{"rendered":"https:\/\/www.itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/"},"modified":"2026-02-17T15:57:00","modified_gmt":"2026-02-17T10:27:00","slug":"mastering-amazon-aws-a-complete-guide-for-beginners","status":"publish","type":"post","link":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/","title":{"rendered":"Mastering Amazon AWS: A Complete Guide for Beginners"},"content":{"rendered":"<p>json<br \/>\n{<br \/>\n  &#8220;Version&#8221;: &#8220;2012-10-17&#8221;,<br \/>\n  &#8220;Statement&#8221;: [<br \/>\n    {<br \/>\n      &#8220;Sid&#8221;: &#8220;ExplicitDenyAllExceptVPC&#8221;,<br \/>\n      &#8220;Effect&#8221;: &#8220;Deny&#8221;,<br \/>\n      &#8220;Principal&#8221;: &#8220;<em>&#8220;,<br \/>\n      &#8220;Action&#8221;: &#8220;s3:<\/em>&#8220;,<br \/>\n      &#8220;Resource&#8221;: [<br \/>\n        &#8220;arn:aws:s3:::critical-prod-assets\/<em>&#8220;,<br \/>\n        &#8220;arn:aws:s3:::critical-prod-assets&#8221;<br \/>\n      ],<br \/>\n      &#8220;Condition&#8221;: {<br \/>\n        &#8220;StringNotEquals&#8221;: {<br \/>\n          &#8220;aws:SourceVpc&#8221;: &#8220;vpc-0a1b2c3d4e5f6g7h8&#8221;<br \/>\n        },<br \/>\n        &#8220;Bool&#8221;: {<br \/>\n          &#8220;aws:PrincipalIsAWSService&#8221;: &#8220;false&#8221;<br \/>\n        }<br \/>\n      }<br \/>\n    },<br \/>\n    {<br \/>\n      &#8220;Sid&#8221;: &#8220;AllowAppRoleAccess&#8221;,<br \/>\n      &#8220;Effect&#8221;: &#8220;Allow&#8221;,<br \/>\n      &#8220;Principal&#8221;: {<br \/>\n        &#8220;AWS&#8221;: &#8220;arn:aws:iam::123456789012:role\/application-server-role&#8221;<br \/>\n      },<br \/>\n      &#8220;Action&#8221;: [<br \/>\n        &#8220;s3:GetObject&#8221;,<br \/>\n        &#8220;s3:PutObject&#8221;<br \/>\n      ],<br \/>\n      &#8220;Resource&#8221;: &#8220;arn:aws:s3:::critical-prod-assets\/<\/em>&#8221;<br \/>\n    }<br \/>\n  ]<br \/>\n}<\/p>\n<pre class=\"codehilite\"><code>The snippet above is why I haven't slept. Someone\u2014probably a &quot;Senior Architect&quot; who hasn't touched a terminal since 2018\u2014decided to enforce VPC-only access to our primary S3 bucket. They forgot that the `Deny` evaluation logic in **amazon aws** is absolute. It doesn't matter if the `Allow` block is there. It doesn't matter if the IAM role has `AdministratorAccess`. The moment that `StringNotEquals` condition failed because a Lambda function was executing outside the VPC or a CloudFront distribution tried to fetch an origin object, the entire frontend went dark. 403 Forbidden. Everywhere. \n\nI\u2019ve been staring at this for 72 hours. My eyes feel like they\u2019ve been rubbed with sandpaper. The bridge call has 45 people on it, 40 of whom are &quot;Project Managers&quot; asking for an ETA every six minutes. \n\n## Ticket #9902: The Cascading Failure of the &quot;Cost-Optimized&quot; Tier\n\nThe incident started at 03:00 UTC. We were running our worker nodes on `t3.medium` instances. Marketing decided to launch a &quot;flash sale&quot; without telling Engineering. The burst credits on those `t3` instances? Gone in fifteen minutes. When a `t3` runs out of credits, it doesn't just stop; it throttles you to a baseline performance that is essentially a digital paperweight. \n\nI tried to pull the metrics. The console was timing out because the control plane was under heavy load. I had to drop to the CLI.\n\n```bash\naws cloudwatch get-metric-statistics \\\n    --namespace AWS\/EC2 \\\n    --metric-name CPUCreditBalance \\\n    --dimensions Name=InstanceId,Value=i-049f8234567890abcdef \\\n    --start-time 2023-10-24T03:00:00Z \\\n    --end-time 2023-10-24T04:00:00Z \\\n    --period 300 \\\n    --statistics Average\n<\/code><\/pre>\n<p>The output was a string of zeros. The nodes were pinned at 100% CPU utilization but were only actually processing at 20% of their capacity because of the credit exhaustion. The Auto Scaling Group (ASG) saw the 100% CPU and tried to spin up more instances. But because the existing instances were so throttled, they couldn&#8217;t even finish their <code>cloud-init<\/code> scripts to report as <code>InService<\/code>. <\/p>\n<p>We had a graveyard of &#8220;zombie instances&#8221; that were costing us money but doing zero work. The <strong>amazon aws<\/strong> ASG logic kept killing them for failing health checks, then starting new ones, which then failed. A death spiral in real-time.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_80 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69d8540a86267\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69d8540a86267\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#Ticket_9905_The_False_Fix_and_the_EBS_Wall\" >Ticket #9905: The False Fix and the EBS Wall<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#Ticket_9912_Why_the_NAT_Gateway_is_Eating_Our_Series_B\" >Ticket #9912: Why the NAT Gateway is Eating Our Series B<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#Ticket_9920_The_Reality_Check_of_Service_Limits\" >Ticket #9920: The Reality Check of Service Limits<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#Ticket_9931_The_Technical_Debt_of_Lambda_Execution_Environments\" >Ticket #9931: The Technical Debt of Lambda Execution Environments<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#The_Hard_Truth_The_Architecture_Critique\" >The Hard Truth: The Architecture Critique<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#The_Descent_into_Madness_The_Control_Plane_is_Down\" >The Descent into Madness: The Control Plane is Down<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#The_Technical_Debt_The_Aftermath\" >The Technical Debt: The Aftermath<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#The_Hard_Advice\" >The Hard Advice<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#Related_Articles\" >Related Articles<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Ticket_9905_The_False_Fix_and_the_EBS_Wall\"><\/span>Ticket #9905: The False Fix and the EBS Wall<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The &#8220;fix&#8221; was supposed to be simple: migrate the instance family to <code>c6g.xlarge<\/code>. No more burst credits. Graviton processors. Better price-to-performance. Or so the whitepapers say. We updated the Launch Template and forced an instance refresh.<\/p>\n<p>Then we hit the next wall: EBS IOPS. We were using <code>gp2<\/code> volumes. For the uninitiated, <code>gp2<\/code> performance is tied to volume size. You want more IOPS? You have to buy more storage you don&#8217;t need. We were on 100GB volumes, giving us a baseline of 300 IOPS. Under the new load, the disk queue depth exploded.<\/p>\n<pre class=\"codehilite\"><code class=\"language-bash\">aws ec2 describe-volumes \\\n    --volume-ids vol-05923847561029384 \\\n    --query 'Volumes[*].Iops'\n<\/code><\/pre>\n<p>The volumes were choked. The application was waiting on I\/O, which caused the thread pool to saturate, which caused the load balancer to start throwing 504 Gateway Timeouts. We tried to switch to <code>gp3<\/code> on the fly to provision 3000 IOPS independently of storage size. But <strong>amazon aws<\/strong> has a &#8220;soft limit&#8221; on how many volume modifications you can perform in a 24-hour period. We hit it.<\/p>\n<p>I had to get on the phone with a TAM (Technical Account Manager) to beg for a limit increase while the site was hemorrhaging $50,000 a minute. The &#8220;elasticity&#8221; of the cloud is a lie if you don&#8217;t have the quota to stretch it.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ticket_9912_Why_the_NAT_Gateway_is_Eating_Our_Series_B\"><\/span>Ticket #9912: Why the NAT Gateway is Eating Our Series B<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>While the compute layer was burning, I noticed a spike in our &#8220;Data Transfer&#8221; costs. We were processing 50TB of data through a NAT Gateway. For those who don&#8217;t look at the bill, a NAT Gateway in <strong>amazon aws<\/strong> charges you twice: once for the hourly uptime and once for every gigabyte that passes through it. <\/p>\n<p>We were pulling massive container images from an S3 bucket and hitting an external API. Because we didn&#8217;t have a VPC Endpoint for S3 configured in that specific subnet, all that traffic was routed through the NAT Gateway. <\/p>\n<pre class=\"codehilite\"><code class=\"language-bash\">aws ec2 describe-nat-gateways \\\n    --filter &quot;Name=vpc-id,Values=vpc-0a1b2c3d4e5f6g7h8&quot; \\\n    --query 'NatGateways[*].NatGatewayAddresses'\n<\/code><\/pre>\n<p>The egress fees were astronomical. We were paying $0.045 per GB just to move data <em>within<\/em> the same region. It\u2019s a tax on poor architectural choices. I had to manually rewrite the route tables in the middle of the outage to point S3 traffic toward a Gateway Endpoint. If you misconfigure a route table during a Sev-1, you lose SSH access to your fleet. I did it anyway. My hands were shaking from the caffeine.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ticket_9920_The_Reality_Check_of_Service_Limits\"><\/span>Ticket #9920: The Reality Check of Service Limits<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>By hour 40, we tried to scale the database. We\u2019re using Aurora MySQL. &#8220;Limitless scale,&#8221; they said. Except for the part where you hit the <code>max_connections<\/code> limit because the application doesn&#8217;t use a connection pooler like ProxySQL or RDS Proxy. <\/p>\n<p>Every time a Lambda function triggered, it opened a new connection. Under load, we had 5,000 concurrent Lambdas trying to talk to a database that was configured for 2,000 connections. <\/p>\n<pre class=\"codehilite\"><code class=\"language-bash\">aws rds describe-db-instances \\\n    --db-instance-identifier prod-db-cluster \\\n    --query 'DBInstances[*].DBInstanceClass'\n<\/code><\/pre>\n<p>We were on an <code>r6g.2xlarge<\/code>. We needed to scale up, but the &#8220;Modify DB Instance&#8221; operation takes time. It\u2019s not instantaneous. While the database was &#8220;modifying,&#8221; it was effectively in a read-only state for certain operations. The &#8220;Serverless&#8221; dream died right there. We were managing more infrastructure than we ever did on-prem, just with different names and more expensive invoices.<\/p>\n<p>The &#8220;soft limits&#8221; are the real killer. You don&#8217;t know they exist until you hit them. <code>DescribeInstances<\/code> API rate limits? Hit them. <code>CloudFormation<\/code> stack resource limits? Hit them. <code>IAM<\/code> role policy size limits? Hit those too. We had to split our IAM policies because they exceeded the 6,144-character limit. <\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ticket_9931_The_Technical_Debt_of_Lambda_Execution_Environments\"><\/span>Ticket #9931: The Technical Debt of Lambda Execution Environments<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The &#8220;Serverless&#8221; advocates in the company wanted to move everything to Lambda to &#8220;save money.&#8221; What they didn&#8217;t account for were &#8220;cold starts&#8221; and the execution environment overhead. When you put a Lambda in a VPC, it needs an ENI (Elastic Network Interface). While <strong>amazon aws<\/strong> has optimized this with Hyperplane, it still adds latency.<\/p>\n<p>We had a microservice that was chaining four Lambda calls. Each call added 200ms of cold start latency plus the actual execution time. The user experience was like trying to run through waist-high molasses.<\/p>\n<pre class=\"codehilite\"><code class=\"language-bash\">aws lambda get-function-concurrency \\\n    --function-name prod-order-processor\n<\/code><\/pre>\n<p>We had to implement &#8220;Provisioned Concurrency&#8221; to keep the functions warm. Do you know what Provisioned Concurrency costs? It\u2019s basically paying for a server to sit idle so that your &#8220;serverless&#8221; function can start quickly. We\u2019ve come full circle. We\u2019re paying for idle compute again, but this time it\u2019s wrapped in a proprietary API that makes it impossible to migrate away.<\/p>\n<p>The logs were another nightmare. CloudWatch Logs are priced at $0.50 per GB ingested. Our debug logs were so verbose that the logging cost was higher than the compute cost. I had to run a script to mass-update the retention policies of 500 log groups because the default is &#8220;Never Expire.&#8221;<\/p>\n<pre class=\"codehilite\"><code class=\"language-bash\">for group in $(aws logs describe-log-groups --query 'logGroups[*].logGroupName' --output text); do\n    aws logs put-retention-policy --log-group-name &quot;$group&quot; --retention-in-days 7\ndone\n<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"The_Hard_Truth_The_Architecture_Critique\"><\/span>The Hard Truth: The Architecture Critique<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The problem with <strong>amazon aws<\/strong> isn&#8217;t the technology; it&#8217;s the complexity masquerading as simplicity. They give you a &#8220;Click to Deploy&#8221; button that hides a labyrinth of networking, IAM, and billing traps. <\/p>\n<p>Our architecture was a &#8220;distributed monolith.&#8221; We had the worst of both worlds: the complexity of microservices with the tight coupling of a monolith. One misconfigured S3 bucket policy (the one I started this post with) brought down the entire stack because every service relied on that one bucket for configuration state. <\/p>\n<p>We used VPC Peering to connect our legacy environment to the new one. But VPC peering isn&#8217;t transitive. If VPC A is peered with VPC B, and VPC B is peered with VPC C, A cannot talk to C. We ended up with a &#8220;full mesh&#8221; of peering connections that was impossible to manage. We should have used a Transit Gateway, but the &#8220;Transit Gateway Processing Fee&#8221; was another line item the CFO wouldn&#8217;t approve.<\/p>\n<p>We were also victims of &#8220;Managed Service Fetishism.&#8221; We used Managed MQ because we didn&#8217;t want to manage RabbitMQ. But Managed MQ has a specific version lag and limited configuration options. When we hit a bug in the underlying broker, we couldn&#8217;t patch it. We had to wait for <strong>amazon aws<\/strong> to release a new minor version. We were stuck in a waiting room while our production environment was on fire.<\/p>\n<p>The &#8220;Global Infrastructure&#8221; is another marketing point that falls apart under pressure. Yes, there are multiple Availability Zones (AZs). But cross-AZ data transfer isn&#8217;t free. If your app server in <code>us-east-1a<\/code> talks to your database in <code>us-east-1b<\/code>, you&#8217;re paying for that data move. At scale, this &#8220;inter-AZ&#8221; tax becomes a massive part of the bill. We had to implement &#8220;AZ Affinity&#8221; in our load balancers to keep traffic within the same zone, which then created an imbalance in resource utilization. You can&#8217;t win.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_Descent_into_Madness_The_Control_Plane_is_Down\"><\/span>The Descent into Madness: The Control Plane is Down<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The final blow came during hour 60. We tried to roll back a deployment using CodeDeploy. But the <strong>amazon aws<\/strong> control plane for the region started experiencing &#8220;increased error rates.&#8221; We couldn&#8217;t deploy. We couldn&#8217;t roll back. We couldn&#8217;t even see our instances in the console.<\/p>\n<p>I was flying blind. I had to use the CLI with <code>--region us-west-2<\/code> just to see if the global STS (Security Token Service) was still responding. It wasn&#8217;t. We were locked out of our own infrastructure by the very provider we were paying six figures a month to.<\/p>\n<p>This is the &#8220;Hard Truth&#8221; of the cloud. You are renting someone else&#8217;s computer, and they have the master kill switch. When their control plane fails, your &#8220;highly available&#8221; architecture is just a collection of expensive, unreachable bits.<\/p>\n<p>We spent the next twelve hours manually rebuilding the state in a different region. Do you know how hard it is to move 10TB of data across regions during a global outage? The egress fees alone will require a board meeting to explain. <\/p>\n<pre class=\"codehilite\"><code class=\"language-bash\">aws s3 sync s3:\/\/prod-data-us-east-1 s3:\/\/prod-data-us-west-2 \\\n    --source-region us-east-1 \\\n    --region us-west-2\n<\/code><\/pre>\n<p>The <code>s3 sync<\/code> command is a lie when you have millions of small files. The overhead of the API calls to <code>ListObjectsV2<\/code> and <code>HeadObject<\/code> means it would take weeks to finish. We had to use S3 Batch Operations, which is another service, another configuration, and another set of IAM permissions to get wrong.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_Technical_Debt_The_Aftermath\"><\/span>The Technical Debt: The Aftermath<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>It\u2019s hour 72. The site is back up, mostly. We\u2019re running on a skeleton crew. The &#8220;Root Cause Analysis&#8221; (RCA) is due in four hours. I know what I\u2019m going to write, but I also know it won&#8217;t matter. <\/p>\n<p>The RCA will say &#8220;human error&#8221; regarding the S3 bucket policy. It will say &#8220;unforeseen traffic spike.&#8221; It will recommend &#8220;better monitoring.&#8221; <\/p>\n<p>But the real root cause is the &#8220;amazon aws&#8221; complexity tax. We have built a system so complex that no single human can understand the failure modes. We have layers of abstractions\u2014containers on top of VMs on top of software-defined networks on top of proprietary storage APIs. When one layer wobbles, the whole tower shakes.<\/p>\n<p>We have &#8220;Infrastructure as Code&#8221; (Terraform), but the state file is corrupted because of a timed-out <code>apply<\/code> during the peak of the outage. Now I have to manually import resources back into the state file, praying that I don&#8217;t accidentally trigger a <code>Destroy<\/code> on the production database.<\/p>\n<pre class=\"codehilite\"><code class=\"language-bash\">terraform import aws_db_instance.database prod-db-cluster\n<\/code><\/pre>\n<p>Every time I run a command, I&#8217;m terrified. One typo in a CLI flag and I\u2019m back at hour zero. The stress is physical. My heart rate hasn&#8217;t dropped below 90 in three days. I can smell the ozone and the stale coffee.<\/p>\n<p>We\u2019re &#8220;Cloud Native&#8221; now. That\u2019s what the brochure said. But &#8220;Cloud Native&#8221; just means you\u2019ve traded your hardware problems for distributed systems problems that you can&#8217;t see or touch. You\u2019ve traded a fixed CAPEX for an uncapped OPEX that can bankrupt you in a weekend if a loop goes rogue.<\/p>\n<p>I look at the junior developer who just joined the team. He\u2019s smiling. He\u2019s looking at the <strong>amazon aws<\/strong> console and talking about how &#8220;easy&#8221; it is to spin up a Kubernetes cluster with EKS. He thinks he\u2019s an architect because he can click a few buttons and see a dashboard.<\/p>\n<p>He has no idea. He hasn&#8217;t seen the <code>RequestLimitExceeded<\/code> errors in his dreams yet. He hasn&#8217;t had to explain to a CEO why a NAT Gateway cost more than the entire engineering salary for the month. He hasn&#8217;t felt the cold dread of a <code>Deny<\/code> policy that he can&#8217;t delete because he accidentally removed his own <code>IAM:PutBucketPolicy<\/code> permissions.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"The_Hard_Advice\"><\/span>The Hard Advice<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Listen closely, kid. You think you\u2019re &#8220;deploying&#8221; when you click that button in the console. You\u2019re not. You\u2019re signing a blood pact with an entity that doesn&#8217;t care about your uptime. <\/p>\n<p>If you think you can just &#8220;click and deploy&#8221; without understanding the underlying VPC routing, the IOPS credit math, and the absolute finality of an IAM <code>Deny<\/code> statement, you are a liability. The cloud is not a playground; it is a high-voltage power grid where every wire is live and nothing is labeled. <\/p>\n<p>Before you launch that next &#8220;serverless&#8221; function, go look at the pricing page for Data Transfer. Then look at the service limits for your region. Then go read the IAM evaluation logic documentation until you can recite it in your sleep. If you don&#8217;t know the difference between a <code>gp2<\/code> burst bucket and a <code>gp3<\/code> throughput limit, stay away from the production environment. <\/p>\n<p>The console is a lie designed to make you spend money. The CLI is the only truth, and even the truth is eventually consistent. Now get out of my sight; I have a post-mortem to write and a state file to fix.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Related_Articles\"><\/span>Related Articles<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Explore more insights and best practices:<\/p>\n<ul>\n<li><a href=\"https:\/\/itsupportwale.com\/blog\/pssh-execute-ssh-commands-on-multiple-systems-using-single-command\/\">Pssh Execute Ssh Commands On Multiple Systems Using Single Command<\/a><\/li>\n<li><a href=\"https:\/\/itsupportwale.com\/blog\/whatsapps-long-awaited-security-feature-launched\/\">Whatsapps Long Awaited Security Feature Launched<\/a><\/li>\n<li><a href=\"https:\/\/itsupportwale.com\/blog\/centos-8-installation-with-screenshots\/\">Centos 8 Installation With Screenshots<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>json { &#8220;Version&#8221;: &#8220;2012-10-17&#8221;, &#8220;Statement&#8221;: [ { &#8220;Sid&#8221;: &#8220;ExplicitDenyAllExceptVPC&#8221;, &#8220;Effect&#8221;: &#8220;Deny&#8221;, &#8220;Principal&#8221;: &#8220;&#8220;, &#8220;Action&#8221;: &#8220;s3:&#8220;, &#8220;Resource&#8221;: [ &#8220;arn:aws:s3:::critical-prod-assets\/&#8220;, &#8220;arn:aws:s3:::critical-prod-assets&#8221; ], &#8220;Condition&#8221;: { &#8220;StringNotEquals&#8221;: { &#8220;aws:SourceVpc&#8221;: &#8220;vpc-0a1b2c3d4e5f6g7h8&#8221; }, &#8220;Bool&#8221;: { &#8220;aws:PrincipalIsAWSService&#8221;: &#8220;false&#8221; } } }, { &#8220;Sid&#8221;: &#8220;AllowAppRoleAccess&#8221;, &#8220;Effect&#8221;: &#8220;Allow&#8221;, &#8220;Principal&#8221;: { &#8220;AWS&#8221;: &#8220;arn:aws:iam::123456789012:role\/application-server-role&#8221; }, &#8220;Action&#8221;: [ &#8220;s3:GetObject&#8221;, &#8220;s3:PutObject&#8221; ], &#8220;Resource&#8221;: &#8220;arn:aws:s3:::critical-prod-assets\/&#8221; } ] } The &#8230; <a title=\"Mastering Amazon AWS: A Complete Guide for Beginners\" class=\"read-more\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\" aria-label=\"Read more  on Mastering Amazon AWS: A Complete Guide for Beginners\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4488","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mastering Amazon AWS: A Complete Guide for Beginners - ITSupportWale<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mastering Amazon AWS: A Complete Guide for Beginners - ITSupportWale\" \/>\n<meta property=\"og:description\" content=\"json { &#8220;Version&#8221;: &#8220;2012-10-17&#8221;, &#8220;Statement&#8221;: [ { &#8220;Sid&#8221;: &#8220;ExplicitDenyAllExceptVPC&#8221;, &#8220;Effect&#8221;: &#8220;Deny&#8221;, &#8220;Principal&#8221;: &#8220;&#8220;, &#8220;Action&#8221;: &#8220;s3:&#8220;, &#8220;Resource&#8221;: [ &#8220;arn:aws:s3:::critical-prod-assets\/&#8220;, &#8220;arn:aws:s3:::critical-prod-assets&#8221; ], &#8220;Condition&#8221;: { &#8220;StringNotEquals&#8221;: { &#8220;aws:SourceVpc&#8221;: &#8220;vpc-0a1b2c3d4e5f6g7h8&#8221; }, &#8220;Bool&#8221;: { &#8220;aws:PrincipalIsAWSService&#8221;: &#8220;false&#8221; } } }, { &#8220;Sid&#8221;: &#8220;AllowAppRoleAccess&#8221;, &#8220;Effect&#8221;: &#8220;Allow&#8221;, &#8220;Principal&#8221;: { &#8220;AWS&#8221;: &#8220;arn:aws:iam::123456789012:role\/application-server-role&#8221; }, &#8220;Action&#8221;: [ &#8220;s3:GetObject&#8221;, &#8220;s3:PutObject&#8221; ], &#8220;Resource&#8221;: &#8220;arn:aws:s3:::critical-prod-assets\/&#8221; } ] } The ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\" \/>\n<meta property=\"og:site_name\" content=\"ITSupportWale\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Itsupportwale-298547177495978\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-01T15:34:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-17T10:27:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2021\/05\/android-chrome-512x512-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Techie\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Techie\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\"},\"author\":{\"name\":\"Techie\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d\"},\"headline\":\"Mastering Amazon AWS: A Complete Guide for Beginners\",\"datePublished\":\"2026-02-01T15:34:01+00:00\",\"dateModified\":\"2026-02-17T10:27:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\"},\"wordCount\":2117,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#organization\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\",\"url\":\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\",\"name\":\"Mastering Amazon AWS: A Complete Guide for Beginners - ITSupportWale\",\"isPartOf\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#website\"},\"datePublished\":\"2026-02-01T15:34:01+00:00\",\"dateModified\":\"2026-02-17T10:27:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/itsupportwale.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mastering Amazon AWS: A Complete Guide for Beginners\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#website\",\"url\":\"https:\/\/itsupportwale.com\/blog\/\",\"name\":\"ITSupportWale\",\"description\":\"Tips, Tricks, Fixed-Errors, Tutorials &amp; Guides\",\"publisher\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/itsupportwale.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#organization\",\"name\":\"itsupportwale\",\"url\":\"https:\/\/itsupportwale.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png\",\"contentUrl\":\"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png\",\"width\":1119,\"height\":144,\"caption\":\"itsupportwale\"},\"image\":{\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Itsupportwale-298547177495978\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d\",\"name\":\"Techie\",\"sameAs\":[\"https:\/\/itsupportwale.com\",\"iswblogadmin\"],\"url\":\"https:\/\/itsupportwale.com\/blog\/author\/iswblogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mastering Amazon AWS: A Complete Guide for Beginners - ITSupportWale","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/","og_locale":"en_US","og_type":"article","og_title":"Mastering Amazon AWS: A Complete Guide for Beginners - ITSupportWale","og_description":"json { &#8220;Version&#8221;: &#8220;2012-10-17&#8221;, &#8220;Statement&#8221;: [ { &#8220;Sid&#8221;: &#8220;ExplicitDenyAllExceptVPC&#8221;, &#8220;Effect&#8221;: &#8220;Deny&#8221;, &#8220;Principal&#8221;: &#8220;&#8220;, &#8220;Action&#8221;: &#8220;s3:&#8220;, &#8220;Resource&#8221;: [ &#8220;arn:aws:s3:::critical-prod-assets\/&#8220;, &#8220;arn:aws:s3:::critical-prod-assets&#8221; ], &#8220;Condition&#8221;: { &#8220;StringNotEquals&#8221;: { &#8220;aws:SourceVpc&#8221;: &#8220;vpc-0a1b2c3d4e5f6g7h8&#8221; }, &#8220;Bool&#8221;: { &#8220;aws:PrincipalIsAWSService&#8221;: &#8220;false&#8221; } } }, { &#8220;Sid&#8221;: &#8220;AllowAppRoleAccess&#8221;, &#8220;Effect&#8221;: &#8220;Allow&#8221;, &#8220;Principal&#8221;: { &#8220;AWS&#8221;: &#8220;arn:aws:iam::123456789012:role\/application-server-role&#8221; }, &#8220;Action&#8221;: [ &#8220;s3:GetObject&#8221;, &#8220;s3:PutObject&#8221; ], &#8220;Resource&#8221;: &#8220;arn:aws:s3:::critical-prod-assets\/&#8221; } ] } The ... Read more","og_url":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/","og_site_name":"ITSupportWale","article_publisher":"https:\/\/www.facebook.com\/Itsupportwale-298547177495978","article_published_time":"2026-02-01T15:34:01+00:00","article_modified_time":"2026-02-17T10:27:00+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2021\/05\/android-chrome-512x512-1.png","type":"image\/png"}],"author":"Techie","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Techie","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#article","isPartOf":{"@id":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/"},"author":{"name":"Techie","@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d"},"headline":"Mastering Amazon AWS: A Complete Guide for Beginners","datePublished":"2026-02-01T15:34:01+00:00","dateModified":"2026-02-17T10:27:00+00:00","mainEntityOfPage":{"@id":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/"},"wordCount":2117,"commentCount":0,"publisher":{"@id":"https:\/\/itsupportwale.com\/blog\/#organization"},"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/","url":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/","name":"Mastering Amazon AWS: A Complete Guide for Beginners - ITSupportWale","isPartOf":{"@id":"https:\/\/itsupportwale.com\/blog\/#website"},"datePublished":"2026-02-01T15:34:01+00:00","dateModified":"2026-02-17T10:27:00+00:00","breadcrumb":{"@id":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/itsupportwale.com\/blog\/mastering-amazon-aws-a-complete-guide-for-beginners\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/itsupportwale.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Mastering Amazon AWS: A Complete Guide for Beginners"}]},{"@type":"WebSite","@id":"https:\/\/itsupportwale.com\/blog\/#website","url":"https:\/\/itsupportwale.com\/blog\/","name":"ITSupportWale","description":"Tips, Tricks, Fixed-Errors, Tutorials &amp; Guides","publisher":{"@id":"https:\/\/itsupportwale.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itsupportwale.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/itsupportwale.com\/blog\/#organization","name":"itsupportwale","url":"https:\/\/itsupportwale.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png","contentUrl":"https:\/\/itsupportwale.com\/blog\/wp-content\/uploads\/2023\/09\/cropped-Logo-trans-without-slogan.png","width":1119,"height":144,"caption":"itsupportwale"},"image":{"@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Itsupportwale-298547177495978"]},{"@type":"Person","@id":"https:\/\/itsupportwale.com\/blog\/#\/schema\/person\/8c5a2b3d36396e0a8fd91ec8242fd46d","name":"Techie","sameAs":["https:\/\/itsupportwale.com","iswblogadmin"],"url":"https:\/\/itsupportwale.com\/blog\/author\/iswblogadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/posts\/4488","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/comments?post=4488"}],"version-history":[{"count":4,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/posts\/4488\/revisions"}],"predecessor-version":[{"id":4657,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/posts\/4488\/revisions\/4657"}],"wp:attachment":[{"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/media?parent=4488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/categories?post=4488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itsupportwale.com\/blog\/wp-json\/wp\/v2\/tags?post=4488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}