Building a Static Website on AWS
Context
This project was built to host a fast, secure and globally distributed static website on AWS. It is used in production to serve this website.
Key constraints:
- Keep the architecture simple and low cost
- Serve the site securely over HTTPS
- Minimal maintenance overhead
Architecture
User requests are routed through Route 53 to a CloudFront distribution, which serves cached content from an S3 bucket. ACM provides the SSL certificate used for HTTPS delivery via CloudFront.
This setup keeps the architecture simple while using managed services for storage, delivery and DNS, reducing operational overhead compared to managing a server.
Key Decisions
Use CloudFront in front of S3
Why: This improves performance through caching, enables HTTPS delivery, and allows the S3 origin to remain private instead of exposing a public bucket.
Trade-off: It adds another layer to configure compared with serving directly from S3.
Use Route 53 for DNS
Why: It integrates cleanly with AWS resources and makes domain routing straightforward.
Trade-off: It keeps DNS management inside AWS rather than using an external provider.
Challenges
S3 access and CloudFront permissions
Resolving 403 Access Denied errors caused by misaligned bucket policy and CloudFront Origin Access Control configuration
HTTPS and custom domain setup
Configuring ACM, CloudFront and Route 53 in the correct order to enable certificate validation and domain routing
Cost
Estimated monthly infrastructure cost: ~$0.50 USD (excluding taxes, based on AWS Pricing Calculator and current usage)
Additional cost:
Outcome
The result is a production-ready static website hosted on AWS with secure HTTPS delivery and global content distribution.
- The site is simple, fast and low maintenance
- The project gave me hands-on experience connecting core AWS networking and hosting services
Next Steps
Expand the site with additional project pages, refine the design, and continue building and documenting real AWS systems with clear architecture diagrams.