Cloud Resume Challenge on GCP - Part 1: The Original Challenge

Cloud Resume Challenge on GCP - Part 1: The Original Challenge

After passing the Google Cloud Associate Cloud Engineer certification, I needed to apply the skills. Being recommended the Cloud Resume Challenge on reddit, I was attracted to the proposed way of learning: Forrest Brazeal provides the project specifications and you figure things out on your own.

What is the Cloud Resume Challenge

The final product is a Cloud-hosted resume website. There are additional "mods" or parts to the project that you can choose if you want to explore more of DevOps, Development or Security. I developed my DevOps skills because they were almost non-existent. I also added a subset of DevOps, GitOps, explained in Part 2.

Skills developed in the challenge:

  • Full-stack software development
  • Version control
  • GitOps
  • Infrastructure as Code
  • CI/CD
  • Cloud services and serverless
  • Application security: IAM, CORS
  • Networking: DNS, CDN

The Challenge's challenges

Building the front-end

I began creating a very basic website then upgraded it at the end of the project by modifying an existing template.

Cloud Load Balancing was interesting to implement because of its complexity. In Terraform, each Cloud Load Balancer's component is represented by a resource. URL map is what directs requests from the website to the backend bucket.

Load Balancer components

Building the API

This section was not problematic to make work on its own. It's the integration with the front-end in the next section that revealed issues.

Solution 1: Cloud Run + API Gateway

I started by building the API with Cloud Run and API Gateway, but had CORS issues in the front-end/back-end integration.

Solution 2: Cloud Run (API) + Cloud Endpoints + Cloud Run (ESPv2)

I replaced the API Gateway with Cloud Endpoints. The purpose of ESPv2 is to pass the CORS request to the backend when using Cloud Endpoints. The setup was quite complicated as it implied manually building the ESPv2 image from a script when the rest was deployed with Terraform. The issue with the front-end integration persisted.

Solution 3: Cloud Functions + API Gateway

The simplest solution was the one that actually worked. Indeed, writing the serverless function in Cloud Functions is more straightforward than writing a Flask app on Cloud Run.

Integrating front-end and back-end

As stated in the previous step, CORS was the main challenge that I overcame by simplifying the components.

There was another challenge around integrating the Cypress test in Cloud Build CI/CD pipeline. In the end I only ran the test locally.

Automation and CI/CD

Overall, my experience was that using the Cloud is not complicated until it is, and when it is, it is very complicated if not using Terraform. So this part solved more issues than it brought.

Blog post

Even though I've done many personal projects before, it's the first time sharing publicly for me. Writing articles is a skill I'd like to develop more as it forces you to clarify your thinking and decipher what's relevant.

Developing skills other than technology is another benefit of the Cloud Resume Challenge.

Conclusion

For those wanting to learn the Cloud, the CRC is definitely very efficient. In Part 2, I explain how I added GitOps to the challenge.

Repositories:

Front-end

Back-end