AWS Cloud Resume Challenge
Tags: aws, cloud, serverless
Published: 2021-12-29 01:08:09

I came across the [Cloud Resume Challenge](https://cloudresumechallenge.dev/docs/the-challenge/aws/) by @forrestbrazeal while searching for resources to prepare for my AWS Certified Cloud Practitioner exam. Up till this point, I didn't have much exposure to the cloud or anything regarding IT or software since I just switched my major from Finance to Information Systems. I needed something big on my resume to make me competitive during internship season. So, I decided to take the leap and commit what I thought would be a few days to the challenge (It took six weeks). Checkout my [site here](https://www.mrcloudresume.com/) and my [GitHub](https://github.com/mohrav723).

**How I Did It**


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2u8at2kqoqu8kz3itzg.png)

The first step of the challenge states that I need to have the AWS Cloud Practitioner Certificate on my resume. I was already in the process of preparing for it, so I didn't have to invest additional time exclusively for the challenge. I used the basic 6-hour course provided by AWS themselves and A Cloud Guru's Practice exams to prepare. I passed after ~20 to 25 hours of study. 

**Front-End**

I used a basic HTML and CSS resume template I found online and modified it with my information. I found out HTTP links would not work with my some of the services, so I had to redo my entire site with a HTTPS link in my CSS. I also built a view counter using JavaScript. The count, however, would not be accurate since my back-end is not deployed yet.

Next, I uploaded the file to an S3 bucket, which then connects to a CloudFront repository. I bought a custom domain using Route53 and Certificate Manager for a SSL certificate indicating my site is secure. 

**Back-End**

I started off by using the AWS console to deploy my back-end services to understand how these services work. I deployed  DynamoDB with an ID and value of 1, then a Lambda function to increment my value each time it gets triggered. Initially, I deployed two lambda functions, one to read and one to write. However, this made my architecture unnecessarily complicated and created a lot of issues with API Gateway. 

Next, I created a RESTful API through API Gateway. If you are following along, make sure to activate CORS to avoid errors when you make API calls from your website. Upon activation, you should get an 'OPTIONS' method. I connected my API to my Lambda function and used Postman to test and make calls. 

Finally, I integrated my API with my JavaScript code for counter using the 'POST' method for API calls. Everything looks like its done and the website is ready to go, however, it is not. 

**Infrastructure-As-Code**

The challenge says to use AWS SAM in this part of the challenge, however, I decided to use Terraform since it is more widely used in the industry. Terraform also has great documentation which helped out a ton during the process. When I coded my entire back-end in Terraform, API Gateway threw multiple CORS issues my way and this time, it was a lot harder to get around this since there is no 'Turn-on CORS' button. This is where I spent the most amount of time in the whole project ~25-30 hours. I learnt that using modules to turn on CORS leads to some complicated issues and solving them leads to even more issues and so on. As frustrating as it was, this was also the most exciting part of the challenge.

**CI/CD**

I uploaded my front and back-end in separate GitHub repositories and used GitHub actions for building CI/CD pipelines. Now my site will update upon a push from my IDE.  I also took advantage of branches to see if my new code is compatible with my main code. I stored my credentials as GitHub secrets for my front-end and created a workspace in Terraform Cloud to store credentials for my back-end. After more than 100 grueling hours of work, I finally completed the Cloud Resume Challenge.

**Conclusion**

Through this project, I have gained a tremendous amount of knowledge of cloud services and also some basic JavaScript knowledge. Now I finally have something that I can put down on my resume and show hiring managers during interviews, although it has turned into something much more than that. In the near future, I plan to replace my CI/CD pipelines using Docker, Jenkins, and Kubernetes and continue fine-tuning my project. I also plan to pursue the AWS Solutions Architect - Associate certification. I recommend this project to anyone who is looking to get exposure to cloud services, especially for college students like myself looking to get exposure to real life work projects. I believe beginners and professionals alike will come out with more.