My Cloud Resume Challenge
Tags: aws, cloud, serverless, html
Published: 2021-03-25 21:15:56


My blog

I am a continuous learner seeking a new position in the Cloud! I come from a Logistics and Sales background. Once upon a time I was devoted to all things tech and lost my way over the years. But I have rediscovered my passion and found a new challenge - the cloud! I have spent a lot of time honing my skills in programming, and as a result I've learned to become a Python expert. My other coding skills lie in HTML/CSS/JS and bash. 

After I felt comfortable with programming I moved my attention to the cloud (AWS specifically). Through hard work I achieved my AWS Cloud Solutions Architect Associate certification! After doing so I found many discussions on different forums about the Cloud Resume Challenge by Forrest Brazeal (Cloud Architect, AWS Serverless Hero). 

For Details: https://forrestbrazeal.com/2020/04/23/the-cloud-resume-challenge/

Unfortunately I had already missed the cutoff for the challenge but I decided it would be a great showcase of my AWS competency.  
As for the challenge itself...

**AWS Certification**

I decided on self-study instead of taking the Cloud Practitioner exam. Instead I studied for and achieved an AWS Certified Solutions Architect Associate certification (March 2021). Currently, I am preparing for AWS Developer Associate certification, followed by CSA Professional and DevOps Professional certification

**Front-End HTML/CSS/JS**

Creating the HTML/CSS Resume is the easiest part of the challenge and requires an intermediate level to finish. I tried to make the resume as easy on the eyes as possible. 

I added some basic CSS with flexbox and inline block. I also ensured that the page is both desktop and mobile friendly using media queries.

I purchased a domain for the site using AWS and created an S3 bucket matching my website.

Using CloudFront/Route 53 and AWS Certification Manager(ACM), a SSL certificate was created. Route 53 was setup as the DNS provider and CloudFront as the CDN. I created redirects for HTTP and ensured that naked addresses would still work. (www.stevenconnollyweb.com, stevenconnollyweb.com etc). 

**Back-End**

The back-end infrastructure is composed of API Gateway, Lambda and DynamoDB. All of which is needed to update and retrieve the website hits from the DynamoDB table. 

A simple DynamoDB table with one item to store and update the visitor count was created using the atomic counter feature in DynamoDB. Lambda was required to communicate with the table.

AWS Lambda is great! I love the idea of anything serverless. It removed a lot of hurdles when trying to execute simple scripts. The challenge required a Python Lambda which really worked out well for me. I would've struggled more with this if it required NodeJS or another language. So this part was a breeze. The function queries the DynamoDB table and updates the visitor count item. 

An AWS API Gateway was needed to communicate with the Lambda.  The API Gateway manages APIs to AWS systems. As far as choices for an API Gateway, a REST API was chosen (An HTTPS API Gateway has limitations and wouldn't allow Lambda). The API Gateway is called by the inline JavaScript snippet on the webpage. Every reload or visit will update the vistor count on the bottom of the page. Enabling CORS (Cross-Origin Resource Sharing) on the API Gateway resource is a necessary step when communicating between the JS script and API Gateway.

**Infrastructure as Code**

At first, understanding IaaC was a bit difficult. Once you get the hang of it though...what a timesaver! I am quickly becoming very found of YAML and setting up templates becomes easier with each attempt. I started by creating simple templates and slowly added in each resource and permission. AWS SAM (Serverless Application Model) templates and using the AWS CLI went smoother than I expected. After launching, a few tests on the API Gateway confirmed it was all working! Success! Studying for the Developer Associate certification really helped for this section of the challenge. SAM template design below... ![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6h21z0b6dy452y0obdw6.png)

**CI/CD**

The Cloud Resume challenge requires a CI/CD pipeline using GitHub. Private repositories were needed to be created for both the front and back end. Using GitHub Actions, you can easily integrate GitHub with AWS for CI/CD. Using GitHub actions was a first for me, so learning it was fun! Being a relatively new developer I don't use GitHub as often as I should. As I improve I'll be sure to use more CI/CD in the future. Very convenient, but my preference is to use AWS CodeCommit because of its integration with AWS services. GitHub was used so Forrest Brazeal could share private access to look at your code. GitHub Actions was used to setup the AWS credentials, deploy S3 bucket changes, and invalidating the old files using CloudFront. The back-end repo was used to store the python code, python tests and SAM codes. GitHub Secrets was used for both repos to secure the environments.


And the last requirement? A blog post explaining my process! Hope you enjoyed it. 

**Feel free to check out my resume www.stevenconnollyweb.com**