DEV Community

Cover image for My #CloudResumeChallenge on AWS
Jacques Kellerman
Jacques Kellerman

Posted on

My #CloudResumeChallenge on AWS

Having obtained my AWS Certified Cloud Practitioner and AWS Certified Solutions Architect - Associate certificates, it was time to put the knowledge and skills that I had acquired to use as well as building up a personal project portfolio.

I came across the Cloud Resume Challenge in my research and straight away decided to undertake this project. I joined the Discord server community and researched what needed to be done to complete the challenge.

There are a several stages to the project and it took me just over a week to complete it.

This the architecture.

AWS Architecture

The Website Frontend

I had registered a custom domain name for myself a while back and moved it into a hosted zone on Route 53, ready to use it for this project.

I downloaded a free HTML5 website theme and customized it to reflect my skills and experience. Once ready, I created a S3 bucket on AWS to host a static website and uploaded the files. Once I had verified that the website worked using the S3 bucket website endpoint address, I created a CloudFront distribution and enabled HTTPS using a certificate issued via the AWS Certificate Manager.

Once the CloudFront distribution had been deployed, I updated the DNS records in my hosted zone so that the CloudFront distribution resolved with my custom domain name. I also updated the S3 bucket policy to allow the CloudFront distribution to have access to the bucket.

Website Screenshot

The next step was to make sure that the requirement for a dynamic visitor counter was met by integrating JavaScript code to call the Lambda function via the public API Gateway created in the next section.

The Website Backend

For the backend infrastructure, I made use of the AWS Serverless Application Model (SAM) to generate a framework that created the REST API Gateway, the Lambda function as well as the DynamoDB table. I did contemplate splitting the Lambda function into two, one to update the visitor counter and the other to get the visitor counter but from an efficiencies perspective I kept a single function. I may revisit this in future in keeping with the Microservice ideology.

Backend Code

The Lambda function code was written in Python as well as the test modules.

The resources are created using IaC with CloudFormation to assist with automated deployment. I would like to change this to make use of Terraform in the near future.

Github for source control

Being familiar with Git, I used this for source code control and it made sense as I would be using GitHub Actions to create a workflow that would build, test and deploy the backend to AWS.

Before pushing the code to Git, I made use of SAM to build and test locally in Docker containers.

CI/CD and GitHub Actions

This was probably the most satisfying part of the project but also the most frustrating. It took a lot of trial and error and research to get it working as should. But the best and most satisfying part of it all is making an update on your PC, pushing the changes to Git and having the website application update automatically.

The website can be found here

Next up for me is the AWS Certified SysOps Administrator - Associate and the AWS Certified Developer - Associate Certifications to further improve my skills and knowledge.

Thanks

Thanks go to Forrest Brazeal for creating the #CloudResumeChallenge as well as all the support on the Discord server. Lou Bichard on YouTube also has a great channel for learning - Open Up The Cloud

Discussion (0)

The discussion has been locked. New comments can't be added.