As someone just starting out their career in tech, it can be a challenge deciding which subfield to get into. Software engineering always seemed like the default route as a computer science student but it has never been something I found super interesting. That is until I found DevOps and Cloud Engineering.
As a way to boost my resume and kickstart my career, I decided to take on the Cloud Resume Challenge by Forrest Brazeal. The challenge is to create a personal resume website to learn the fundamentals of cloud and the principles of DevOps.
I would say the challenge was a success! In fact, you’re reading this blog post from the finished product. Below you will find a brief explanation of what I learned by taking on this challenge and how I am hoping it shapes the future of my career. Enjoy!
Phase 1: Building the Front-end
The first phase of this challenge, was to create the front-end of my website. The official challenge involves using just html and css to replicate your resume but I opted to follow the Developer mod which includes using a static site framework.
Hugo is the framework I decided on. Take a tour around after you finish reading!
Phase 2: Hosting the Front-end
Using Google Cloud’s Storage, DNS, Load Balancer, and I successfully hosted my website on my custom domain. The way this works is extremely simple. When users visit my website (thinktwicecodeonce.com), my domain uses an A-record to direct them through the load balancer. The load balancer then gives them access to the storage bucket containing the source code.
This was a huge milestone as my website was now live!
Phase 3: Creating a Visitor Counter with Cloud Run
This was my favorite part of the challenge because I got to build an API from scratch and connect it to the various GCP components. I chose to use Flask as my API framework and this was hosted in GCP via Cloud Run with Firestore as the database storing the counter.
Here is the updated flowchart with the Visitor Counter: Before we move on, a great ops practice is getting notified when a service is not working as intended. To achieve this, I implemented several alerting policies for incidents such as my Google Cloud Run service crashing. To get notified, I made use of PagerDuty to send notifications directly to my phone.
Phase 4: Create GCP Infrastructure-as-Code (IAC)
A foundational aspect of DevOps and Cloud Engineering is the concept of Automation. For example, in the event of a cyber disaster our infrastructure deployment may be infected with malware. Infrastructure-as-Code is the process of writing scripts that automatically build the required components in your cloud platform (GCP, AWS, Azure, etc.). This would allows us in this situation to teardown and rebuild our application super quick!
I used Terraform to create my Infrastructure-a-Code and here is a snippet!
Phase 5: Continuous Integration & Continuous Delivery (CI/CD)
Applying the concept of CI/CD is another key aspect of devops & cloud engineering. The result of CI/CD is an application that can be updated frequently and reliably.
There are lots of tools that help with CI/CD such as Jenkins, GitHub Actions, GitLab CI/CD, or Azure DevOps. Each of these tools have their unique advantages however they share the same goal of creating an automated pipeline for delivering applications.
I utilized two CI/CD tools for my project GitHub Actions for the front-end and Google Cloud Build for the back-end/API.
Extra Tip: Don’t commit GCP credentials or component information to source code. On GitHub, you can use project secrets and variables to protect this information.
Conclusion:
The completion of this challenge marks just the beginning of my journey in devops and cloud engineering. I’ve learned not only the mechanics of building cloud infrastructure but also the importance of resilience and adaptability in the fast-paced world of tech. As I move forward, I’m excited to take on larger, more complex projects, where I can continue to refine my skills and contribute to meaningful technology.
If you’ve made it this far, thanks for reading! I’m always happy to chat about this project, cloud engineering, or anything tech-related. If you have any questions, want to connect, or think I might be a good fit for your team, feel free to reach out. You can find me on LinkedIn or shoot me an email at [email protected]. I’m looking forward to hearing from you!