Welcome! What you're seeing right now is the end result, the culmination, and the visual facade of a full-fledged production ready system. This project deploys a host of AWS infrastructure as well as everything you're seeing via a CI/CD pipeline directly to the cloud.

This project's purpose has been to push my skills beyond where I've gone before, and of course - to show you, the reader, a portion of my IT skill set. It's been a fun journey for me and I'm excited to show you where it's taken me. So, stick around and have a scroll through; and, if you have any feedback, feel free to contact me.

Technologies Used


CI/CI Tools Purpose
Terraform Defines and manages all AWS infrastructure as code
Git Version control for the project which is hosted on Github
GitHub Actions CI/CD platform - automates the build, test, and deployment processes
AWS Technologies Purpose
AWS IAM Access & permissions management
AWS IAM OIDC Securely provides temporary AWS access tokens to GitHub Actions
AWS S3 Storage container for this website's content, and for Terraform state files
AWS Certificate Manager Provisioning SSL certificate for nathanrichardson.dev
AWS Route 53 DNS for nathanrichardson.dev
AWS CloudFront CDN for nathanrichardson.dev
AWS DynamoDB Stores and logs the number of visitors to the website
AWS API Gateway Serves the API endpoint used for logging website visits
AWS Lambda Serves the backend logic for the above mentioned API endpoint
Languages Purpose
HCL HashiCorp Configuration Language - used in Terraform configuration files
Python Defines and manages all AWS infrastructure as code
JavaScript Visitor count logic for the website
HTML & CSS Website content and styling
Bash Used for Git CLI

Digging Deeper


A deeper explanation of the project and it's working parts. Coming soon...

In the meantime - please feel free to check out my public GitHub repository, where you'll find the entirety of the project available for your inspection.

TODO:


One of my main objectives for this project has been to design it with a production ready mind-set, however, I have afforded myself some freedoms to best serve my learning process.

Here's my personal list of changes I'm intending to align the project further with what I'd want in a true production system:

  1. Write unit tests for the Python & JavaScript code. The pipeline is currently missing unit tests for the Python lambda functions and the JavaScript code on the website
  2. Split the Terraform configuration files into logical components. The configuration has grown greatly over the course of the ever-expanding scope of this project, and is needing some clean restructuring.
  3. Standardise the naming convention for Terraform resource IDs used across the project. There's currently an inconsistency in the naming due to my styling changing along the way as I increased my familiarisation with Terraform.
  4. Design a solution for managing the IAM role used by the OIDC integration with GitHub Actions. The permissions for this role are currently managed directly via the AWS console.