Caveat: The following blog is about a very simple project, however what's important isn't the what/technology. It's the process of understanding requirements and delivering to meet business demands.
We've all heard the classic JFDI (just [something] do it), well you could be forgiven for thinking that it's been given a proper business term M.V.P (minimal viable product). However today's aspiration is agility (small 'a') and to achieve this we focus on delivering a product that requires the least amount of effort whilst still delivering value.
Conception to Live in "8 hours"
So I thought I'd eat my own dog food figuratively speaking. I will be developing and hosting my corporate website in phases which has meant I have built and launched this website in less than 8 hours effort.
Requirements
Let's rewind to the beginning, what are my requirements?
- Corporate website to represent aceIT.
- Low operating costs
- Easy to manage and low management overhead
- DO NOT, repeat DO NOT over-engineer.
- Oh yeah, and it probably makes sense to use the cloud?
I'd thought that mentioning point 4 regarding over-engineering as it's a common challenge in the DevOps arena. There are so many technologies and 'cool' concepts to showcase the art of the possible in the cloud. However let's get back to the point of M.V.P. This was about creating something small that met the above criteria and after careful consideration using a Static website hosted on AWS S3 was the best architecture available that met my requirements.
The Solution
I'm using a small selection of AWS services that have very high availability built in including DNS [Route 53], CDN [Cloudfront] and storage [S3]. For most enterprises you will consider RTO/RPO which encompasses High Availability (HA) and Disaster Recovery (DR) so by using SaaS and PaaS solutions from a cloud vendor you have the added benefits of achieving these with very little to no effort.
The App
To start off with I'm creating a Static HTML website. Why in 2019 would I be doing this? Simplicity. I don't need any server to process dynamic content and I'm running a handful of pages that don't need updated daily.
DNS
Initially I purchased the domain aceit.cloud with NameCheap however strategically I will be moving this domain to AWS Route 53, financially there is very little difference however I can reduce the complexity of domain management billing by integrating the domain renewal into my AWS bill.
As well as hosting the domain in Route 53 I have created a hosted zone (an area which DNS entries live) .
Hosting
I decided that using AWS S3's Static website hosting I could store the entire website in blob storage with no disks to care about and no servers to patch.
CDN
I'm using Cloudfront for three main reasons:
- to distribute static contents cost efficently by using CloudFront in front of an S3 Bucket
- slight performance gain by caching at edge servers than always fetching from S3
- lastly it hides the bucket name being used and therefore reduces the attack surface.
Also by using Cloudfront with AWS Shield this will mitigate against most frequently occurring network and transport layer DDOS attacks. This is not a massive concern for this website as our backend is S3 however it reduces additional accrued costs.
SSL
AWS provides a free public facing SSL certificates for AWS resources (like CloudFront), so this is a no brainer and simplifies certificate management.
Overall Operating Costs
This is the breakdown for monthly operating this website based on 1K visits per month.
DNS - Hosted Zone = $0.50
DNS - Resolution = FREE (1)
Storage - S3 Bucket = $0.01
Storage - Data egress = FREE (2)
CDN - Data egress = $0.10
CDN - HTTPS Requests = $0.02
Total monthly price: $0.63
There is also a yearly domain renewal fee of $12.
1: I won't have to pay for DNS resolution calls as I'll be using CloudFront with an alias A record.
2: Free egress when using S3 as the backend/origin for CloudFront.
What's also key to mention is that albeit I've priced for only 1K visits per month this solution is completely scalable to billions of hits a day thanks to the elasticity of the cloud. 1 Million hits a month the cost would be around ~$130 per month.
Conclusion
It took me just as long to write this post as to design and publish the above solution. The one thing the cloud has enabled us to do is to be more agile. A pay-as-you-go model that brings the technical ability to reach a worldwide audience in days with the change in your pocket compared the yesteryear of large capital expense.
But did I meet my requirements
So let's recap, Corporate website (tick), use the cloud (tick), not over engineered (tick), low operating costs (tick - $0.63 per month), easy to manage (tick, arguable a HTML website isn't slick but it's easy to manage for small footprints).
All Good!
What's Next
There is more to come... including Infrastructure-as-Code (IaC), Route to Live (RTL) and Cloud Security. I will be evolving the architecture of this site (and sharing it) so you can follow the journey and get some insights to adopting the cloud.
If you want some help in adopting the cloud, feel free to reach out to me using the contact details below.