AWS From Scratch
One of the biggest headaches for me in modern computing is the lack of comprehensive and digestable learning resources. A lot of what’s available is somewhere along the spectrum from “so simple as to be practically useless” and “draw the rest of the owl”. Since I’m currently working actively with AWS-based services, I thought I’d put together a small example of working, multi-resource webservice a bit at a time, documenting each stage as I went.
The Project
The Project itself is going to be a very basic web service that utilizes multiple resources. I’ll leverage a basic microservice architecture as well as build out necessary AWS resources like RDS and S3. We’ll discuss some basic technologies like VPCs and IP masks and NAT Gateways and the like along the way.
The ultimate goal isn’t to produce a production-ready webservice that’ll be used by millions. The goal is to explain how modern webservices infrastructures can be architected. We’ll also introduce items such as effective CI/CD-based deployments and reasonable automated testing strategies.
As we go, the project files will be updated on Github. We’ll refer to specific diffs and changes as we go.
The Setup
There are a few requirements to following along as well as a handful of optional installs.
First, you’ll need to have an AWS account. If you don’t already have one, you can readily create one. AWS has relatively generous tiers of free support, but some of the changes that we make may incur minor costs if you’re following along.
Second, you’ll need to download and use the AWS command line interface. If you’re comfortable with Docker, you can just use the Docker-based cli image. For much of this project, we’ll be using that image with a convenience shell script. I find that Docker-based tooling increases consistency in reproduction and reduces the likelihood of conflicts with other tools. I also run a lot of projects locally, so I might be increasing the opportunity for tooling-based conflicts.
Third, I’ll be using VSCode as my primary editing environment. I’ll try to include any extensions that I’m using with the project. VSCode is pretty good and available on the major modern Desktop OSes.
Next Steps
I’m currently poking and prodding a simple CloudFormation-based setup. We’ll begin very simply with firing up an EC2 instance and then growing out from there. We’ll make a lot of changes (and likely ditch the EC2 instance for AWS Lambdas) along the way, but we’ll start with basic concepts and build from there.