Troubleshooting Your Way Through the Cloud Resume Challenge

felipe costa couto - Sep 10 - - Dev Community

Hey everyone, my name is Felipe, I’m a Cloud Student/Enthusiast from São Paulo, Brazil, and this is my blog post about the Cloud Resume Challenge.

In college, I discovered this amazing area of technology called Cloud/DevOps. It involves everything I like the most and have always been enthusiastic about: Linux, computer networking, cloud computing, automating things with code, source control, troubleshooting, containers, and much more. It's a perfect mix of infrastructure and code. So, at the start of 2024, I decided to focus my energy on breaking into this field.

I bought Forrest Brazeal’s book and read it. The first recommended step is to get a certification, so I went straight for the AWS Certified Developer – Associate. I didn’t have much cloud experience, so I studied through AWS documentation, Stephane Maarek’s course, and used AWS’s free tier. I created resources from every part of the exam, even the simple ones, because I wanted hands-on experience to feel confident for the test. I took the exam in June, passed, and then it was time to dive into the Cloud Resume Challenge. I wanted to build something end-to-end using cloud infrastructure.

Before diving into the steps of the challenge, I have to say that the book is pretty amazing. It doesn’t give you a step-by-step guide; it makes you think. It provides many helpful links and resources, delving into what you need to complete the challenge while sharing inspiring stories of people who completed the challenge and transformed their career paths.

The Cloud Resume Challenge

You can check out the detailed steps here: https://cloudresumechallenge.dev/docs/the-challenge/aws/

my ended projected here:
https://felipecostacouto.link/

I won’t go deep into every part of the project—just some setbacks, how I overcame them, and lessons learned.

You may be asking, why troubleshooting in the title? First, I think it’s one of the most important skills in IT. Being able to create a path, form hypotheses, search for evidence, figure out why something isn't working, and then fix it is pretty awesome. Second, if you take on the challenge, you’ll be troubleshooting a lot (CORS issues and the final steps of CI/CD with GitHub Actions and Terraform come to mind).

Overview of everything by the end:

Image description

Front-End: Building an HTML, CSS, JavaScript Resume Website

I didn’t have much experience with front-end development, so I started with a basic resume website template and customized it to my liking. I ended up watching many front-end tutorials and making several changes to the page. It’s not perfect, but I think it’s good enough for the challenge.

Front-End Infrastructure: S3 | CloudFront | Route 53 | ACM

Instead of exposing the S3 bucket directly to the internet, I used CloudFront as a CDN, ACM for TLS/SSL certificates (for HTTPS), and Route 53 as my DNS.

This part was easier for me because, during my certification preparation, I had already created and worked with all these resources. Knowledge of IAM, CDNs, permissions, and computer networking (CNAME, A, AAAA, NS, and DNS records) helped a lot. I ran into a small issue with ACM, but after reading the docs, I fixed it in a couple of hours.

Back-End Infrastructure: API Gateway | Lambda | DynamoDB

Why back-end infrastructure? The website needs to display a visitor counter, which we store in AWS DynamoDB. We use API Gateway and Lambda to connect the front-end to the back-end.

Your JavaScript code shouldn’t communicate directly with your database. Instead, use an API Gateway (with a POST method) to invoke a Lambda function that increments the view count in DynamoDB.

This part was also relatively easy, thanks to my previous experience with the services, AWS’s excellent documentation, and some Python knowledge. The only challenges I faced were passing the API URL to the front-end JavaScript (permissions-related), handling CORS, and formatting the output from the Lambda function.

Now, from this point on, the real challenge began.

Infrastructure as code(Iac)

While I initially created the front-end and back-end manually, this was time-consuming. So, I switched to using Infrastructure as Code (IaC) to deploy resources on AWS.

I decided to use Terraform because of its multi-cloud capabilities. I had never created resources with Terraform before, so I spent weeks reading Terraform’s documentation, watching YouTube videos, and learning how to structure the project by separating each important resource. It was pretty cool to see everything working in the end—and using terraform destroy when needed, haha.

CI/CD

We also need to automate everything. When a developer pushes code to the repo, it should run tests and deploy the Terraform infrastructure.

This was another step where I learned a lot. I figured out how the jobs work, how to pass outputs between jobs, sync the S3 bucket with the API URL (from the output), invalidate the CloudFront cache, run Pytest, and use OpenID Connect.

The End

After investing weeks and countless hours into this project, it was incredibly rewarding to see everything working in the end. I learned so much, and this is just the beginning. I’m still a padawan, but by studying every day, creating new projects, and staying disciplined, I know I’ll continue to improve.

I’d like to thank Forrest Brazeal for creating this amazing project and providing a well-structured resource through his book. You’re helping the community around the world!

That’s all, folks! Greetings from Brazil.

Check out my site/resume at:
https://felipecostacouto.link/
GitHub repo of the project: https://github.com/felipecostacouto/CloudResumeChallengeAWS

.
Terabox Video Player