loading...

Taking the #CloudResumeChallenge

jswingle profile image Jeremy Swingle ・3 min read

Welcome! This is a blog post explaining my learning experience with the "cloud resume challenge," a set of tasks put together by Forrest Brazeal. For more information, check out the challenge here: https://cloudresumechallenge.dev/

You can access my resume, the result of this challenge, at:
www.j-swingle.com

Since the challenge involved a number of steps, I'll focus on the things I had the least experience with and learned the most from doing. Before beginning the challenge, I had already passed all three AWS Associate certifications, so setting up my static resources and configuring Route 53 and CloudFront were the easier parts of the project. I also knew Python, so coding the Lambda function and the tests weren't too difficult (although I did need to learn how to use boto3.)

Setting up API Gateway was new to me. I already knew what an API was, but there's a learning curve to the implementation. After some effort, I was getting the expected values every time when making requests from my console. But then, when I added a fetch() in Javascript to my site, it wasn't working. Javascript is new to me, so I naturally thought it was a syntax error... then I noticed the console in my browser was pointing me toward a CORS configuration issue. Once I was deploying everything via SAM, I switched to a Lambda proxy integration, and had to ensure Access-Control-Allow-Origin was set in the return value of my Lambda function instead of configuring it directly in my API.

Speaking of SAM, I also had an issue with configuring the DynamoDB table to my liking. The "SimpleTable" resource creates just that: a simple table, which you're not allowed to configure much within the template itself. I wanted my SAM template to define not only a primary key, but also an attribute that the counter value could be stored under. I'm sure there are ways this can be done within SAM/CloudFormation itself, but for this relatively simple task it worked to refactor my Lambda code to use try/except. With this change, my function handles the table for me upon the first visit to the webpage. If I ever want to delete the table and start the counter anew, I no longer need to manually create a table.

GitHub Actions was also new to me. CI/CD with a serverless architecture was a bit intimidating at first, but after reading the documentation and looking around for some already-published actions, the workflow syntax started to click. I now have a set of jobs that will deploy resources according to my SAM template, and then test each of the three resources created (Lambda, DynamoDB, API Gateway) to make sure they are functioning properly.

One last skill I learned was maybe the simplest thing in the challenge: HTML/CSS. Before, I was familiar enough with these to read someone else's code, but I hadn't actually worked with them myself yet - probably because I've never fancied myself a visual designer! This project actually made me sit down and figure it out. The result? ...well, I don't think I'll be winning any awards for my site design, but at least I understand how to handle HTML/CSS now, which will come in handy. It's not complicated, but it did take some troubleshooting to get the page to display exactly as I wanted.


I have a piece of advice for anyone else ready to try the challenge. On the original post, the ability to "Google well" was stated as a useful skill to demonstrate. I agree, but for anyone else looking to try the challenge, I would add another useful skill: scouring official documentation. I did find help with some of the usual suspects like StackExchange and good old Google, but in many cases the best resource was AWS itself. (Don't forget GitHub Actions' documentation, too!) Official documentation can be elaborate and you may need to be patient to find the information you're looking for, but it's worth it for answers on topics that you need a very thorough understanding of, or which are tougher to Google.

Overall, I appreciated this challenge. It provided a framework for me to not only learn some new things, but also put together a coherent project using things I had already messed around with. Perhaps most importantly, though, I gained more confidence! There's nothing like the satisfaction of seeing multiple parts of a project "click" together and work just like I wanted it to. This was an exciting opportunity for both my career development and my personal progress, and I thank Forrest Brazeal for coming up with the idea!

Discussion

pic
Editor guide
 

hey Jeremy, cool reading. found this through cloudresumechallenge.dev. I have similar skills to what you are describing so I think my path will be roughly similar. I wanted to ask how much time it took you to get the whole thing done (including all the learning)