惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
G
Google Developers Blog
D
Docker
The GitHub Blog
The GitHub Blog
H
Help Net Security
WordPress大学
WordPress大学
博客园_首页
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
罗磊的独立博客
I
InfoQ
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
Jina AI
Jina AI
J
Java Code Geeks
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Building a Serverless Website on AWS (and GCP)
Dan Phillips · 2026-05-16 · via DEV Community

Dan Phillips

Multi-cloud means understanding that every provider works differently. You only really learn that by actually building on them.

The Cloud Resume Challenge is a project by Forrest Brazeal that asks you to build and deploy a resume site using cloud services. I did it on AWS, then extended it to GCP, and ended up with something that actually touches most of the services you'd use in a real production environment.

What I built

AWS Architecture

The AWS side uses S3 for static hosting, CloudFront for the CDN, Route 53 for DNS, API Gateway and Lambda for the backend API, and DynamoDB for storage. Infrastructure is managed with CloudFormation and SAM. Deployments are automated with Ansible and GitHub Actions.

The GCP side mirrors the architecture: Cloud Storage for static hosting, a Cloud CDN in front of it, Cloud Functions for the backend, and Firestore for storage. That's managed with Terraform.

Frontend

S3 hosts the static files. CloudFront sits in front of it and handles HTTPS, caching, and routing. The S3 bucket is private -- CloudFront accesses it using an Origin Access Control (OAC), so nothing is exposed directly.

Route 53 handles DNS. The site runs on danphillips.cloud.

Backend

The visitor counter is a Lambda function behind API Gateway. It reads and increments a count in DynamoDB, then returns the value to the frontend via a fetch call.

CloudFormation and SAM manage the AWS infrastructure as code. GitHub Actions handles CI/CD -- on push to main, it syncs files to S3 and invalidates the CloudFront cache.

GCP

The GCP implementation uses the same architecture pattern. Cloud Storage hosts the static files, a load balancer with Cloud CDN handles distribution, Cloud Functions replaces Lambda, and Firestore replaces DynamoDB. Terraform manages all of it.

The interesting part is seeing where the two providers diverge. The concepts are the same but the implementation details are different enough that you can't just copy your AWS config and expect it to work.

What bit me

CORS in two places

The API Gateway needs CORS configured, and so does the Lambda function response. Getting one right and missing the other wastes a lot of time.

Regional vs Edge endpoint attributes

CloudFormation attribute names differ depending on whether you're using a Regional or Edge-optimized API Gateway endpoint. Use DistributionDomainName instead of RegionalDomainName, or CertificateArn instead of RegionalCertificateArn, and your deployment breaks in non-obvious ways.

Never manually delete CloudFormation resources

I did this once. The stack drifted and subsequent deployments failed. The only fix was deleting the whole stack and redeploying. CloudFormation manages its own state, don't touch resources outside of it.

Check .gitignore before your first commit

I committed vault files with credentials. Had to scrub them from git history. Won't happen again.

What I'd do differently

Automate CloudFront cache invalidation from the first deploy, not as an afterthought. Use OAC over OAI from day one since OAI is the legacy option. And set WWW as the primary domain upfront -- it keeps your bucket structure clean and leaves the apex free for subdomains.

Worth doing?

Yes. One project that touches storage, CDN, serverless compute, a NoSQL database, DNS, IaC, and deployment automation is genuinely useful for understanding how AWS services connect in a real architecture. For a job search it's something concrete you built and can walk through, not just another cert.


Full project on GitHub with AWS and GCP implementations, CloudFormation templates, Terraform config, and Ansible playbooks: danphillips-cloud/danphillips-aws