How to power your resume using AWS
Tags: aws, devops, github, python
Published: 2020-06-03 05:23:44

I was looking for AWS projects I could to do to add to my portfolio and I came across the Cloud Resume Challenge created by Forrest Brazeal. If you complete the challenge, Forrest may review your code and use his network to help get you in front of potential employers. After looking at the list on his [site] (https://cloudresumechallenge.dev/instructions/) I was up for the challenge!

Here's my rundown and experience with this challenge:

You have to have the AWS Cloud Practitioner Certification on your resume with a validation code: I'm AWS certified so I added a link to the validation in the HTML code of the resume.

Resume has to be written in HTML: I am by no stretch an expert in HTML, so I found a nice resume created by [Sonja Strider](https://www.sonjastrieder.com/) and used that as a template for my resume. 

Resume has to be styled in CSS: Thanks to Sonja, her resume already contained CSS styling. Once I had my code together, I created repositories in GitHub so that I could begin source controling my code.

Use a static S3 website to host your resume: I added permissions on the bucket so that static site can be accessed from the web, enabled static web-hosting, uploaded my HTML and CSS files to my S3 bucket, and I'm almost to the web!

Site must use HTTPS for security: I used AWS Certificate Manager to request and receive a SSL certificate to secure my website.

Point a custom DNS domain to a CloudFront distribution, so your resume is accessible from the web: I created my CloudFront distribution, added my certificate from Certificate Manager, used Route53 for DNS and to create the domain for my website. The domain cost $12 and is good for one year. I'm on the web!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/qq8e9gkdh5d9i0e5g0me.png)

The resume should have a counter that displays how many people have viewed your site: I used codepen while writing my JavaScript code and to make sure the the site looked how I wanted. For the sake of the challenge, I won't show the code. No visitors (yet)!!!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/c8zae015sqrqrssu2v4z.png)

Store the visitor count in DynamoDB: I created a DynamoDB table that used a primary key and some attributes for my count. Gotta get some visitors!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bazlgvj1rhg6fxp1g9jj.png) 

Create an API that takes requests from the website and talks to DynamoDB: So, I create an API in API Gateway that uses a GET method to  pull the count from a Lambda function. The same API is used with my JavaScript code to display my count. Yay! My API and Lambda work!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/e63vq56ywdq0m8fh1gys.png)

Write a Lambda function in python to use with your API and DynamoDB: I wrote a Lambda function that returns the values of primary key and attribute from DynamoDB and passes those values to the API so that it can be used for the visitor count in my JavaScript code.
I have some visitors!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/v0lihpzg7q81y498x406.png)

Python code should have some tests: I am still working on creating actual testing for my lambda function and JavaScript code. Maybe a follow-up in a future post?

Define the DynamoDB table, API Gateway, and Lambda function as infrastructure as code: I wrote an AWS SAM template for the API, DynamoDB, and Lambda resources as well as the associated permissions and added a few outputs on the template. Can't give away too much!

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lgmups9pmygruumzzztr.png)

Create source control for front-end and back-end code: I used GitHub for my source repository and created two private repositories. 

Use GitHub Actions so when you push an update to your SAM template or Python, your tests are run. If the test pass, the SAM template gets packaged and deployed to AWS: I am still working on the tests. However, I had never used GitHub actions before this challenge so I decided to learn how to use it. GitHub actions can be used to create workflows and CI/CD pipelines for your code. After reading the documentation and running a few examples, I was able to create a workflow that creates a change set in CloudFormation and updates my back-end resources whenever I push a commit to the master branch. Here's a successful workflow after pushing a commit.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/viaj9gbibsyaghpipnqx.png)

Use GitHub Actions to push code automatically to S3: I was able to create two workflows with GitHub actions to not only push the code automatically to S3, but also invalidate my CloudFront distribution so I didn't have to do it manually from the console. Sounds like a win/win to me!

Overall, this was a great challenge that immerses you in the cloud, code, and CI/CD. Not to mention, you could end up with a pretty cool looking resume. Thanks again to Forrest Brazeal for making this challenge and I am really excited about getting more into the cloud!

[Final product](https://codeandtechresume.com/).