AWS Cloud Resume challenge: Head in the Clouds
Tags: aws, cloud, devops, python
Published: 2024-01-01 23:46:56

It is fascinating how much you can learn about yourself when you take on a challenge. I find more often than not, we mistake theoretical understanding with practical applications, and that's the beauty of this project.

I came across the Cloud Resume Challenge from Gwyn's video and I decided to take part in the challenge. 

In preparation for my AWS Solutions Architect Associate certification, I realized this challenge was a good opportunity to prepare for the exam by taking on a real world project. It was an opportunity for me to demonstrate my architecting skills in the cloud and also take a big step towards achieving the certification, and that was why I devoted the December holidays to this project following the end of the academic semester for my master's program. 

**The Challenge broken down:**

1. Obtain an AWS certification: Already have an AWS CCP certification.
2. HTML and CSS Resume: Crafted the resume in HTML and styled it with CSS.
3. Deployment to Amazon S3: Hosted the static website on Amazon S3.
4. HTTPS with CloudFront: Secured the website with HTTPS using CloudFront and a custom domain via Hostinger.
5. JavaScript Visitor Counter: Implemented JavaScript to display the number of visitors.
6. DynamoDB for Visitor Count: Stored the visitor count value in Amazon DynamoDB.
7. API for Database Interaction: Created an API using AWS API Gateway and Lambda services to update the database.
8. Lambda Function in Python: Wrote the Lambda function code in Python along with tests.
9. Infrastructure as Code (IaC): Utilized AWS Serverless Application Model (SAM) for defining AWS resources.
10. CI/CD Pipeline: Established a CI/CD pipeline using GitHub Actions.

These steps led to this [Resume](https://lagbaja.tech/)

**Troubleshooting nights:**

Automating the workflow on Github to achieve continuous integration and deployment of the code proved more challenging than anticipated. For context, check out how many workflow runs it took to achieve success

![Errors from Github actions](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kcy2vc31vnftm4b1iqk2.png)

I stayed up late for several nights on end knowing how close I was to solving the issue with every new error description I came across yet putting up with the heartache of the elusive solution until it finally came. I went through various challenges with Github secrets, then failing integration tests, unsupported checkout actions and dependency issues. One key thing I learnt from this phase was to start small and simple when writing tests and scripts, then gradually build on top incrementally.

I got creative by setting up a dev environment and trying out different things that broke my code and other things that gave me comforting error responses. Figuring out CORS (Cross Origin Resource Sharing) when setting up the API to call the lambda function was very rewarding as it filled some knowledge gaps even though I always felt I was no stranger to working with APIs. 

I also learnt other problems do not require you to stay up all night but go to bed trusting your work and wake up the next day to a problem solved. This was the case for setting up my custom domain name. I made use of a domain I got from Hostinger instead of Route53. After setting up the cname and CAA DNS records on Hostinger, setting the alternate domain name on Cloudfront and applying the certificate from Amazon, it seemed logical that everything is set for me to make a secure connection to the website but I was stumped to see this - 

![SSL Error](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5gkoydvokpfmzdw84bag.png)

I went through youtube videos, documentations, chatGPT, cache invalidations and switching of browsers - yet the error persisted. So I went to bed. All it took to get it working the next day was but a simple refresh on the browser.

**Learning from mistakes**

Completing this challenge did not mean I did not make my fair share of mistakes along the way. Wanting to avoid youtube videos dedicated to solving this challenge in the beginning meant that I largely ignored harnessing youtube resources in the beginning and I later realized how much this predetermination limited my scope for utilizing available resources. Of course I adjusted this view along the way as I had to remind myself that smart people always know what and when to learn from others.

**Next steps**

Going forward, I plan to reconstruct the infrastructure with Terraform and add some other improvements to this project. I give thanks to Forrest Brazeal for creating such a thoughtful project, with the hope that this experience inspires others to take on challenges and explore their potential.