The Cloud Resume Challenge was created by Forrest Brazeal to help people prepare for a hands-on cloud career. I chose to do the original Cloud Resume challenge and host my resume website on AWS. I started doing the challenge to overcome my feeling of impostor syndrome. This comic from xkcd explains the feeling very well:
It’s a hard feeling to ignore even though I’ve been coding for 12 years now. 6 years on an amateur capacity and 6 years professionally. I wanted to prove to myself that I can design and develop a cloud project from scratch all by myself.
Before starting the challenge, I already have quite a bit of experience with AWS. I’m an AWS Certified Solutions Architect – Associate since Feb 2020. I’ve also developed several web services on AWS for the company that I work at. However, I still felt that there are areas of my cloud skills that I can improve on. Working on this challenge gave me the opportunity to develop my programming skills with AWS services that I don’t get to work on very often at my current workplace.
The first roadblock that I encountered was setting up validation for AWS ACM domain validation. I’ve never had to do this before at work because this was taken care of by another team. I had problems receiving the email validation request from AWS for my website domain as I had set up privacy protection on my cloud resume website domain. This meant that these validation emails were never sent to my own email address. It was instead sent to an anonymous email address setup by my domain host provider.
Fortunately, I was able to successfully solve this problem by following this AWS troubleshooting guide. I figured out that I needed to setup email for my website domain to route email validation request from Amazon by configuring MX records in the website DNS record. Once this was setup, I started receiving the email validation from AWS at my own email address even with privacy protection enabled on my domain.
Another gotcha that I encountered was that CloudFront and AWS ACM validation is only supported on us-east-1. I have my site hosted on a different AWS region as us-east-1 is famous for experiencing a lot of outages. So, I had to make sure that my AWS provisioning jobs were explicitly set to deploy CloudFront and ACM on us-east-1.
The third setback that I encountered was with configuring the terraform remote s3 backend. I wanted to dynamically set the variables to the remote backend according to the environment I’m deploying to. However, terraform doesn’t allow passing in variables to a remote backend. This is because the backend block in Terraform gets processed so early in Terraform’s workflow that it doesn’t have access to some
Terraform features like variables. At work, I got around this limitation by writing a custom templating script that would allow me to use variables to setup the backend block and output a valid terraform for deploying a remote S3 backend. Fortunately, I discovered this Terraform guide which says that Terraform now allows partial configuration of the backend. Which means that I no longer have to write a custom script to handle this functionality.
Lambda is one of the AWS services that I don’t get to use very often at work. The web services that I provision for my job are better suited to be hosted on EC2 servers rather than Lambdas. Hence, I was happy to get to work with Lambdas for this challenge. I used Lambda to update the count of visitors to my cloud resume website. This count is stored and updated in a DynamoDB table.
I found that unit testing Lambda to be quite tricky. I had to figure out how to simulate the interaction between the DynamoDB table and the Lambda function in my local development environment. Luckily, someone else already did this and made it available in this permissive open-source library: moto. This allowed me to mock the AWS services that I needed for testing the visitor count to my website easily.
While testing the visitor count functionality to my website, I also noticed that new code changes that I committed doesn’t get reflected immediately when I visit my website. This is because my website is fronted by Amazon CloudFront. User traffic will see the webpage that is cached from the nearest CloudFront Edge location to them. When I first started this challenge, I had set the cache TTL (Time to Live) to 31536000 seconds. I made this decision with the thought that the content of my resume website will not change very often. Though, I forgot to consider that I will make frequent changes to my resume website in the initial stages of development.
To solve this issue, I needed to force an update the CloudFront Edge caches content by invalidating the cache files: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html The other alternative is to use versioned file names on the S3 bucket where I stored the content of my website. This option could be useful if I ever find the need to update my website files very frequently.
The last challenge that I encountered was not a technical challenge. I found it difficult to find the time to continue working on my Cloud Resume website. I encountered other more pressing work and personal life challenges shortly after starting the challenge on Nov 21, 2021. I found it hard to justify spending time on a personal project with everything else that is happening in my life. It took me well over 11 months to finish the challenge.
However, one day I read the book “Make Time How to Focus on What Matters Every Day” written by Jake Knapp and John Zeratsky on a whim. Reading the book gave me the insights I needed to find the time and focus to finish this challenge. I finally finished all the coding for my cloud resume website on Oct 13, 2022. All the code that I wrote for this challenge is available on my github repo: https://github.com/ikkidev/CloudResume
I am glad I decided to do the Cloud Resume Challenge. The experience I gained from doing the challenge allowed me to improve my cloud skills. I was also able to experience growth on a personal and professional capacity, gain clarity on how best to use my time and energy to focus on the things that matters most to me.
Now, I feel less worried about the impostor syndrome that creeps up in my thoughts from time to time. I don’t think the feeling will ever go away but I am now more comfortable and confident with myself.