<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AMUTHA NILA AR</title>
    <description>The latest articles on DEV Community by AMUTHA NILA AR (@amutha_nila).</description>
    <link>https://dev.to/amutha_nila</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4125503%2F3bbca1d2-9035-4c62-b9d7-26da733588fe.png</url>
      <title>DEV Community: AMUTHA NILA AR</title>
      <link>https://dev.to/amutha_nila</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amutha_nila"/>
    <language>en</language>
    <item>
      <title>CloudCraft</title>
      <dc:creator>AMUTHA NILA AR</dc:creator>
      <pubDate>Tue, 15 Sep 2026 07:29:04 +0000</pubDate>
      <link>https://dev.to/amutha_nila/cloudcraft-4hpd</link>
      <guid>https://dev.to/amutha_nila/cloudcraft-4hpd</guid>
      <description>&lt;p&gt;☁️ CloudCraft — My First Hands-On AWS Cloud Deployment&lt;/p&gt;

&lt;p&gt;From an HTML file on my laptop to a website running on AWS.&lt;/p&gt;

&lt;p&gt;As part of the CloudCraft Cloud Workshop, I got hands-on with AWS by&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqq9qe85ot2trqmpjkarh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqq9qe85ot2trqmpjkarh.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbixcssnkcc9a6kc3rm0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbixcssnkcc9a6kc3rm0f.png" alt=" " width="800" height="550"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fujg8b2hp6wx93wij5ogq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fujg8b2hp6wx93wij5ogq.png" alt=" " width="800" height="550"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiaq5a6g7y19h7cspcgqf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiaq5a6g7y19h7cspcgqf.png" alt=" " width="800" height="288"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Furi3f66es9n4z9buqj3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Furi3f66es9n4z9buqj3k.png" alt=" " width="799" height="298"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyrsu51vf940u80gmmnut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyrsu51vf940u80gmmnut.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flg8caj7yi9p12grmsnn0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flg8caj7yi9p12grmsnn0.png" alt=" " width="799" height="319"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fccccm1yxnfpiebdde7sj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fccccm1yxnfpiebdde7sj.png" alt=" " width="800" height="289"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4369v6qjd79prhpesxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb4369v6qjd79prhpesxg.png" alt=" " width="107" height="167"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3fqgcl1kt1gyc3reu8se.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3fqgcl1kt1gyc3reu8se.png" alt=" " width="800" height="271"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzqa78blmmusy8td5lp0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzqa78blmmusy8td5lp0g.png" alt=" " width="97" height="487"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff76b1hqu5yz6xmafzaas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff76b1hqu5yz6xmafzaas.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdstt05vn5ua48a4ghwq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdstt05vn5ua48a4ghwq.png" alt=" " width="800" height="333"&gt;&lt;/a&gt; deploying a static website using Amazon S3 and exploring how services like CloudFront and Route 53 fit into the architecture.&lt;/p&gt;

&lt;p&gt;This wasn't just about learning what each AWS service does.&lt;/p&gt;

&lt;p&gt;I actually went through the console, created resources, configured permissions, hosted the website, tested the endpoint, and then tried to put CloudFront in front of it.&lt;/p&gt;

&lt;p&gt;Here is my step-by-step journey.&lt;/p&gt;

&lt;p&gt;☁️ Step 1 — Starting with AWS&lt;/p&gt;

&lt;p&gt;The first step was getting familiar with the AWS Management Console.&lt;/p&gt;

&lt;p&gt;The main services I worked with were:&lt;/p&gt;

&lt;p&gt;AWS&lt;br&gt;
│&lt;br&gt;
├── Amazon S3&lt;br&gt;
├── CloudFront&lt;br&gt;
└── Route 53&lt;/p&gt;

&lt;p&gt;The goal was to take a simple static website and make it accessible through AWS infrastructure.&lt;/p&gt;

&lt;p&gt;🪣 Step 2 — Creating an S3 Bucket&lt;/p&gt;

&lt;p&gt;The first actual resource I created was an Amazon S3 bucket.&lt;/p&gt;

&lt;p&gt;I went to:&lt;/p&gt;

&lt;p&gt;AWS Console → S3 → Create bucket&lt;/p&gt;

&lt;p&gt;For the bucket configuration, I selected:&lt;/p&gt;

&lt;p&gt;Bucket type: General purpose&lt;br&gt;
AWS Region: Europe (Stockholm) — eu-north-1&lt;br&gt;
Bucket namespace: Global namespace&lt;br&gt;
Bucket name: amuthanila-04-15&lt;/p&gt;

&lt;p&gt;The bucket name needs to be unique within the relevant S3 namespace.&lt;/p&gt;

&lt;p&gt;After creating the bucket, it became the storage location for my website.&lt;/p&gt;

&lt;p&gt;📂 Step 3 — Uploading Website Files&lt;/p&gt;

&lt;p&gt;Once the bucket was created, I uploaded my website files.&lt;/p&gt;

&lt;p&gt;My bucket contained:&lt;/p&gt;

&lt;p&gt;amuthanila-04-15&lt;br&gt;
│&lt;br&gt;
├── index.html&lt;br&gt;
└── cloud.jpg&lt;/p&gt;

&lt;p&gt;The important file here is:&lt;/p&gt;

&lt;p&gt;index.html&lt;/p&gt;

&lt;p&gt;because it acts as the entry page for the static website.&lt;/p&gt;

&lt;p&gt;🌐 Step 4 — Enabling Static Website Hosting&lt;/p&gt;

&lt;p&gt;Next, I configured the S3 bucket for static website hosting.&lt;/p&gt;

&lt;p&gt;I went to:&lt;/p&gt;

&lt;p&gt;S3 → Bucket → Properties → Static website hosting&lt;/p&gt;

&lt;p&gt;and enabled:&lt;/p&gt;

&lt;p&gt;S3 static website hosting&lt;/p&gt;

&lt;p&gt;with:&lt;/p&gt;

&lt;p&gt;Hosting type:&lt;br&gt;
Bucket hosting&lt;/p&gt;

&lt;p&gt;AWS then provided a region-specific website endpoint.&lt;/p&gt;

&lt;p&gt;My website could now be accessed through an S3 website endpoint.&lt;/p&gt;

&lt;p&gt;However, this endpoint uses HTTP, not HTTPS.&lt;/p&gt;

&lt;p&gt;That became an important reason to explore CloudFront next.&lt;/p&gt;

&lt;p&gt;🔓 Step 5 — Configuring Access&lt;/p&gt;

&lt;p&gt;Uploading the files isn't enough.&lt;/p&gt;

&lt;p&gt;The browser also needs permission to retrieve them.&lt;/p&gt;

&lt;p&gt;So I worked with S3 access configuration.&lt;/p&gt;

&lt;p&gt;One of the concepts I explored was ACL — Access Control List.&lt;/p&gt;

&lt;p&gt;ACLs provide a mechanism for controlling access to S3 resources.&lt;/p&gt;

&lt;p&gt;This helped me understand that storing a file and allowing someone to access that file are two different things.&lt;/p&gt;

&lt;p&gt;🛡️ Step 6 — Adding an S3 Bucket Policy&lt;/p&gt;

&lt;p&gt;Next, I configured a Bucket Policy.&lt;/p&gt;

&lt;p&gt;The policy I used allowed s3:GetObject access to objects in the bucket.&lt;/p&gt;

&lt;p&gt;The basic structure was:&lt;/p&gt;

&lt;p&gt;Principal&lt;br&gt;
    ↓&lt;br&gt;
Action&lt;br&gt;
    ↓&lt;br&gt;
Resource&lt;br&gt;
    ↓&lt;br&gt;
Allow / Deny&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Action:&lt;br&gt;
s3:GetObject&lt;/p&gt;

&lt;p&gt;and the resource pointed to the objects inside my bucket.&lt;/p&gt;

&lt;p&gt;This was one of the first places where AWS IAM-style permissions started making practical sense.&lt;/p&gt;

&lt;p&gt;🏷️ Step 7 — Understanding Tags&lt;/p&gt;

&lt;p&gt;I also explored S3/AWS resource tags.&lt;/p&gt;

&lt;p&gt;A tag is basically a key-value pair used to identify and organize resources.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Project = CloudCraft&lt;br&gt;
Environment = Learning&lt;/p&gt;

&lt;p&gt;It looks simple, but tags become very useful when working with many cloud resources.&lt;/p&gt;

&lt;p&gt;🔄 Step 8 — Enabling Bucket Versioning&lt;/p&gt;

&lt;p&gt;Next came S3 Versioning.&lt;/p&gt;

&lt;p&gt;I enabled versioning for the bucket.&lt;/p&gt;

&lt;p&gt;Instead of simply replacing an object:&lt;/p&gt;

&lt;p&gt;index.html&lt;br&gt;
   ↓&lt;br&gt;
new index.html&lt;/p&gt;

&lt;p&gt;S3 can maintain different versions of the object.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;index.html&lt;br&gt;
│&lt;br&gt;
├── Version 1&lt;br&gt;
├── Version 2&lt;br&gt;
└── Version 3&lt;/p&gt;

&lt;p&gt;This provides protection against accidental overwrites and helps with recovery.&lt;/p&gt;

&lt;p&gt;🔑 Step 9 — Exploring Presigned URLs&lt;/p&gt;

&lt;p&gt;Another concept I explored was the S3 Presigned URL.&lt;/p&gt;

&lt;p&gt;A presigned URL provides temporary access to an S3 object.&lt;/p&gt;

&lt;p&gt;Instead of making an object permanently public:&lt;/p&gt;

&lt;p&gt;Private Object&lt;br&gt;
      ↓&lt;br&gt;
Temporary Presigned URL&lt;br&gt;
      ↓&lt;br&gt;
User gets access&lt;/p&gt;

&lt;p&gt;The URL can have an expiration time.&lt;/p&gt;

&lt;p&gt;This is useful for securely sharing private files for a limited period.&lt;/p&gt;

&lt;p&gt;🌍 Step 10 — Understanding S3 Global Namespace&lt;/p&gt;

&lt;p&gt;While creating the bucket, I also learned an important S3 concept:&lt;/p&gt;

&lt;p&gt;Bucket names are globally significant in the traditional S3 general-purpose bucket namespace.&lt;/p&gt;

&lt;p&gt;That means you can't assume a name like:&lt;/p&gt;

&lt;p&gt;mybucket&lt;/p&gt;

&lt;p&gt;will be available.&lt;/p&gt;

&lt;p&gt;So choosing a unique bucket name is part of creating an S3 bucket.&lt;/p&gt;

&lt;p&gt;🏗️ Step 11 — High Availability&lt;/p&gt;

&lt;p&gt;Along the way, I explored the idea of High Availability (HA).&lt;/p&gt;

&lt;p&gt;The basic principle is:&lt;/p&gt;

&lt;p&gt;Don't design your application around a single point of failure.&lt;/p&gt;

&lt;p&gt;Cloud architecture aims to provide resilience through redundancy and distributed infrastructure.&lt;/p&gt;

&lt;p&gt;This made me look at AWS not simply as:&lt;/p&gt;

&lt;p&gt;"A place where I upload my website"&lt;/p&gt;

&lt;p&gt;but as:&lt;/p&gt;

&lt;p&gt;Infrastructure designed to deliver applications reliably.&lt;/p&gt;

&lt;p&gt;⚡ Step 12 — Moving to CloudFront&lt;/p&gt;

&lt;p&gt;After getting the website working through S3, the next step was Amazon CloudFront.&lt;/p&gt;

&lt;p&gt;The architecture changes from:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
  ↓&lt;br&gt;
S3&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;User&lt;br&gt;
  ↓&lt;br&gt;
CloudFront&lt;br&gt;
  ↓&lt;br&gt;
S3&lt;/p&gt;

&lt;p&gt;CloudFront acts as a CDN and can cache content at edge locations closer to users.&lt;/p&gt;

&lt;p&gt;This can improve content delivery performance and also gives us a path toward serving the site over HTTPS.&lt;/p&gt;

&lt;p&gt;⚙️ Step 13 — Creating the CloudFront Distribution&lt;/p&gt;

&lt;p&gt;I went to:&lt;/p&gt;

&lt;p&gt;AWS Console → CloudFront → Distributions → Create distribution&lt;/p&gt;

&lt;p&gt;For the distribution, I used:&lt;/p&gt;

&lt;p&gt;Distribution name:&lt;br&gt;
my-portfolio&lt;/p&gt;

&lt;p&gt;I selected:&lt;/p&gt;

&lt;p&gt;Single website configuration&lt;/p&gt;

&lt;p&gt;For the origin, I selected my S3 bucket:&lt;/p&gt;

&lt;p&gt;amuthanila-04-15.s3.eu-north-1.amazonaws.com&lt;/p&gt;

&lt;p&gt;I also enabled:&lt;/p&gt;

&lt;p&gt;Grant CloudFront access to origin → Yes&lt;/p&gt;

&lt;p&gt;This allows CloudFront to access the S3 origin while AWS can manage the required S3 bucket policy configuration.&lt;/p&gt;

&lt;p&gt;🚧 Step 14 — The Unexpected Problem&lt;/p&gt;

&lt;p&gt;Everything looked ready.&lt;/p&gt;

&lt;p&gt;The CloudFront configuration showed:&lt;/p&gt;

&lt;p&gt;Billing:&lt;br&gt;
Free ($0/month)&lt;/p&gt;

&lt;p&gt;Origin:&lt;br&gt;
S3&lt;/p&gt;

&lt;p&gt;CloudFront access:&lt;br&gt;
Yes&lt;/p&gt;

&lt;p&gt;Security:&lt;br&gt;
Enabled&lt;/p&gt;

&lt;p&gt;But when I tried to create the distribution, AWS stopped me with:&lt;/p&gt;

&lt;p&gt;"Your account must be verified before you can add new CloudFront resources."&lt;/p&gt;

&lt;p&gt;So the problem wasn't my S3 configuration.&lt;/p&gt;

&lt;p&gt;It was an AWS account verification requirement.&lt;/p&gt;

&lt;p&gt;Instead of randomly changing the configuration, I opened an AWS Support case to resolve the account verification issue.&lt;/p&gt;

&lt;p&gt;And honestly, this was also part of the learning.&lt;/p&gt;

&lt;p&gt;Because in real cloud work:&lt;/p&gt;

&lt;p&gt;Things don't always fail because your code is wrong.&lt;/p&gt;

&lt;p&gt;Sometimes the problem is permissions, account restrictions, quotas, billing, or service-level requirements.&lt;/p&gt;

&lt;p&gt;🌐 Step 15 — Route 53&lt;/p&gt;

&lt;p&gt;The next part of the CloudCraft journey is Route 53.&lt;/p&gt;

&lt;p&gt;The purpose is DNS.&lt;/p&gt;

&lt;p&gt;Instead of users having to remember a long AWS endpoint, DNS allows a domain name to point toward the application infrastructure.&lt;/p&gt;

&lt;p&gt;The intended architecture becomes:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             🌍 USER
                │
                ▼
          ┌───────────┐
          │ Route 53  │
          │    DNS    │
          └─────┬─────┘
                │
                ▼
          ┌───────────┐
          │CloudFront │
          │    CDN    │
          └─────┬─────┘
                │
                ▼
          ┌───────────┐
          │    S3     │
          │  Website  │
          └───────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🧩 What I Covered in CloudCraft&lt;/p&gt;

&lt;p&gt;My first CloudCraft hands-on session covered:&lt;/p&gt;

&lt;p&gt;AWS&lt;br&gt;
 │&lt;br&gt;
 └── S3&lt;br&gt;
      ├── Bucket creation&lt;br&gt;
      ├── Global namespace&lt;br&gt;
      ├── Object upload&lt;br&gt;
      ├── Static website hosting&lt;br&gt;
      ├── ACL&lt;br&gt;
      ├── Bucket Policy&lt;br&gt;
      ├── Tags&lt;br&gt;
      ├── Versioning&lt;br&gt;
      └── Presigned URLs&lt;br&gt;
            │&lt;br&gt;
            ▼&lt;br&gt;
        CloudFront&lt;br&gt;
            │&lt;br&gt;
            ▼&lt;br&gt;
         Route 53&lt;br&gt;
💡 My Biggest Takeaway&lt;/p&gt;

&lt;p&gt;Before this workshop, these could have looked like separate AWS terms:&lt;/p&gt;

&lt;p&gt;S3. ACL. Bucket Policy. Versioning. CloudFront. Route 53.&lt;/p&gt;

&lt;p&gt;After actually configuring them, I started seeing them as different layers of the same architecture.&lt;/p&gt;

&lt;p&gt;Storage&lt;br&gt;
   ↓&lt;br&gt;
Access Control&lt;br&gt;
   ↓&lt;br&gt;
Website Hosting&lt;br&gt;
   ↓&lt;br&gt;
Content Delivery&lt;br&gt;
   ↓&lt;br&gt;
DNS&lt;/p&gt;

&lt;p&gt;That's the part I found most valuable about the hands-on approach.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdxs96fq9nen0441v0tjs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdxs96fq9nen0441v0tjs.png" alt=" " width="799" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>cloud</category>
      <category>deployment</category>
    </item>
  </channel>
</rss>
