Meta Resume Challenge
Tags: challenge, cloudskills, devops, multicloud
Published: 2021-10-02 03:28:59

## Backstory

I have been an advocate for the #CloudGuruChallenge since [Forrest Brazeal](https://forrestbrazeal.com/) started it with [The Cloud Resume Challenge](https://forrestbrazeal.com/2020/04/23/the-cloud-resume-challenge/). Before his announcement, I would often find myself thinking of side projects that I could build to enhance my skills, yet that usually didn't turn out well. Now [acloudguru](acloudguru.com) provides a bunch of these awesome challenges regularly that I can really dive into. 
> https://acloudguru.com/blog/tag/cloudguruchallenge

Unfortunately, when actively participating in literally every challenge that is released by acloudguru you may find some overlap. This existence of this overlap is precisely how I dreamt up this challenge. 

More specifically, I am referring to three challenges in particular. 

1. [Resume on AWS Challenge](https://forrestbrazeal.com/2020/04/23/the-cloud-resume-challenge/)

2. [Resume on Azure Challenge](https://acloudguru.com/blog/engineering/cloudguruchallenge-your-resume-in-azure)

3. [Resume on GCP Challenge](https://acloudguru.com/blog/engineering/cloudguruchallenge-your-resume-on-gcp)

This overlap makes complete sense. You see most people will not participate in every challenge like I do. I see the value in having dedicated challenges for all the major cloud providers as it allows candidates to target the platform that resonates most with them. 

### Problem

Since I did complete the [Resume on Azure Challenge](https://acloudguru.com/blog/engineering/cloudguruchallenge-your-resume-in-azure) I was torn about participating in the [Resume on GCP Challenge](https://acloudguru.com/blog/engineering/cloudguruchallenge-your-resume-on-gcp). Albeit I knew the GPC skills would prove invaluable to my career and personal growth.  

I did not need, or want, different versions of my resume floating around. I needed a uniform solution that combined the best aspects of all three challenges.

### Solution

I came up with the lovely idea to extend my [Resume on Azure](https://dev.to/wheeleruniverse/apr-21-cloudguruchallenge-3fch) to AWS and GCP as well. When I pitched the idea in the [acloudguru Discord server](https://discord.gg/NwfDnNj54T) I received some incredible feedback. That led into some collaboration with Forrest and the amazing folks at acloudguru which generated a presentable version of what we dubbed the "Meta Resume Challenge". 

Honestly I never would have been able to create this without the help of the community. Special thanks to Forrest for including this challenge in his recently published book; [The Cloud Resume Challenge Book](https://cloudresumechallenge.dev/book/). I would definitely recommend it! It just might change your life...

_____

## Overview

### Creator

Justin Wheeler

* GitHub: https://github.com/wheeleruniverse
* LinkedIn: www.linkedin.com/in/wheeleruniverse

### Goal

Build a serverless multi-cloud resume using three cloud providers with complete isolation between them. Use IaC for cloud resource management. Use CI/CD for code build, test, and deployment. 

### Outcome

Build serverless cloud agnostic skills that are so important when enterprise companies strive for multi-cloud. Learn the nuances between cloud providers to make more informed decisions when considering cloud products. 
_____

## Introduction

In this challenge you will be asked to build a traditional three tier application that will span three unique cloud providers. The application itself will be your virtual resume that can act as living proof of your cloud expertise. The frontend tier, constructed with web technologies like HTML, CSS, and JavaScript. The backend tier, constructed with server-side technologies like Java or Python. Finally, the database tier, that will store the application data. The services used will be serverless. The resources will be managed using Infrastructure as Code (IaC). The code will be deployed automatically using a Continuous Integration (CI) / Continuous Deployment (CD) pipeline.

Although, it is true that a single cloud provider can be perfectly sufficient in some scenarios, other situations will require the use of multiple cloud providers in tandem. Imagine a hypothetical case where your application always requires mission critical uptime. Your management will not accept the excuse that your cloud provider was having issues, while your company’s reputation may have been damaged by a service outage. In cases like this the risk can be avoided by replicating your application onto another cloud provider, or multiple providers. This improved fault tolerance can be a key benefit to a multi-cloud application, yet it’s not the only benefit.
* Improved cloud knowledge by using and learning the subtle differences between providers. 
* Improved options for cost savings since one provider may offer a similar service for a better price.
* Improved product offering since you can choose from the range of products from all providers.

_____

## Prerequisites

* [DevOps Essentials](https://acloudguru.com/course/devops-essentials)
* [IaC Pulumi](https://www.pulumi.com/docs/get-started/) or [IaC Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started)
* [Serverless Concepts](https://acloudguru.com/course/serverless-concepts)
* [Serverless Resources AWS](https://aws.amazon.com/serverless/)
* [Serverless Resources Azure](https://azure.microsoft.com/en-us/solutions/serverless)
* [Serverless Resources GCP](https://cloud.google.com/serverless)

_____

## Architecture

![Meta Cloud Resume Architecture Diagram](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rl8a3lult1h74smwu2wz.png)

> :warning: Note 
>
> I provided this as an example only. Your architecture may look completely different and that's perfectly okay.
_____

## Challenge Steps

1. Create a plan of what you will use
    * Which cloud providers (three)? 
    * Which cloud services?
        * All the services should be considered serverless. 
        * Sometimes there is some debate on whether a service is truly serverless. In these instances, I would argue to side with the cloud provider that owns that service.  
    * Which DNS provider? 
    * Which DNS registrar? 
    * Which CI/CD service? I recommend GitHub Actions.
    * Which IaC provider? I recommend Terraform.
    * Which Git provider? I recommend GitHub.
    * Which programming languages?
    * Which programming frameworks?
2. Create a Git repository to store your project resources
    * All code should be stored in version control. 
    * CI/CD and IaC templates should be stored in version control.
3. Create IaC templates to create cloud infrastructure.
    * There are multiple ways to manage templates. I recommend at least three templates separated by provider to keep the IaC templates from becoming cumbersome. 
4. Create resume data in databases
    * Resume data should NOT be hard coded on the website. 
    * You could create your data in JSON documents so that they can be easily uploaded to the databases. 
5. Create frontend code to display the website
    * There should be some indication of which cloud is serving the application visible on the frontend.
    * There are countless ways to build websites. You can keep it simple with HTML, CSS, and JavaScript or go more advanced with a frontend framework like Angular, React, or Vue. 
    * Ensure that your frontend code is considered “static” so that it can easily be hosted on static website hosting solutions like AWS S3. Dynamic frontend code like PHP or JSP will NOT work.
6. Create backend code to fetch resume data from the databases
    * Ensure that your backend code is capable of being hosted on your cloud provider services. For example, AWS Lambda only supports C#, Go, Java, Node.js, PowerShell, Python, and Ruby. So, if you’re trying to use AWS Lambda with a different language you may struggle, but I guess there’s always the option of deploying a container if you want to go that route.
7. Create CI/CD templates to orchestrate code deployment to the various cloud providers
    * There are multiple ways to manage templates. I recommend at least two templates separated by frontend and backend code.
    * Your CI/CD pipeline should have at least build, test, and deploy stages. 
8. Register a domain name for your website
    * You can register a .com domain name for $12/year. Some cloud providers are also DNS registrars, like AWS and GCP, which may simplify things if you choose to use one of these providers. 
9. Configure DNS routing for your website
    * There should be a single DNS provider that controls routing to your domain name. 
    * Configure health checks for your three endpoints so that you don’t send traffic to an endpoint that is unhealthy. 
    * Configure round-robin routing between the three cloud providers so that when users enter your domain name, they will be navigated to any of the healthy endpoints. 
10. Write a blog post explaining your project
    * What did you learn?
    * Why did you make the decisions that you did?
    * What would you do different next time? 

____

## Extra-Challenging Steps

You do not need to perform these additional steps to “declare victory” on the challenge, but they will help your project stand out and provide awesome additional learning.

1. Use less popular cloud providers.
    * AWS, Azure, and GCP are very popular cloud providers with tons of documentation, examples, and tutorials. It would be more impressive if you were able to accomplish the challenge using a different cloud provider like Alibaba, IBM, OCI, etc. 
2. Configure zone-apex routing.
    * Zone-apex routing refers to your domain name without any prefix. Example given, “example.com”. This will take some additional configuration and may act different than your standard DNS routing. The reason is that it’s only available on some DNS providers and only with their services. For reference, https://cloudsoft.io/blog/aws-dns-domain-apex. 
3. Configure proper security and authentication between application layers.
    * The database should only be accessible by the backend. 
    * The backend should only be accessible by the frontend. 
4. Use a website testing tool like WebPageTest to ensure your resume is performing well.
    * [WebPageTest](https://www.webpagetest.org/) ensures your website is secure and efficient.
    
## Conclusion

I personally believe that this challenge is so relevant today for a multitude of reasons. This project tackles many prevalent concerns in enterprise companies. 
* Multi-cloud: companies will typically employ more than one cloud provider. 
* Fault Tolerant: companies will often worry about what would happen if a given cloud provider fails completely. 
* Serverless: companies will look for serverless solutions to reduce expenses and improve agility. 
* Infrastructure as Code: companies may prevent or prohibit access to the cloud consoles in production environments for good reason. 
* Continuous Integration / Continuous Deployment: companies hate manual processes especially around updating code.

If you are familiar with any of the topics above, then you will have an edge over other cloud experts. If you complete this challenge, you will familiarize yourself with all these topics. 

I would love to see your challenge submissions. Reach out to me on [LinkedIn](https://www.linkedin.com/in/wheelers-websites/) if you'd like to chat. If you do manage to complete the challenge I'll even endorse you on LinkedIn if that motivates you at all.
 
What are you waiting for? The world needs more cloud experts!