DEV Community

Uwais
Uwais

Posted on

How I Built a Serverless Resume on AWS (Cloud Resume Challenge Project)

# How I Built a Serverless Resume on AWS (The Cloud Resume Challenge)

The Cloud Resume Challenge is a practical way to move beyond tutorials and build a real, production-style cloud project. It forces you to design, deploy, and connect multiple AWS services into a working system.

This post breaks down the architecture, implementation, and key issues I ran into while building a fully serverless resume website on AWS.

---

## 🏗️ Architecture

The system is fully serverless and designed for low cost and scalability:

S3 (Frontend) → CloudFront → API Gateway → Lambda → DynamoDB

### Components

1. **Frontend (S3)**
   - Static resume site built with HTML/CSS
   - Hosted in an Amazon S3 bucket

2. **CDN (CloudFront)**
   - Distributes content globally
   - Provides HTTPS and caching for performance

3. **Database (DynamoDB)**
   - Stores a single visitor counter item
   - Enables persistent, atomic updates

4. **Backend (Lambda)**
   - Python function using `boto3`
   - Reads, increments, and returns visitor count

5. **API Layer (API Gateway)**
   - Exposes `/getcount` endpoint
   - Connects frontend requests to Lambda

6. **CI/CD (GitHub Actions)**
   - Automatically deploys frontend updates to S3
   - Invalidates CloudFront cache after deployment

---

## 🧠 What I Learned / Challenges

### 1. CORS Configuration Issues
The browser initially blocked API requests due to CORS restrictions.

**Fix:**
Configured API Gateway to allow:
- Origins
- Methods (`GET`, `OPTIONS`)
- Headers

This allowed the frontend to securely call the backend API.

---

### 2. Git History Conflicts
Changes made locally and via GitHub web editor caused non-fast-forward errors.

**Fix:**
```bash
git pull origin main --rebase
Enter fullscreen mode Exit fullscreen mode

This aligned commit history and resolved the conflict cleanly.


3. CloudFront Caching Delays

Frontend updates were not visible immediately due to cached CloudFront content.

Fix:
Added a GitHub Actions step:

aws cloudfront create-invalidation --distribution-id <ID> --paths "/*"
Enter fullscreen mode Exit fullscreen mode

💡 Key Takeaways

  • IAM least-privilege design

    • Lambda only accesses required DynamoDB resources
  • Serverless architecture design

    • No servers to manage, only managed services
  • Frontend-backend integration

    • Static site enhanced using API calls
  • Automation-first mindset

    • Deployments handled entirely through CI/CD pipelines

🔗 Project Links


📌 Closing

This project demonstrates how multiple AWS services can be combined into a simple but production-style serverless application. It was less about building a resume site and more about learning how real cloud systems are structured.

Enter fullscreen mode Exit fullscreen mode

Top comments (0)