How I Made My First Static Website Using Amazon S3 (As an AWS Beginner)

Kaustav DeyKaustav Dey
4 min read

Not too long ago, I decided to start learning AWS. It seemed like one of those things everyone in tech was talking about — but also kind of intimidating. There’s a ton of services, acronyms flying around, and a whole dashboard that feels like a cockpit. So I thought: Why not start small? Let’s just get a simple website live using one AWS service.

That’s how I ended up making my very first static website using Amazon S3. If you’re also just getting into AWS, this post is for you.

🧠 Why Amazon S3?

Amazon S3 (Simple Storage Service) is basically cloud storage — you can upload files and access them from anywhere. But what I didn’t know at first is that you can actually host a static website with it. That means if your site is just HTML, CSS, and maybe some JavaScript — no backend stuff — you can host it on S3 without spinning up a server.

It sounded perfect for a beginner like me. No DevOps. No EC2. No headaches.

💻 Step 1: Building a Simple Website

I kept it super minimal. No frameworks, just plain HTML and CSS. Here’s what I used:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>My First AWS Site</title>
</head>
<body>
  <h1>Hello, AWS!</h1>
  <p>This is my first static site hosted on S3.</p>
  <img src="output.jpg">
</body>
</html>

output.jpg

That’s it. Two files. Just enough to test the process.

☁️ Step 2: Creating the S3 Bucket

Here’s where the AWS part begins:

  1. Logged into the AWS Management Console.

  2. Searched for S3 and clicked Create bucket.

  3. Gave it a unique name (S3 bucket names are globally unique).

  4. Unchecked “Block all public access” (important! Otherwise, no one can view your site).

  5. Then I added a policy to only ensure my s3 object could read the stuff stored in it.

  6. Created the bucket.

The policy I used is below. Just place the unique name of your bucket in ‘Bucket-Name’

{
    "Version": "2012-10-17",
    "Statement": [
     {
         "Sid": "PublicReadGetObject",
         "Effect": "Allow",
         "Principal": "*",
         "Action": [
             "s3:GetObject"
         ],
         "Resource": [
                "arn:aws:s3:::Bucket-Name/*"
         ]
     }
    ]
}

At this point, I had cloud storage ready to go.

🌐 Step 3: Enabling Static Website Hosting

Inside the S3 bucket:

  • I clicked on the Properties tab.

  • Scrolled down to Static website hosting.

  • Enabled it and set index.html as the index document.

  • AWS gave me a URL. This would be the live address of my site.

But first, I had to upload the files and make sure they were public.

📤 Step 4: Uploading and Making Files Public

  • Went to the Objects tab.

  • Uploaded both index.html and style.css.

  • After uploading, I selected each file, clicked Actions > Make public.

(Note: You can set a bucket policy to make everything public automatically, butif you want you can stick with manual for now — it felt safer while learning.)

🔗 Step 5: Visiting My Site

With everything uploaded and public, I went back to the static hosting section in Properties and copied the Endpoint URL.

I pasted it into my browser, and boom — it worked. My little website was online. No servers, no deployment tools. Just files in a bucket.

🔍 What I Learned

  • AWS can feel like a lot, but starting with one service (like S3) makes it manageable.

  • Hosting a static site doesn’t need to be complicated.

  • Public access settings are a key part of getting S3 hosting to work.

  • The feeling of getting a website live — even a basic one — is honestly really satisfying.

✅ Final Thoughts

This was my first actual hands-on experience with AWS, and it went smoother than I expected. Sure, I had to Google a few things (especially around permissions), but I came away feeling a little more confident in navigating the AWS ecosystem.

If you’re new to AWS and wondering where to begin — host a static website on S3. It’s simple, useful, and gives you a nice win early on.

Next up for me? Maybe setting up a custom domain, adding HTTPS with CloudFront, or playing with Lambda. But for now, I’m just happy that I took the first step.

0
Subscribe to my newsletter

Read articles from Kaustav Dey directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Kaustav Dey
Kaustav Dey