Week 1 is done and my resume is live on the internet! 🎉
In my last post I introduced the Cloud Resume Challenge. This time I'm documenting exactly what I did, step by step i.e. the decisions I made, the gotchas I hit, and what I learned along the way.
If you're following along or planning to do the challenge yourself, hopefully this saves you some time.
What was the goal for Week 1?
Build a resume as a static website and get it properly live on AWS. Not just thrown on a free hosting platform properly, with a CDN, HTTPS, and cloud infrastructure. Specifically:
- ✅ HTML & CSS resume page
- ✅ Code stored in GitHub
- ✅ Hosted on AWS S3
- ✅ CloudFront distribution in front of it
- ✅ HTTPS via SSL certificate
- ✅ Resume live and accessible on the internet
Step 1 — Building the Resume in HTML & CSS
I built my resume as a plain HTML page with a separate CSS file. The challenge is about cloud skills, not front-end wizardry, so I kept it clean and professional without overcomplicating it.
The files ended up being:
-
index.html— the resume content -
styles.css— the styling
Once done I pushed both files to a GitHub repository which will be home base for the entire project going forward.
💡 *Tip: * Name your main file
index.htmlfrom the start S3 static website hosting looks for this file by default when someone hits your URL.
Step 2 — Creating the S3 Bucket
I went to AWS S3 and created a General Purpose bucket in the ap-south-2 (Hyderabad) region and named it priyanka-cloud-resume-challenge.
A few things to note when creating the bucket:
- Leave all default settings for now
- Block all public access will be ON by default — that's fine, we'll change it shortly
- Don't worry about any other settings at this stage
Step 3 — Enabling Static Website Hosting
This is what tells S3 to serve your files as a website rather than just storing them.
- Click into your bucket → Properties tab
- Scroll down to Static website hosting → click Edit
- Select Enable
- Set Index document to
index.html - Save changes
At this point S3 gives you a bucket website endpoint URL — something like:
http://priyanka-cloud-resume-challenge.s3-website.ap-south-2.amazonaws.com
Hold onto this — you'll use it to test in a moment.
Step 4 — Uploading the Files
Still inside the bucket:
- Go to the Objects tab
- Click Upload → Add files
- Select both
index.htmlandstyles.csstogether - Click Upload
Both files go into the same bucket — simple and clean.
Step 5 — Making the Bucket Public
By default S3 blocks all public access. Since this is a public resume website, we need to open it up.
First — turn off Block Public Access:
- Go to Permissions tab
- Click Edit on Block public access
- Uncheck "Block all public access"
- Save → type
confirmwhen prompted
Then — add a Bucket Policy:
- Still on Permissions tab → scroll to Bucket policy → Edit
- Paste this policy (replace the bucket name with yours):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::priyanka-cloud-resume-challenge/*"
}
]
}
- Save changes
Now visit your bucket website endpoint URL — your resume should load! 🎉
Step 6 — Setting Up CloudFront
S3 hosting works but it has limitations — no HTTPS, slower for global visitors, and the URL is ugly. CloudFront fixes all of this — it's AWS's CDN (Content Delivery Network) that sits in front of S3 and serves your content from edge locations worldwide.
Here's how I set it up:
- Go to CloudFront in AWS Console → Create Distribution
- For Origin, select your S3 bucket
- When prompted — choose "Use website endpoint" (important!)
- Skip WAF or leave default basic protection
- Leave all other settings as default
- Click Create Distribution
CloudFront takes about 5-10 minutes to deploy globally. Once the status changes from Deploying to Enabled, you'll see your CloudFront domain name:
https://d1234abcd.cloudfront.net
💡 Why "Use website endpoint"? Because we enabled Static Website Hosting on S3, the website endpoint already knows to serve
index.htmlby default. Using the S3 bucket directly instead can cause routing issues.
Step 7 — Testing HTTPS
This is the satisfying part. Open your CloudFront URL with https://:
https://d1234abcd.cloudfront.net
You should see:
- ✅ Your resume loading perfectly
- ✅ A 🔒 padlock in the browser address bar
- ✅ SSL certificate provided automatically by CloudFront
No extra SSL setup needed — CloudFront handles it automatically!
What about the custom domain?
The challenge officially requires a custom domain name registered
in Route 53. I'm skipping this for now and will add it at the end
once everything else is built.
A few reasons:
- All the real learning — Lambda, DynamoDB, CI/CD — happens without needing a domain
- I want to complete the full challenge end to end first
- I'll add the domain as the final step to officially wrap it up
I'd rather get the full architecture working first and add the
domain at the end. I'll document it when I get there! 😊
What I actually learned this week
- S3 is not just file storage — it can host entire websites without a server
- Bucket policies control access — understanding the JSON structure matters
- CloudFront vs direct S3 — always use CloudFront for production; direct S3 has no HTTPS and is slower
- "Use website endpoint" matters — small setting, big difference in behaviour
- The cloud resume is a real project — not a tutorial you follow blindly, you actually make decisions
Architecture so far
Browser → (HTTPS) → CloudFront (CDN + SSL + Cache) → S3 Bucket (index.html + styles.css)
↑ d1234abc.cloudfront.net ↑ ap-south-2 (Hyderabad)
Simple but real cloud architecture. Week 2 adds Lambda, DynamoDB and API Gateway on top of this.
What's next?
Before moving to Week 2 I'm spending the rest of this week on some of the optional Mods from the challenge book:
- DevOps Mod — setting up GitHub Actions CI/CD to auto-deploy on every push
- AI Engineer Mod — adding an LLM resume summarizer using Amazon Bedrock
Each mod will get its own post — stay tuned! 🚀
Resources that helped
Part of my Cloud Resume Challenge series. Read Post 1 here
Top comments (0)