Cloud Resume Challenge
Tags: cicd, githubactions, azure, serverless
Published: 2024-04-23 00:45:03


# Transitioning to the Cloud: My Journey with Azure

Hey everyone! My name is Evan Dolatowski from Houston, Texas, and I’m a Full Stack developer. I'm currently working towards transitioning to the Cloud industry. The realization of an important gap in my knowledge and the adventure of educating myself more deeply about Cloud technologies began when I ended up hosting my full stack portfolio project using Netlify, Heroku, and Amazon S3 buckets. I didn’t expect to use Amazon S3 Buckets, but it was needed to solve an issue Heroku has with persistent file storage caused by the free hosting. As soon as I realized I needed this third hosting account for my application, I knew my use of the cloud was far from optimized. I needed to learn how to use one of the three large cloud providers: AWS, GCP, or Azure, and I wanted to make sure I knew how to use it well.

After researching jobs in my local area, I found Azure jobs are by far more common than AWS or GCP. So I knew my Cloud platform, familiarized myself with the Certifications available and got the AZ-900 Azure Fundamentals. My next goal was the AZ-104. Once I felt confident in the material and almost ready to take the Exam, I wanted to get some real hands-on experience using Azure services for a difficult project. This is where I discovered The Cloud Resume Challenge.

## The Objectives

1. The Az-900 Azure Fundamentals certification was a prerequisite to the challenge (luckily I already had it).
2. Your Resume needs to written in HTML, styled with CSS, and hosted on a Azure Storage static website.
3. The Azure Storage website URL should use HTTPS for security Using Azure CDN and Point a custom DNS domain name to the Azure CDN endpoint.
4. On the website there needs to be a visitor counter using Javascript request to a Database containing the count.
5. This Database would be Azure Cosmos DB account.
6. The Front End should not speak directly to the DB, an API written and tested in Python will accept the request and send SQL queries to the Database. (Azure Functions with an HTTP trigger).
7. The backend portion of the project should be defined using an ARM template on a Consumption plan and not manually in the Azure Portal.
8. The Git Repo needs to use CI/CD for both front and back end set up through Github actions for quick automated deployment.

And the final step, write a short blog post describing some things you learned while working on this project.

## Frontend

Creating the front end and deploying it to the Azure Storage static website wasn’t nearly as difficult as getting my custom domain set up. Setting up a CDN Profile, DNS Zone, and Purchasing a Custom Domain were all very new tasks for me. A lot of trial and error went into this, but probably more trial and error than I needed. I think if I had updated the DNS settings and patiently waited before I tested it would have worked out for me, but in the end, I probably deleted and recreated all my frontend resources in my resource group over a dozen times, sometimes with the Azure CLI and sometimes with the Portal. I spent a lot of time interacting with the Azure CLI and portal which was the reason I wanted to do the challenge so I'm kind of glad it didn’t just work right away.

## DB/Serverless Python API

Next, I needed to make the DB and the Azure Serverless function using Python. This is something silly but I think Azure Cosmos DB is so cool. It’s so quick to create a SQL DB with Azure and quickly connect a Python script to it using The Azure Cosmos DB SQL API library and start using queries. I was excited the challenge already recommends using Serverless functions because its cost-effective for a small project as well as a relatively new technology because I had already wanted to learn more about Serverless Functions. Initializing, creating the template, and testing this function was easy enough thanks to the Azure-CLI. Big thanks to the func init, func new and func start commands.

## CI/CD

Finally, we have CI/CD. I love the end result of this step. I think it’s literally so cool that 1 minute after I type ‘git push’ in the terminal the new update is deployed to my custom URL. (If my code passes the tests of course). I've used CI/CD before but I wanted to get more practice with it so I was excited it's included in the challenge. A ton of trial and error went into my frontend YAML file dealing with Node versions and dependencies, as well as my code runs a build script and the build is put into a directory called ‘src’ this src directory contains the files that will then be served in my Azure Storage static site. The backend was much less of a headache but both were a much-welcomed challenge. It’s nice to have the slow progress tackle one small problem at a time until it finally deploys with no errors.

## Conclusion

I feel great about using Azure. I spent a lot of time using the Azure CLI and Portal to create update and delete many kinds of resources while doing this challenge which was a very important part of this challenge to me. I'm excited to spend a bit more time studying and get my second Certification, the AZ-104.

Thank you Forrest Brazeal for creating this challenge, and thank you for creating the opportunity to meet the other takers of this challenge and network with like-minded individuals.

[EvanDolatowski.com](https://www.evandolatowski.com/)

[Link to frontend code]
(https://github.com/GnarlyLasagna/portfolio-site)
[Link to backend code](https://github.com/GnarlyLasagna/portfolio-server-less-py)
Feel free to reach out on [LinkedIn](https://www.linkedin.com/in/evan-dolatowski-a928aa21b/) if you’ve got any questions.