Learning Recap · July 2026

Hosted oneops.site
on AWS. Here's what I learnt.

S3 · CloudFront · ACM · Route 53 ✓ Live at oneops.site ~$1.50 / month

End-to-End Architecture

Every layer of the stack, from browser to file — no servers, no EC2, fully managed.

🌐
GoDaddy
Domain Registrar
REGISTRAR
NS records → awsdns
🔀
Route 53
ALIAS @ → CloudFront · CNAME www
DNS
HTTPS request
☁️
CloudFront
CDN · HTTPS · OAC · Global Edge
CDN
OAC auth request
🔐
ACM Certificate
Free SSL · us-east-1 · DNS validated
SSL
private bucket access
🪣
S3 Bucket
www.oneops.site · Block Public Access ON
STORAGE

What Each Service Does

Key learnings and the gotcha I hit on each one.

🪣 Amazon S3
Static file storage — no server needed
Bucket name must exactly match the domain. Block Public Access stays ON — S3 is never exposed directly. OAC lets CloudFront fetch files privately using signed requests.
⚠ Gotcha
Forgetting to set Default Root Object = index.html causes AccessDenied even when everything else is correct.
☁️ CloudFront
CDN + HTTPS + global edge delivery
Sits in front of S3, serves files from edge locations worldwide. Enforces HTTPS, terminates SSL, and uses OAC to talk to S3 privately. Alternate domain names must list every domain it serves.
⚠ Gotcha
Picking S3 from the dropdown sets the wrong origin endpoint. Always type the regional endpoint manually: bucket.s3.region.amazonaws.com
🔐 ACM
Free SSL certificate — auto-renewing
Provisions free TLS certificates validated via DNS. Once the CNAME records are added, validation completes in minutes. Certificate auto-renews — no manual action ever needed.
⚠ Gotcha
Certificate must be requested in us-east-1 regardless of bucket region. CloudFront is global and only reads ACM certs from N. Virginia.
🔀 Route 53
AWS-native DNS with ALIAS on root domain
Hosted Zone = DNS control panel ($0.50/month). ALIAS record on root domain points directly to CloudFront — no forwarding hack. Nameservers updated in GoDaddy to delegate DNS to Route 53.
⚠ Gotcha
GoDaddy cannot ALIAS a root domain. This is why Route 53 was needed — ALIAS records on @ are a Route 53 superpower.
🌐 GoDaddy
Domain registrar only — DNS fully delegated
GoDaddy now only holds the domain registration. All DNS is managed by Route 53. The locked A records (15.197.x.x) were GoDaddy's own forwarding servers — controlled via Forwarding settings, not DNS.
⚠ Gotcha
The WebsiteBuilder A record GoDaddy adds by default blocks everything. Always delete it first when setting up a new domain.
🛡️ OAC
Origin Access Control — secure S3 access
OAC replaces the old OAI method. CloudFront signs every request to S3 using SigV4. The S3 bucket policy must reference the exact CloudFront distribution ARN to allow those signed requests through.
⚠ Gotcha
After creating the CloudFront distribution, AWS shows a banner with the bucket policy to copy — easy to miss. Without it, OAC requests are denied.

Bugs I Hit & How I Fixed Them

Real errors from the actual deployment, not hypotheticals.

Error 1 — AccessDenied XML
CloudFront returned AccessDenied instead of the site
Root cause: Default Root Object was not set, so hitting / had no file to serve.
Fix: Set Default Root Object = index.html in CloudFront General settings.
Error 2 — GoDaddy "Launching Soon"
Root domain showed GoDaddy placeholder instead of my site
Root cause: GoDaddy's WebsiteBuilder A record was still active on @.
Fix: Deleted the WebsiteBuilder A record, updated www CNAME to point to CloudFront.
Error 3 — Locked A Records
GoDaddy wouldn't let me delete the A records pointing to their servers
Root cause: Those IPs (15.197.x.x) are GoDaddy's forwarding infrastructure — managed separately.
Fix: Configured the forwarding destination via Domain Settings → Forwarding, not DNS Manager.
Error 4 — www works, root doesn't
www.oneops.site worked but oneops.site didn't
Root cause: GoDaddy can't ALIAS a root domain — no way to point @ directly to CloudFront.
Fix: Migrated DNS to Route 53, used a native ALIAS A record on the root domain.

What This Maps To

Industry-relevant DevOps skills from this single hands-on project.

S3 + CloudFront + OAC setup
Secure static site architecture
ACM certificate provisioning
TLS/SSL lifecycle management
Route 53 hosted zone + ALIAS
Production DNS management
Debugging AccessDenied errors
Cloud IAM & permissions
DNS propagation monitoring
Network & infra operations
CloudFront cache invalidation
CDN & release management
GoDaddy → Route 53 migration
DNS cutover & migration
OAC bucket policy configuration
AWS IAM policy authoring

Monthly Cost of This Stack

Production-grade infra at near-zero cost.

Amazon S3
$0.00
Free tier — 5GB storage
CloudFront
$0.00
Free tier — 1TB transfer
ACM Certificate
$0.00
Always free + auto-renews
Route 53
$0.50
Per hosted zone / month
GoDaddy Domain
~$1.00
Amortised monthly
Total / Month
~$1.50
Globally distributed HTTPS site