<?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: Keerthana</title>
    <description>The latest articles on DEV Community by Keerthana (@keerthana_e91cbee42b28b90).</description>
    <link>https://dev.to/keerthana_e91cbee42b28b90</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%2F4125491%2Fda46cb5c-9079-4b1d-99ed-e4cf2d0e9118.png</url>
      <title>DEV Community: Keerthana</title>
      <link>https://dev.to/keerthana_e91cbee42b28b90</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/keerthana_e91cbee42b28b90"/>
    <language>en</language>
    <item>
      <title>Deploying a Portfolio Website Using AWS S3 and CloudFront 🚀</title>
      <dc:creator>Keerthana</dc:creator>
      <pubDate>Tue, 15 Sep 2026 07:19:29 +0000</pubDate>
      <link>https://dev.to/keerthana_e91cbee42b28b90/deploying-a-portfolio-website-using-aws-s3-and-cloudfront-56ee</link>
      <guid>https://dev.to/keerthana_e91cbee42b28b90/deploying-a-portfolio-website-using-aws-s3-and-cloudfront-56ee</guid>
      <description>&lt;p&gt;Today I got hands-on with &lt;strong&gt;Amazon S3&lt;/strong&gt; and &lt;strong&gt;Amazon CloudFront&lt;/strong&gt; to understand how a static website can be stored, hosted, and delivered using AWS.&lt;/p&gt;

&lt;p&gt;The practical started with a simple S3 bucket and an uploaded image. After that, I created a separate S3 bucket for my portfolio, deployed my &lt;code&gt;index.html&lt;/code&gt;, configured public access, and finally created a CloudFront distribution for the portfolio.&lt;/p&gt;

&lt;p&gt;Here's the complete process 👇&lt;/p&gt;

&lt;h2&gt;
  
  
  ☁️ AWS Services Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt; – Object storage and static website hosting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon CloudFront&lt;/strong&gt; – Content delivery and CDN&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  1️⃣ Logging into AWS
&lt;/h1&gt;

&lt;p&gt;I started by logging into the &lt;strong&gt;AWS Management Console&lt;/strong&gt; and opening the &lt;strong&gt;Amazon S3&lt;/strong&gt; service.&lt;/p&gt;

&lt;p&gt;Amazon S3 (Simple Storage Service) is an object storage service where data is stored inside &lt;strong&gt;buckets&lt;/strong&gt; as objects.&lt;/p&gt;

&lt;h1&gt;
  
  
  2️⃣ Creating an S3 Bucket 🪣
&lt;/h1&gt;

&lt;p&gt;The first step was to create an S3 bucket.&lt;/p&gt;

&lt;p&gt;I created a bucket named:&lt;/p&gt;

&lt;p&gt;keerthana-s3-practice-2026&lt;/p&gt;

&lt;p&gt;This bucket was created to practice the basic S3 workflow.&lt;/p&gt;

&lt;p&gt;After creating the bucket, I opened it and uploaded an image object.&lt;/p&gt;

&lt;p&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%2F3z4k9uvm2w0a6k6yljxz.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%2F3z4k9uvm2w0a6k6yljxz.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  3️⃣ Uploading an Object to S3 📷
&lt;/h1&gt;

&lt;p&gt;After creating the bucket, I uploaded an image into it.&lt;/p&gt;

&lt;p&gt;The uploaded object was:&lt;br&gt;
harriss.jpg&lt;/p&gt;

&lt;p&gt;This helped me understand the basic S3 concept:&lt;/p&gt;

&lt;p&gt;S3&lt;br&gt;
 │&lt;br&gt;
 └── Bucket&lt;br&gt;
       │&lt;br&gt;
       └── Object&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;bucket&lt;/strong&gt; acts as a container, while the uploaded file is stored as an &lt;strong&gt;object&lt;/strong&gt;.&lt;/p&gt;

&lt;p&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%2Fe9w534ar116cedpqlljj.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%2Fe9w534ar116cedpqlljj.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  4️⃣ Creating an S3 Bucket for My Portfolio 🌐
&lt;/h1&gt;

&lt;p&gt;After practicing with the image upload, I created another S3 bucket specifically for my portfolio website.&lt;/p&gt;

&lt;p&gt;The bucket was:&lt;br&gt;
keerthana-s3-portfolio-2026&lt;/p&gt;

&lt;p&gt;This bucket was used to store my portfolio website files.&lt;/p&gt;
&lt;h1&gt;
  
  
  5️⃣ Uploading My Portfolio &lt;code&gt;index.html&lt;/code&gt;
&lt;/h1&gt;

&lt;p&gt;I uploaded my portfolio's main HTML file:&lt;/p&gt;

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

&lt;p&gt;into the portfolio bucket.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;index.html&lt;/code&gt; file contains the main structure and content of my portfolio website.&lt;/p&gt;

&lt;p&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%2Fr40px0bgkfpa1rr68m8s.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%2Fr40px0bgkfpa1rr68m8s.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  6️⃣ Deploying the Portfolio Using S3 🚀
&lt;/h1&gt;

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

&lt;p&gt;The index document was set to:&lt;br&gt;
index.html&lt;/p&gt;

&lt;p&gt;After configuring the website hosting, I opened the generated S3 website endpoint in the browser.&lt;/p&gt;

&lt;p&gt;The portfolio was successfully served by S3.&lt;/p&gt;

&lt;p&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%2Fcgn71hzdmu4txy0eo5cx.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%2Fcgn71hzdmu4txy0eo5cx.png" alt=" " width="799" height="426"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  7️⃣ A Small Problem I Encountered 🧐
&lt;/h1&gt;

&lt;p&gt;When I first opened the portfolio, the HTML content was visible, but the original UI styling was not displayed properly.&lt;/p&gt;

&lt;p&gt;Instead, the browser showed the page using basic HTML styling.&lt;/p&gt;

&lt;p&gt;This made me realize something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Uploading &lt;code&gt;index.html&lt;/code&gt; alone is not always enough for a complete website.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the HTML file references other files such as:&lt;/p&gt;

&lt;p&gt;style.css&lt;br&gt;
script.js&lt;br&gt;
images/&lt;br&gt;
fonts/&lt;/p&gt;

&lt;p&gt;those files also need to be available at the correct paths.&lt;/p&gt;

&lt;p&gt;So, if the required CSS or other assets are missing, the HTML may still load but the website can appear unstyled.&lt;/p&gt;

&lt;p&gt;This was a useful part of the practical because it helped me understand how static websites actually work when deployed to cloud storage.&lt;/p&gt;
&lt;h1&gt;
  
  
  8️⃣ Configuring the S3 Bucket Policy 🔐
&lt;/h1&gt;

&lt;p&gt;After deploying the portfolio, I configured the &lt;strong&gt;S3 bucket policy&lt;/strong&gt; to allow public access to the portfolio objects.&lt;/p&gt;

&lt;p&gt;The main permission involved was:&lt;/p&gt;

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

&lt;p&gt;This permission allows objects in the bucket to be read.&lt;/p&gt;

&lt;p&gt;The policy was configured for the portfolio bucket.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PublicReadGetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::YOUR-BUCKET-NAME/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;YOUR-BUCKET-NAME&lt;/code&gt; represents the actual portfolio bucket.&lt;/p&gt;

&lt;h1&gt;
  
  
  9️⃣ Accessing the Portfolio Through the S3 Website URL 🌍
&lt;/h1&gt;

&lt;p&gt;After configuring the bucket policy, I accessed the portfolio using the S3 static website endpoint.&lt;/p&gt;

&lt;p&gt;The endpoint follows this format:&lt;br&gt;
&lt;a href="http://YOUR-BUCKET-NAME.s3-website.ap-south-1.amazonaws.com/" rel="noopener noreferrer"&gt;http://YOUR-BUCKET-NAME.s3-website.ap-south-1.amazonaws.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this practical, the website endpoint was:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://ashwina-006-15092006.s3-website.ap-south-1.amazonaws.com/" rel="noopener noreferrer"&gt;http://ashwina-006-15092006.s3-website.ap-south-1.amazonaws.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The portfolio could then be accessed through the S3 website endpoint.&lt;/p&gt;

&lt;h1&gt;
  
  
  🔟 Creating an Amazon CloudFront Distribution ⚡
&lt;/h1&gt;

&lt;p&gt;After successfully deploying the portfolio through S3, I moved on to &lt;strong&gt;Amazon CloudFront&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CloudFront is AWS's &lt;strong&gt;Content Delivery Network (CDN)&lt;/strong&gt;. It is used to deliver content through a distributed network of edge locations.&lt;/p&gt;

&lt;p&gt;I opened:&lt;br&gt;
AWS Console&lt;br&gt;
     ↓&lt;br&gt;
CloudFront&lt;br&gt;
     ↓&lt;br&gt;
Create Distribution&lt;/p&gt;

&lt;p&gt;During the configuration, I specified the portfolio S3 bucket as the &lt;strong&gt;origin&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The origin is the source from which CloudFront retrieves the website content.&lt;/p&gt;

&lt;h1&gt;
  
  
  1️⃣1️⃣ Creating the CloudFront Distribution 🚀
&lt;/h1&gt;

&lt;p&gt;After completing the required configuration, I created the CloudFront distribution.&lt;/p&gt;

&lt;p&gt;The distribution created during my practical had the ID:&lt;br&gt;
E1GCVH4NTUDX8S&lt;/p&gt;

&lt;p&gt;The distribution was enabled and deployed successfully.&lt;/p&gt;

&lt;p&gt;CloudFront then provided a domain name that could be used to access the distribution.&lt;/p&gt;

&lt;p&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%2F3eu6nf95xwbci9lqlnqt.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%2F3eu6nf95xwbci9lqlnqt.png" alt=" " width="799" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  1️⃣2️⃣ Accessing the Portfolio Through CloudFront 🌎
&lt;/h1&gt;

&lt;p&gt;Finally, I used the CloudFront-generated domain name to access the portfolio.&lt;/p&gt;

&lt;p&gt;The overall deployment flow became:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                User
                  │
                  ▼
            CloudFront
                  │
                  ▼
             Amazon S3
                  │
                  ▼
          Portfolio Website
            ┌─────┼─────┐
            │     │     │
           HTML  CSS    JS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

![ ](https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/ov8u2k3rh31qswoy0h4q.png)

# 🧠 What I Learned

This practical helped me understand several important AWS concepts.

### Amazon S3

I learned:

* How to create an S3 bucket
* How to upload objects
* The difference between a bucket and an object
* How to host static website files
* How bucket policies control access
* How public read access works
* How an S3 website endpoint can be used to access a static website

### Amazon CloudFront

I learned:

* What a CDN is
* Why CloudFront is used
* How to create a CloudFront distribution
* How to configure an origin
* How S3 can be used as a CloudFront origin
* How CloudFront provides a distribution domain name

---

# 🔄 Complete Workflow

The complete process I followed was:

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
Login to AWS&lt;br&gt;
      ↓&lt;br&gt;
Open Amazon S3&lt;br&gt;
      ↓&lt;br&gt;
Create S3 Bucket&lt;br&gt;
      ↓&lt;br&gt;
Upload Image Object&lt;br&gt;
      ↓&lt;br&gt;
Create Portfolio S3 Bucket&lt;br&gt;
      ↓&lt;br&gt;
Upload index.html&lt;br&gt;
      ↓&lt;br&gt;
Configure Static Website Hosting&lt;br&gt;
      ↓&lt;br&gt;
Configure Bucket Policy&lt;br&gt;
      ↓&lt;br&gt;
Access Portfolio using S3 Website URL&lt;br&gt;
      ↓&lt;br&gt;
Open Amazon CloudFront&lt;br&gt;
      ↓&lt;br&gt;
Create Distribution&lt;br&gt;
      ↓&lt;br&gt;
Configure S3 as Origin&lt;br&gt;
      ↓&lt;br&gt;
Deploy Distribution&lt;br&gt;
      ↓&lt;br&gt;
Get CloudFront Domain&lt;br&gt;
      ↓&lt;br&gt;
Access Portfolio using CloudFront&lt;/p&gt;

&lt;p&gt;This practical gave me a hands-on introduction to deploying a static website using AWS.&lt;/p&gt;

&lt;p&gt;I started by creating an S3 bucket and uploading an image object. Then I created a separate bucket for my portfolio and uploaded &lt;code&gt;index.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After configuring static website hosting and the bucket policy, I was able to access my portfolio using the S3 website endpoint.&lt;/p&gt;

&lt;p&gt;Finally, I created an Amazon CloudFront distribution with the S3 bucket as the origin and obtained a CloudFront domain for accessing the portfolio.&lt;/p&gt;

&lt;p&gt;This helped me understand how &lt;strong&gt;Amazon S3 and CloudFront can work together to store, host, and deliver a static website.&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>infrastructure</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
