My Cloud Resume Challenge Path
Tags: cloud, devops, beginners, azure
Published: 2023-02-01 21:10:25

## About Me
I've been in IT for about 5 years now, starting out as a Desktop Support Intern and moving up to System Engineer. I've focused on automation and scripting since nearly day 1.

With Cloud becoming such a large part of the industry, I decided to build my skills in Azure. As of this writing I have no certs, but plan on taking the AZ-900 in the next month.

But anyone can learn the material on certs, and I wanted something practical to show my knowledge and make something useful. So I started on the Cloud Resume Challenge by Forrest Brazeal.

## The Cloud Resume Challenge

The cloud resume challenge is a project that requires you to build and host an HTML version of your resume in your favorite cloud provider, using server-less infrastructure.

The challenge guidebook is broken up into several chunks as follows:

* Chunk 0. Certification Prep
* Chunk 1. Building the front-end
* Chunk 2. Building the API
* Chunk 3. Front-end / back-end integration
* Chunk 4. Automation (IaC, CI/CD)

I will admit that I did these chunks slightly out of order, with the certification coming last. The reason for this was just that I already had some of the base level knowledge the AZ-900 would teach, and anything I didn't already know I could learn while doing the project.

This was seemingly a correct assumption on my part, as the practice tests I took for it were passed easily. I am waiting for a Microsoft Virtual Training day to get a free test voucher before sitting the test.

The website can be found [here](https://www.zachchism.com/), and the github repository associated can be found [here](https://github.com/zachchism/Cloud-Resume-Project).

**Chunk 1: Building the front end**
###Skills: HTML/CSS, Git, Azure Storage, Azure CDN, DNS

For this chunk, you are to write an HTML version of your resume, style it with CSS, and deploy it to an Azure Storage Static Website. It will also need an Azure CDN for HTTPS, and a custom domain/DNS name.

For this chunk, I went with a simple website. I was fairly inexperienced with HTML and CSS, so this took a bit. The code for the website is in a GitHub Repo as well. I bought a custom domain via CloudFlare, and used their DNS to resolve it to my online resume.

**Chunk 2: Building the API**
###Skills: Azure Function, Python, CosmosDB

In this chunk, you build the back-end of the app via an Azure Function written in Python. It is an API that points to the CosmosDB that contains the Visitor counter.

I already had a bit of experience with Python and a lot of experience with scripting in general, so this part wasn't too hard.

**Chunk 3: Front End / Back End Integration**
###Skills: JavaScript, Cypress, Cloud Monitoring

Chunk 3 took a fair bit to figure out. I was unfamiliar with asynchronous code up until this point. Writing the async call for JavaScript to fetch the Python API was new territory for me.

I had also accidentally set the Python API to return an HTTP response with a JSON in it, instead of just a JSON. That took time to see and fix.

Cypress also was new territory, but was made simpler by the website I had created. I did run into issues of running Cypress locally, versus Cypress Cloud and the differing results. 

It took a fair bit of experimentation to find that the cloud version loaded the code slower than my local version did, and that was leading to different results. I rewrote the code later to reduce if not remedy the issue outright.


**Chunk 4: Automation / CI**
###Skills: Terraform, Github Actions,
In this final section, you are to implement all of the above using IaC. I used Terraform for this, as it is not cloud specific and is fairly popular.

Deploying the Function App Function code took the longest, as I ran into several issues with it. The first was a Terraform [bug](https://github.com/hashicorp/terraform-provider-azurerm/issues/17943) that deleted the resource after it was deployed.

I had to deploy the Function App Function code outside of terraform, which made things more difficult. I also noticed the Cypress Cloud difference in full here, and that took time to resolve.

I set up the actions so that on push it would run through the DEV workflow. Once DEV passed the Cypress tests successfully, it would start the PROD workflow. Both DEV and PROD are in different subscriptions, with different service providers used by terraform.

I also took the time to go back and make my site better looking for public viewing, and I am very happy with the results.

 **Conclusion**
The Cloud Resume Challenge was well worth the time I put into it. It was a very valuable experience that I recommend to anyone looking to learn more about the Cloud and DevOps as a whole.

While I'm happy with my work so far, there is more to do. I am going to sit for the AZ-900 in the next few weeks. I am also going to see about implementing containerization in some fashion, probably via Kubernetes. We will see how it goes.