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:
- 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
- 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.
- 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.
- 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.